Drop ClassData and PackageData, rename ClassDataWithSource -> ClassData

Use pairs in JvmProtoBufUtil for simplicity
This commit is contained in:
Alexander Udalov
2018-03-01 18:45:00 +01:00
parent 5ed5ac8291
commit 0ba42850f9
15 changed files with 68 additions and 104 deletions
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.serialization.ClassDataWithSource
import org.jetbrains.kotlin.serialization.deserialization.ClassData
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
@@ -45,14 +45,14 @@ class DeserializedDescriptorResolver {
return components.classDeserializer.deserializeClass(kotlinClass.classId, classData)
}
internal fun readClassData(kotlinClass: KotlinJvmBinaryClass): ClassDataWithSource? {
internal fun readClassData(kotlinClass: KotlinJvmBinaryClass): ClassData? {
val data = readData(kotlinClass, KOTLIN_CLASS) ?: return null
val strings = kotlinClass.classHeader.strings ?: return null
val classData = parseProto(kotlinClass) {
val (nameResolver, classProto) = parseProto(kotlinClass) {
JvmProtoBufUtil.readClassDataFrom(data, strings)
} ?: return null
val source = KotlinJvmBinarySourceElement(kotlinClass, kotlinClass.incompatibility, kotlinClass.isPreReleaseInvisible)
return ClassDataWithSource(classData, source)
return ClassData(nameResolver, classProto, source)
}
fun createKotlinPackagePartScope(descriptor: PackageFragmentDescriptor, kotlinClass: KotlinJvmBinaryClass): MemberScope? {
@@ -17,14 +17,14 @@
package org.jetbrains.kotlin.load.kotlin
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.serialization.ClassDataWithSource
import org.jetbrains.kotlin.serialization.deserialization.ClassData
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
class JavaClassDataFinder(
internal val kotlinClassFinder: KotlinClassFinder,
private val deserializedDescriptorResolver: DeserializedDescriptorResolver
) : ClassDataFinder {
override fun findClassData(classId: ClassId): ClassDataWithSource? {
override fun findClassData(classId: ClassId): ClassData? {
val kotlinClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
assert(kotlinClass.classId == classId) {
"Class with incorrect id found: expected $classId, actual ${kotlinClass.classId}"
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.load.kotlin.JvmNameResolver
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
import org.jetbrains.kotlin.protobuf.ExtensionRegistryLite
import org.jetbrains.kotlin.serialization.ClassData
import org.jetbrains.kotlin.serialization.PackageData
import org.jetbrains.kotlin.serialization.deserialization.*
import java.io.ByteArrayInputStream
import java.io.InputStream
@@ -30,23 +28,23 @@ object JvmProtoBufUtil {
val EXTENSION_REGISTRY: ExtensionRegistryLite = ExtensionRegistryLite.newInstance().apply(JvmProtoBuf::registerAllExtensions)
@JvmStatic
fun readClassDataFrom(data: Array<String>, strings: Array<String>): ClassData =
fun readClassDataFrom(data: Array<String>, strings: Array<String>): Pair<JvmNameResolver, ProtoBuf.Class> =
readClassDataFrom(BitEncoding.decodeBytes(data), strings)
@JvmStatic
fun readClassDataFrom(bytes: ByteArray, strings: Array<String>): ClassData {
fun readClassDataFrom(bytes: ByteArray, strings: Array<String>): Pair<JvmNameResolver, ProtoBuf.Class> {
val input = ByteArrayInputStream(bytes)
return ClassData(input.readNameResolver(strings), ProtoBuf.Class.parseFrom(input, EXTENSION_REGISTRY))
return Pair(input.readNameResolver(strings), ProtoBuf.Class.parseFrom(input, EXTENSION_REGISTRY))
}
@JvmStatic
fun readPackageDataFrom(data: Array<String>, strings: Array<String>): PackageData =
fun readPackageDataFrom(data: Array<String>, strings: Array<String>): Pair<JvmNameResolver, ProtoBuf.Package> =
readPackageDataFrom(BitEncoding.decodeBytes(data), strings)
@JvmStatic
fun readPackageDataFrom(bytes: ByteArray, strings: Array<String>): PackageData {
fun readPackageDataFrom(bytes: ByteArray, strings: Array<String>): Pair<JvmNameResolver, ProtoBuf.Package> {
val input = ByteArrayInputStream(bytes)
return PackageData(input.readNameResolver(strings), ProtoBuf.Package.parseFrom(input, EXTENSION_REGISTRY))
return Pair(input.readNameResolver(strings), ProtoBuf.Package.parseFrom(input, EXTENSION_REGISTRY))
}
@JvmStatic