DeserializerForDecompilerBase depends on TargetPlatform

This commit is contained in:
Pavel V. Talanov
2015-09-22 16:10:28 +03:00
parent bb3028b6c9
commit 64d8baee1d
4 changed files with 22 additions and 14 deletions
@@ -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)
} }
} }
@@ -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
) )
} }
} }
@@ -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
@@ -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> {