diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/KotlinClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/KotlinClsStubBuilder.kt index 83ac5eaa7dc..fa8b85926f8 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/KotlinClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/KotlinClsStubBuilder.kt @@ -16,24 +16,24 @@ package org.jetbrains.kotlin.idea.decompiler.stubBuilder +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.compiled.ClsStubBuilder +import com.intellij.psi.impl.compiled.ClassFileStubBuilder +import com.intellij.psi.stubs.PsiFileStub import com.intellij.util.cls.ClsFormatException import com.intellij.util.indexing.FileContent -import com.intellij.psi.stubs.PsiFileStub -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.impl.compiled.ClassFileStubBuilder -import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache -import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil -import org.jetbrains.kotlin.psi.JetFile -import org.jetbrains.kotlin.idea.decompiler.textBuilder.LocalClassFinder -import org.jetbrains.kotlin.idea.decompiler.textBuilder.LocalClassDataFinder -import com.intellij.openapi.diagnostic.Logger -import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter import org.jetbrains.kotlin.idea.decompiler.isKotlinInternalCompiledFile -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind +import org.jetbrains.kotlin.idea.decompiler.textBuilder.DirectoryBasedClassFinder +import org.jetbrains.kotlin.idea.decompiler.textBuilder.DirectoryBasedDataFinder +import org.jetbrains.kotlin.idea.decompiler.textBuilder.LoggingErrorReporter import org.jetbrains.kotlin.load.java.JvmAnnotationNames +import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache +import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind +import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.psi.JetFile +import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil public class KotlinClsStubBuilder : ClsStubBuilder() { override fun getStubVersion() = ClassFileStubBuilder.STUB_VERSION + 1 @@ -81,10 +81,10 @@ public class KotlinClsStubBuilder : ClsStubBuilder() { } private fun createStubBuilderComponents(file: VirtualFile, packageFqName: FqName): ClsStubBuilderComponents { - val localClassFinder = LocalClassFinder(file.getParent()!!, packageFqName) - val localClassDataFinder = LocalClassDataFinder(localClassFinder, LOG) - val annotationLoader = AnnotationLoaderForStubBuilder(localClassFinder, LoggingErrorReporter(LOG)) - return ClsStubBuilderComponents(localClassDataFinder, annotationLoader) + val classFinder = DirectoryBasedClassFinder(file.getParent()!!, packageFqName) + val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) + val annotationLoader = AnnotationLoaderForStubBuilder(classFinder, LoggingErrorReporter(LOG)) + return ClsStubBuilderComponents(classDataFinder, annotationLoader) } class object { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt index 98d127bd42b..4397d443d21 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt @@ -56,7 +56,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection { assert(packageFqName == directoryPackageFqName, "Was called for $packageFqName but only $directoryPackageFqName is expected.") - val binaryClassForPackageClass = localClassFinder.findKotlinClass(PackageClassUtils.getPackageClassId(packageFqName)) + val binaryClassForPackageClass = classFinder.findKotlinClass(PackageClassUtils.getPackageClassId(packageFqName)) val annotationData = binaryClassForPackageClass?.getClassHeader()?.annotationData if (annotationData == null) { LOG.error("Could not read annotation data for $packageFqName from ${binaryClassForPackageClass?.getClassId()}") @@ -72,13 +72,13 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di return membersScope.getDescriptors() } - private val localClassFinder = LocalClassFinder(packageDirectory, directoryPackageFqName) - private val localClassDataFinder = LocalClassDataFinder(localClassFinder, LOG) + private val classFinder = DirectoryBasedClassFinder(packageDirectory, directoryPackageFqName) + private val classDataFinder = DirectoryBasedDataFinder(classFinder, LOG) private val storageManager = LockBasedStorageManager.NO_LOCKS private val annotationAndConstantLoader = - BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, localClassFinder, LoggingErrorReporter(LOG)) + BinaryClassAnnotationAndConstantLoaderImpl(moduleDescriptor, storageManager, classFinder, LoggingErrorReporter(LOG)) private val packageFragmentProvider = object : PackageFragmentProvider { override fun getPackageFragments(fqName: FqName): List { @@ -105,7 +105,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di } private val deserializationComponents = DeserializationComponents( - storageManager, moduleDescriptor, localClassDataFinder, annotationAndConstantLoader, packageFragmentProvider, + storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, ResolveEverythingToKotlinAnyLocalClassResolver, JavaFlexibleTypeCapabilitiesDeserializer ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt similarity index 93% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt index bc44beef2fb..d7e8c057ef5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/LocalClassFinder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder import org.jetbrains.kotlin.serialization.deserialization.LocalClassResolver import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil -class LocalClassFinder( +class DirectoryBasedClassFinder( val packageDirectory: VirtualFile, val directoryPackageFqName: FqName ) : KotlinClassFinder { @@ -51,12 +51,12 @@ class LocalClassFinder( } } -class LocalClassDataFinder( - val localClassFinder: LocalClassFinder, +class DirectoryBasedDataFinder( + val classFinder: DirectoryBasedClassFinder, val log: Logger ) : ClassDataFinder { override fun findClassData(classId: ClassId): ClassData? { - val binaryClass = localClassFinder.findKotlinClass(classId) ?: return null + val binaryClass = classFinder.findKotlinClass(classId) ?: return null val data = binaryClass.getClassHeader().annotationData if (data == null) { log.error("Annotation data missing for ${binaryClass.getClassId()}")