From 921694e13a78882ddcf9a8eb175ab1cb44460e7b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 7 Dec 2016 18:51:16 +0300 Subject: [PATCH] Deduplicate code in JavaClassDataFinder --- .../load/kotlin/DeserializedDescriptorResolver.kt | 12 +++++++----- .../kotlin/load/kotlin/JavaClassDataFinder.kt | 12 ++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt index 978681194f9..03e868d196c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt @@ -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): Array? { + private fun readData(kotlinClass: KotlinJvmBinaryClass, expectedKinds: Set): Array? { val header = kotlinClass.classHeader if (!header.metadataVersion.isCompatible()) { errorReporter.reportIncompatibleMetadataVersion(kotlinClass.classId, kotlinClass.location, header.metadataVersion) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt index d7c68929dad..bc7d840a388 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/JavaClassDataFinder.kt @@ -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) } }