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/DeserializerForClassfileDecompiler.kt similarity index 85% rename from idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompiler.kt rename to idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForClassfileDecompiler.kt index 7f1797eb33d..74c61a8ff40 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/DeserializerForClassfileDecompiler.kt @@ -24,22 +24,25 @@ import org.jetbrains.kotlin.load.kotlin.JavaFlexibleTypeCapabilitiesDeserializer import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache 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.deserialization.ClassDescriptorFactory import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil -public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler { +public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForClassfileDecompiler { val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile) assert(kotlinClass != null) { "Decompiled data factory shouldn't be called on an unsupported file: " + classFile } val packageFqName = kotlinClass!!.classId.packageFqName - return DeserializerForDecompiler(classFile.parent!!, packageFqName) + return DeserializerForClassfileDecompiler(classFile.parent!!, packageFqName) } -public class DeserializerForDecompiler( +public class DeserializerForClassfileDecompiler( packageDirectory: VirtualFile, directoryPackageFqName: FqName ) : DeserializerForDecompilerBase(packageDirectory, directoryPackageFqName) { + override val targetPlatform: TargetPlatform get() = JvmPlatform private val classFinder = DirectoryBasedClassFinder(packageDirectory, directoryPackageFqName) @@ -52,8 +55,8 @@ public class DeserializerForDecompiler( override val deserializationComponents: DeserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer, - ClassDescriptorFactory.EMPTY + ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), errorReporter, + JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY ) override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection { @@ -77,6 +80,6 @@ public class DeserializerForDecompiler( } companion object { - private val LOG = Logger.getInstance(DeserializerForDecompiler::class.java) + private val LOG = Logger.getInstance(DeserializerForClassfileDecompiler::class.java) } } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt index 1644a148b80..697e0d84c4e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DeserializerForDecompilerBase.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.decompiler.textBuilder import com.intellij.openapi.vfs.VirtualFile -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ModuleParameters import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider @@ -28,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.resolve.constants.ConstantValue import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder @@ -36,12 +36,13 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager import org.jetbrains.kotlin.storage.StorageManager public abstract class DeserializerForDecompilerBase( - val packageDirectory: VirtualFile , + val packageDirectory: VirtualFile, val directoryPackageFqName: FqName ) : ResolverForDecompiler { - protected abstract val deserializationComponents: DeserializationComponents + protected abstract val targetPlatform: TargetPlatform + protected abstract val classDataFinder: ClassDataFinder protected abstract val annotationAndConstantLoader: AnnotationAndConstantLoader, AnnotationWithTarget> @@ -75,7 +76,7 @@ public abstract class DeserializerForDecompilerBase( PackageFragmentProviderForMissingDependencies(moduleContainingMissingDependencies) ) moduleDescriptor.setDependencies( - moduleDescriptor, KotlinBuiltIns.getInstance().getBuiltInsModule(), moduleContainingMissingDependencies + moduleDescriptor, targetPlatform.builtIns.builtInsModule, moduleContainingMissingDependencies ) } } \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt index 881161651fe..a27c76914b7 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DirectoryBasedClassFinder.kt @@ -102,8 +102,8 @@ class DirectoryBasedKotlinJavaScriptDataFinder( } } -object ResolveEverythingToKotlinAnyLocalClassResolver : LocalClassResolver { - override fun resolveLocalClass(classId: ClassId): ClassDescriptor = KotlinBuiltIns.getInstance().getAny() +class ResolveEverythingToKotlinAnyLocalClassResolver(private val builtIns: KotlinBuiltIns) : LocalClassResolver { + override fun resolveLocalClass(classId: ClassId): ClassDescriptor = builtIns.any } private val JavaClass.classId: ClassId diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt index 947a27bbef0..9fbec916bef 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDeserializerForDecompiler.kt @@ -20,8 +20,10 @@ import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.decompiler.navigation.JsMetaFileUtils +import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.serialization.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader @@ -41,6 +43,8 @@ public class KotlinJavaScriptDeserializerForDecompiler( NameResolverImpl.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false))) } + override val targetPlatform: TargetPlatform get() = JsPlatform + private val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(packageDirectory, directoryPackageFqName, nameResolver) override val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG) @@ -49,8 +53,8 @@ public class KotlinJavaScriptDeserializerForDecompiler( override val deserializationComponents = DeserializationComponents( storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider, - ResolveEverythingToKotlinAnyLocalClassResolver, ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic, - ClassDescriptorFactory.EMPTY + ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), ErrorReporter.DO_NOTHING, + FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY ) override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection {