Deduplicate code in JavaClassDataFinder
This commit is contained in:
+7
-5
@@ -39,16 +39,18 @@ class DeserializedDescriptorResolver(private val errorReporter: ErrorReporter) {
|
||||
}
|
||||
|
||||
fun resolveClass(kotlinClass: KotlinJvmBinaryClass): ClassDescriptor? {
|
||||
val classData = readClassData(kotlinClass) ?: return null
|
||||
return components.classDeserializer.deserializeClass(kotlinClass.classId, classData)
|
||||
}
|
||||
|
||||
internal fun readClassData(kotlinClass: KotlinJvmBinaryClass): ClassDataWithSource? {
|
||||
val data = readData(kotlinClass, KOTLIN_CLASS) ?: return null
|
||||
val strings = kotlinClass.classHeader.strings.sure { "String table not found in $kotlinClass" }
|
||||
val classData = parseProto(kotlinClass) {
|
||||
JvmProtoBufUtil.readClassDataFrom(data, strings)
|
||||
}
|
||||
val sourceElement = KotlinJvmBinarySourceElement(kotlinClass)
|
||||
return components.classDeserializer.deserializeClass(
|
||||
kotlinClass.classId,
|
||||
ClassDataWithSource(classData, sourceElement)
|
||||
)
|
||||
return ClassDataWithSource(classData, sourceElement)
|
||||
}
|
||||
|
||||
fun createKotlinPackagePartScope(descriptor: PackageFragmentDescriptor, kotlinClass: KotlinJvmBinaryClass): MemberScope? {
|
||||
@@ -64,7 +66,7 @@ class DeserializedDescriptorResolver(private val errorReporter: ErrorReporter) {
|
||||
}
|
||||
}
|
||||
|
||||
internal fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set<KotlinClassHeader.Kind>): Array<String>? {
|
||||
private fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set<KotlinClassHeader.Kind>): Array<String>? {
|
||||
val header = kotlinClass.classHeader
|
||||
if (!header.metadataVersion.isCompatible()) {
|
||||
errorReporter.reportIncompatibleMetadataVersion(kotlinClass.classId, kotlinClass.location, header.metadataVersion)
|
||||
|
||||
+4
-8
@@ -19,20 +19,16 @@ package org.jetbrains.kotlin.load.kotlin
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.serialization.ClassDataWithSource
|
||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||
|
||||
class JavaClassDataFinder(
|
||||
internal val kotlinClassFinder: KotlinClassFinder,
|
||||
private val deserializedDescriptorResolver: DeserializedDescriptorResolver
|
||||
) : ClassDataFinder {
|
||||
override fun findClassData(classId: ClassId): ClassDataWithSource? {
|
||||
val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
|
||||
assert(kotlinJvmBinaryClass.classId == classId) {
|
||||
"Class with incorrect id found: expected $classId, actual ${kotlinJvmBinaryClass.classId}"
|
||||
val kotlinClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
|
||||
assert(kotlinClass.classId == classId) {
|
||||
"Class with incorrect id found: expected $classId, actual ${kotlinClass.classId}"
|
||||
}
|
||||
val data = deserializedDescriptorResolver.readData(kotlinJvmBinaryClass, DeserializedDescriptorResolver.KOTLIN_CLASS) ?: return null
|
||||
val strings = kotlinJvmBinaryClass.classHeader.strings ?: error("String table not found in $kotlinJvmBinaryClass")
|
||||
val classData = JvmProtoBufUtil.readClassDataFrom(data, strings)
|
||||
return ClassDataWithSource(classData, KotlinJvmBinarySourceElement(kotlinJvmBinaryClass))
|
||||
return deserializedDescriptorResolver.readClassData(kotlinClass)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user