Minor, convert ClassData and PackageData to Kotlin data classes
This commit is contained in:
+2
-2
@@ -221,7 +221,7 @@ private class ClassClsStubBuilder(
|
||||
|
||||
private fun createNestedClassStub(classBody: StubElement<out PsiElement>, nestedClassId: ClassId) {
|
||||
val classDataProvider = c.components.classDataFinder.findClassData(nestedClassId)!!
|
||||
val classData = classDataProvider.classData
|
||||
createClassStub(classBody, classData.getClassProto(), nestedClassId, c.child(classData.getNameResolver()))
|
||||
val (nameResolver, classProto) = classDataProvider.classData
|
||||
createClassStub(classBody, classProto, nestedClassId, c.child(nameResolver))
|
||||
}
|
||||
}
|
||||
|
||||
+9
-10
@@ -24,7 +24,6 @@ import com.intellij.psi.stubs.PsiFileStub
|
||||
import com.intellij.util.indexing.FileContent
|
||||
import org.jetbrains.kotlin.idea.decompiler.findMultifileClassParts
|
||||
import org.jetbrains.kotlin.idea.decompiler.isKotlinInternalCompiledFile
|
||||
import org.jetbrains.kotlin.idea.decompiler.readMultifileClassPartHeaders
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DirectoryBasedClassFinder
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.DirectoryBasedDataFinder
|
||||
import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter
|
||||
@@ -73,20 +72,20 @@ public open class KotlinClsStubBuilder : ClsStubBuilder() {
|
||||
}
|
||||
return when {
|
||||
header.isCompatiblePackageFacadeKind() -> {
|
||||
val packageData = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val context = components.createContext(packageData.getNameResolver(), packageFqName)
|
||||
createPackageFacadeStub(packageData.getPackageProto(), packageFqName, context)
|
||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val context = components.createContext(nameResolver, packageFqName)
|
||||
createPackageFacadeStub(packageProto, packageFqName, context)
|
||||
}
|
||||
header.isCompatibleClassKind() -> {
|
||||
if (header.classKind != JvmAnnotationNames.KotlinClass.Kind.CLASS) return null
|
||||
val classData = JvmProtoBufUtil.readClassDataFrom(annotationData)
|
||||
val context = components.createContext(classData.getNameResolver(), packageFqName)
|
||||
createTopLevelClassStub(classId, classData.getClassProto(), context)
|
||||
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(annotationData)
|
||||
val context = components.createContext(nameResolver, packageFqName)
|
||||
createTopLevelClassStub(classId, classProto, context)
|
||||
}
|
||||
header.isCompatibleFileFacadeKind() -> {
|
||||
val packageData = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val context = components.createContext(packageData.getNameResolver(), packageFqName)
|
||||
createFileFacadeStub(packageData.getPackageProto(), classId.asSingleFqName(), context)
|
||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val context = components.createContext(nameResolver, packageFqName)
|
||||
createFileFacadeStub(packageProto, classId.asSingleFqName(), context)
|
||||
}
|
||||
else -> throw IllegalStateException("Should have processed " + file.getPath() + " with header $header")
|
||||
}
|
||||
|
||||
+9
-10
@@ -39,7 +39,7 @@ public open class KotlinJavaScriptStubBuilder : ClsStubBuilder() {
|
||||
override fun getStubVersion() = ClassFileStubBuilder.STUB_VERSION + 1
|
||||
|
||||
override fun buildFileStub(content: FileContent): PsiFileStub<*>? {
|
||||
val file = content.getFile()
|
||||
val file = content.file
|
||||
|
||||
if (isKotlinJavaScriptInternalCompiledFile(file)) return null
|
||||
|
||||
@@ -55,33 +55,32 @@ public open class KotlinJavaScriptStubBuilder : ClsStubBuilder() {
|
||||
val moduleDirectory = JsMetaFileUtils.getModuleDirectory(file)
|
||||
val stringsFileName = KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(packageFqName)
|
||||
val stringsFile = moduleDirectory.findFileByRelativePath(stringsFileName)
|
||||
assert(stringsFile != null, "strings file not found: $stringsFileName")
|
||||
assert(stringsFile != null) { "strings file not found: $stringsFileName" }
|
||||
|
||||
val nameResolver = NameResolver.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false)))
|
||||
val components = createStubBuilderComponents(file, packageFqName, nameResolver)
|
||||
|
||||
if (isPackageHeader) {
|
||||
val packageData = content.toPackageData(nameResolver)
|
||||
val context = components.createContext(packageData.getNameResolver(), packageFqName)
|
||||
return createPackageFacadeStub(packageData.getPackageProto(), packageFqName, context)
|
||||
val context = components.createContext(packageData.nameResolver, packageFqName)
|
||||
return createPackageFacadeStub(packageData.packageProto, packageFqName, context)
|
||||
}
|
||||
else {
|
||||
val classData = content.toClassData(nameResolver)
|
||||
val context = components.createContext(classData.getNameResolver(), packageFqName)
|
||||
val classData = content.toClassData(nameResolver)
|
||||
val context = components.createContext(classData.nameResolver, packageFqName)
|
||||
val classId = JsMetaFileUtils.getClassId(file)
|
||||
return createTopLevelClassStub(classId, classData.getClassProto(), context)
|
||||
return createTopLevelClassStub(classId, classData.classProto, context)
|
||||
}
|
||||
}
|
||||
|
||||
private fun createStubBuilderComponents(file: VirtualFile, packageFqName: FqName, nameResolver: NameResolver): ClsStubBuilderComponents {
|
||||
val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(file.getParent()!!, packageFqName, nameResolver)
|
||||
val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(file.parent!!, packageFqName, nameResolver)
|
||||
val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG)
|
||||
val annotationLoader = AnnotationLoaderForKotlinJavaScriptStubBuilder()
|
||||
return ClsStubBuilderComponents(classDataFinder, annotationLoader)
|
||||
}
|
||||
|
||||
companion object {
|
||||
val LOG = Logger.getInstance(javaClass<KotlinJavaScriptStubBuilder>())
|
||||
val LOG = Logger.getInstance(KotlinJavaScriptStubBuilder::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-10
@@ -32,8 +32,8 @@ import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||
public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler {
|
||||
val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile)
|
||||
assert(kotlinClass != null) { "Decompiled data factory shouldn't be called on an unsupported file: " + classFile }
|
||||
val packageFqName = kotlinClass!!.getClassId().getPackageFqName()
|
||||
return DeserializerForDecompiler(classFile.getParent()!!, packageFqName)
|
||||
val packageFqName = kotlinClass!!.classId.packageFqName
|
||||
return DeserializerForDecompiler(classFile.parent!!, packageFqName)
|
||||
}
|
||||
|
||||
public class DeserializerForDecompiler(
|
||||
@@ -62,22 +62,19 @@ public class DeserializerForDecompiler(
|
||||
"Was called for $facadeFqName; only members of $directoryPackageFqName package are expected."
|
||||
}
|
||||
val binaryClassForPackageClass = classFinder.findKotlinClass(ClassId.topLevel(facadeFqName))
|
||||
val annotationData = binaryClassForPackageClass?.getClassHeader()?.annotationData
|
||||
val annotationData = binaryClassForPackageClass?.classHeader?.annotationData
|
||||
if (annotationData == null) {
|
||||
LOG.error("Could not read annotation data for $facadeFqName from ${binaryClassForPackageClass?.getClassId()}")
|
||||
LOG.error("Could not read annotation data for $facadeFqName from ${binaryClassForPackageClass?.classId}")
|
||||
return emptyList()
|
||||
}
|
||||
val packageData = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
val membersScope = DeserializedPackageMemberScope(
|
||||
createDummyPackageFragment(packageFqName),
|
||||
packageData.getPackageProto(),
|
||||
packageData.getNameResolver(),
|
||||
deserializationComponents
|
||||
createDummyPackageFragment(packageFqName), packageProto, nameResolver, deserializationComponents
|
||||
) { emptyList() }
|
||||
return membersScope.getDescriptors()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val LOG = Logger.getInstance(javaClass<DeserializerForDecompiler>())
|
||||
private val LOG = Logger.getInstance(DeserializerForDecompiler::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -31,7 +31,7 @@ import java.io.ByteArrayInputStream
|
||||
|
||||
public class KotlinJavaScriptDeserializerForDecompiler(
|
||||
classFile: VirtualFile
|
||||
) : DeserializerForDecompilerBase(classFile.getParent()!!, JsMetaFileUtils.getPackageFqName(classFile)) {
|
||||
) : DeserializerForDecompilerBase(classFile.parent!!, JsMetaFileUtils.getPackageFqName(classFile)) {
|
||||
|
||||
private val nameResolver = run {
|
||||
val moduleDirectory = JsMetaFileUtils.getModuleDirectory(packageDirectory)
|
||||
@@ -65,13 +65,10 @@ public class KotlinJavaScriptDeserializerForDecompiler(
|
||||
}
|
||||
|
||||
val content = file.contentsToByteArray(false)
|
||||
val packageData = content.toPackageData(nameResolver)
|
||||
val (nameResolver, packageProto) = content.toPackageData(nameResolver)
|
||||
|
||||
val membersScope = DeserializedPackageMemberScope(
|
||||
createDummyPackageFragment(packageFqName),
|
||||
packageData.getPackageProto(),
|
||||
packageData.getNameResolver(),
|
||||
deserializationComponents
|
||||
createDummyPackageFragment(packageFqName), packageProto, nameResolver, deserializationComponents
|
||||
) { emptyList() }
|
||||
return membersScope.getDescriptors()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user