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.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<DeclarationDescriptor> {
@@ -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)
}
}
@@ -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<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>
@@ -75,7 +76,7 @@ public abstract class DeserializerForDecompilerBase(
PackageFragmentProviderForMissingDependencies(moduleContainingMissingDependencies)
)
moduleDescriptor.setDependencies(
moduleDescriptor, KotlinBuiltIns.getInstance().getBuiltInsModule(), moduleContainingMissingDependencies
moduleDescriptor, targetPlatform.builtIns.builtInsModule, moduleContainingMissingDependencies
)
}
}
@@ -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
@@ -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<DeclarationDescriptor> {