DeserializerForDecompilerBase depends on TargetPlatform
This commit is contained in:
+9
-6
@@ -24,22 +24,25 @@ import org.jetbrains.kotlin.load.kotlin.JavaFlexibleTypeCapabilitiesDeserializer
|
|||||||
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
|
import org.jetbrains.kotlin.load.kotlin.KotlinBinaryClassCache
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
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.ClassDescriptorFactory
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||||
|
|
||||||
public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler {
|
public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForClassfileDecompiler {
|
||||||
val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile)
|
val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile)
|
||||||
assert(kotlinClass != null) { "Decompiled data factory shouldn't be called on an unsupported file: " + classFile }
|
assert(kotlinClass != null) { "Decompiled data factory shouldn't be called on an unsupported file: " + classFile }
|
||||||
val packageFqName = kotlinClass!!.classId.packageFqName
|
val packageFqName = kotlinClass!!.classId.packageFqName
|
||||||
return DeserializerForDecompiler(classFile.parent!!, packageFqName)
|
return DeserializerForClassfileDecompiler(classFile.parent!!, packageFqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DeserializerForDecompiler(
|
public class DeserializerForClassfileDecompiler(
|
||||||
packageDirectory: VirtualFile,
|
packageDirectory: VirtualFile,
|
||||||
directoryPackageFqName: FqName
|
directoryPackageFqName: FqName
|
||||||
) : DeserializerForDecompilerBase(packageDirectory, directoryPackageFqName) {
|
) : DeserializerForDecompilerBase(packageDirectory, directoryPackageFqName) {
|
||||||
|
override val targetPlatform: TargetPlatform get() = JvmPlatform
|
||||||
|
|
||||||
private val classFinder = DirectoryBasedClassFinder(packageDirectory, directoryPackageFqName)
|
private val classFinder = DirectoryBasedClassFinder(packageDirectory, directoryPackageFqName)
|
||||||
|
|
||||||
@@ -52,8 +55,8 @@ public class DeserializerForDecompiler(
|
|||||||
|
|
||||||
override val deserializationComponents: DeserializationComponents = DeserializationComponents(
|
override val deserializationComponents: DeserializationComponents = DeserializationComponents(
|
||||||
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
||||||
ResolveEverythingToKotlinAnyLocalClassResolver, errorReporter, JavaFlexibleTypeCapabilitiesDeserializer,
|
ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), errorReporter,
|
||||||
ClassDescriptorFactory.EMPTY
|
JavaFlexibleTypeCapabilitiesDeserializer, ClassDescriptorFactory.EMPTY
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
|
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
|
||||||
@@ -77,6 +80,6 @@ public class DeserializerForDecompiler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val LOG = Logger.getInstance(DeserializerForDecompiler::class.java)
|
private val LOG = Logger.getInstance(DeserializerForClassfileDecompiler::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+5
-4
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.idea.decompiler.textBuilder
|
package org.jetbrains.kotlin.idea.decompiler.textBuilder
|
||||||
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader
|
import org.jetbrains.kotlin.serialization.deserialization.AnnotationAndConstantLoader
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
import org.jetbrains.kotlin.serialization.deserialization.ClassDataFinder
|
||||||
@@ -36,12 +36,13 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
|||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
|
||||||
public abstract class DeserializerForDecompilerBase(
|
public abstract class DeserializerForDecompilerBase(
|
||||||
val packageDirectory: VirtualFile ,
|
val packageDirectory: VirtualFile,
|
||||||
val directoryPackageFqName: FqName
|
val directoryPackageFqName: FqName
|
||||||
) : ResolverForDecompiler {
|
) : ResolverForDecompiler {
|
||||||
|
|
||||||
protected abstract val deserializationComponents: DeserializationComponents
|
protected abstract val deserializationComponents: DeserializationComponents
|
||||||
|
|
||||||
|
protected abstract val targetPlatform: TargetPlatform
|
||||||
|
|
||||||
protected abstract val classDataFinder: ClassDataFinder
|
protected abstract val classDataFinder: ClassDataFinder
|
||||||
|
|
||||||
protected abstract val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>
|
protected abstract val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>
|
||||||
@@ -75,7 +76,7 @@ public abstract class DeserializerForDecompilerBase(
|
|||||||
PackageFragmentProviderForMissingDependencies(moduleContainingMissingDependencies)
|
PackageFragmentProviderForMissingDependencies(moduleContainingMissingDependencies)
|
||||||
)
|
)
|
||||||
moduleDescriptor.setDependencies(
|
moduleDescriptor.setDependencies(
|
||||||
moduleDescriptor, KotlinBuiltIns.getInstance().getBuiltInsModule(), moduleContainingMissingDependencies
|
moduleDescriptor, targetPlatform.builtIns.builtInsModule, moduleContainingMissingDependencies
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -102,8 +102,8 @@ class DirectoryBasedKotlinJavaScriptDataFinder(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object ResolveEverythingToKotlinAnyLocalClassResolver : LocalClassResolver {
|
class ResolveEverythingToKotlinAnyLocalClassResolver(private val builtIns: KotlinBuiltIns) : LocalClassResolver {
|
||||||
override fun resolveLocalClass(classId: ClassId): ClassDescriptor = KotlinBuiltIns.getInstance().getAny()
|
override fun resolveLocalClass(classId: ClassId): ClassDescriptor = builtIns.any
|
||||||
}
|
}
|
||||||
|
|
||||||
private val JavaClass.classId: ClassId
|
private val JavaClass.classId: ClassId
|
||||||
|
|||||||
+6
-2
@@ -20,8 +20,10 @@ import com.intellij.openapi.diagnostic.Logger
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.idea.decompiler.navigation.JsMetaFileUtils
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||||
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader
|
import org.jetbrains.kotlin.serialization.js.KotlinJavascriptAnnotationAndConstantLoader
|
||||||
@@ -41,6 +43,8 @@ public class KotlinJavaScriptDeserializerForDecompiler(
|
|||||||
NameResolverImpl.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false)))
|
NameResolverImpl.read(ByteArrayInputStream(stringsFile!!.contentsToByteArray(false)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val targetPlatform: TargetPlatform get() = JsPlatform
|
||||||
|
|
||||||
private val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(packageDirectory, directoryPackageFqName, nameResolver)
|
private val metaFileFinder = DirectoryBasedKotlinJavaScriptMetaFileFinder(packageDirectory, directoryPackageFqName, nameResolver)
|
||||||
|
|
||||||
override val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG)
|
override val classDataFinder = DirectoryBasedKotlinJavaScriptDataFinder(metaFileFinder, LOG)
|
||||||
@@ -49,8 +53,8 @@ public class KotlinJavaScriptDeserializerForDecompiler(
|
|||||||
|
|
||||||
override val deserializationComponents = DeserializationComponents(
|
override val deserializationComponents = DeserializationComponents(
|
||||||
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
storageManager, moduleDescriptor, classDataFinder, annotationAndConstantLoader, packageFragmentProvider,
|
||||||
ResolveEverythingToKotlinAnyLocalClassResolver, ErrorReporter.DO_NOTHING, FlexibleTypeCapabilitiesDeserializer.Dynamic,
|
ResolveEverythingToKotlinAnyLocalClassResolver(targetPlatform.builtIns), ErrorReporter.DO_NOTHING,
|
||||||
ClassDescriptorFactory.EMPTY
|
FlexibleTypeCapabilitiesDeserializer.Dynamic, ClassDescriptorFactory.EMPTY
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
|
override fun resolveDeclarationsInFacade(facadeFqName: FqName): Collection<DeclarationDescriptor> {
|
||||||
|
|||||||
Reference in New Issue
Block a user