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
@@ -34,11 +34,7 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.serialization.ClassDataWithSource
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
import org.jetbrains.kotlin.serialization.deserialization.ContractDeserializer
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration
import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
import java.io.InputStream
@@ -134,7 +130,7 @@ class DirectoryBasedDataFinder(
val classFinder: DirectoryBasedClassFinder,
val log: Logger
) : ClassDataFinder {
override fun findClassData(classId: ClassId): ClassDataWithSource? {
override fun findClassData(classId: ClassId): ClassData? {
val binaryClass = classFinder.findKotlinClass(classId) ?: return null
val classHeader = binaryClass.classHeader
val data = classHeader.data
@@ -148,6 +144,7 @@ class DirectoryBasedDataFinder(
return null
}
return ClassDataWithSource(JvmProtoBufUtil.readClassDataFrom(data, strings), KotlinJvmBinarySourceElement(binaryClass))
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings)
return ClassData(nameResolver, classProto, KotlinJvmBinarySourceElement(binaryClass))
}
}
@@ -242,22 +242,21 @@ private class ClassClsStubBuilder(
}
private fun createNestedClassStub(classBody: StubElement<out PsiElement>, nestedClassId: ClassId) {
val classDataWithSource = c.components.classDataFinder.findClassData(nestedClassId)
if (classDataWithSource == null) {
val rootFile = c.components.virtualFileForDebug
LOG.error(
"Could not find class data for nested class $nestedClassId of class ${nestedClassId.outerClassId}\n" +
"Root file: ${rootFile.canonicalPath}\n" +
"Dir: ${rootFile.parent.canonicalPath}\n" +
"Children:\n" +
rootFile.parent.children.sortedBy { it.name }.joinToString(separator = "\n") {
"${it.name} (valid: ${it.isValid})"
}
)
return
}
val (nameResolver, classProto) = classDataWithSource.classData
createClassStub(classBody, classProto, nameResolver, nestedClassId, classDataWithSource.sourceElement, c)
val (nameResolver, classProto, sourceElement) =
c.components.classDataFinder.findClassData(nestedClassId)
?: c.components.virtualFileForDebug.let { rootFile ->
LOG.error(
"Could not find class data for nested class $nestedClassId of class ${nestedClassId.outerClassId}\n" +
"Root file: ${rootFile.canonicalPath}\n" +
"Dir: ${rootFile.parent.canonicalPath}\n" +
"Children:\n" +
rootFile.parent.children.sortedBy { it.name }.joinToString(separator = "\n") {
"${it.name} (valid: ${it.isValid})"
}
)
return
}
createClassStub(classBody, classProto, nameResolver, nestedClassId, sourceElement, c)
}
companion object {