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? {
|
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 data = readData(kotlinClass, KOTLIN_CLASS) ?: return null
|
||||||
val strings = kotlinClass.classHeader.strings.sure { "String table not found in $kotlinClass" }
|
val strings = kotlinClass.classHeader.strings.sure { "String table not found in $kotlinClass" }
|
||||||
val classData = parseProto(kotlinClass) {
|
val classData = parseProto(kotlinClass) {
|
||||||
JvmProtoBufUtil.readClassDataFrom(data, strings)
|
JvmProtoBufUtil.readClassDataFrom(data, strings)
|
||||||
}
|
}
|
||||||
val sourceElement = KotlinJvmBinarySourceElement(kotlinClass)
|
val sourceElement = KotlinJvmBinarySourceElement(kotlinClass)
|
||||||
return components.classDeserializer.deserializeClass(
|
return ClassDataWithSource(classData, sourceElement)
|
||||||
kotlinClass.classId,
|
|
||||||
ClassDataWithSource(classData, sourceElement)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createKotlinPackagePartScope(descriptor: PackageFragmentDescriptor, kotlinClass: KotlinJvmBinaryClass): MemberScope? {
|
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
|
val header = kotlinClass.classHeader
|
||||||
if (!header.metadataVersion.isCompatible()) {
|
if (!header.metadataVersion.isCompatible()) {
|
||||||
errorReporter.reportIncompatibleMetadataVersion(kotlinClass.classId, kotlinClass.location, header.metadataVersion)
|
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.name.ClassId
|
||||||
import org.jetbrains.kotlin.serialization.ClassDataWithSource
|
import org.jetbrains.kotlin.serialization.ClassDataWithSource
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
|
||||||
|
|
||||||
class JavaClassDataFinder(
|
class JavaClassDataFinder(
|
||||||
internal val kotlinClassFinder: KotlinClassFinder,
|
internal val kotlinClassFinder: KotlinClassFinder,
|
||||||
private val deserializedDescriptorResolver: DeserializedDescriptorResolver
|
private val deserializedDescriptorResolver: DeserializedDescriptorResolver
|
||||||
) : ClassDataFinder {
|
) : ClassDataFinder {
|
||||||
override fun findClassData(classId: ClassId): ClassDataWithSource? {
|
override fun findClassData(classId: ClassId): ClassDataWithSource? {
|
||||||
val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
|
val kotlinClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
|
||||||
assert(kotlinJvmBinaryClass.classId == classId) {
|
assert(kotlinClass.classId == classId) {
|
||||||
"Class with incorrect id found: expected $classId, actual ${kotlinJvmBinaryClass.classId}"
|
"Class with incorrect id found: expected $classId, actual ${kotlinClass.classId}"
|
||||||
}
|
}
|
||||||
val data = deserializedDescriptorResolver.readData(kotlinJvmBinaryClass, DeserializedDescriptorResolver.KOTLIN_CLASS) ?: return null
|
return deserializedDescriptorResolver.readClassData(kotlinClass)
|
||||||
val strings = kotlinJvmBinaryClass.classHeader.strings ?: error("String table not found in $kotlinJvmBinaryClass")
|
|
||||||
val classData = JvmProtoBufUtil.readClassDataFrom(data, strings)
|
|
||||||
return ClassDataWithSource(classData, KotlinJvmBinarySourceElement(kotlinJvmBinaryClass))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user