Merge remote-tracking branch 'origin/master' into incremental
This commit is contained in:
@@ -90,7 +90,7 @@ public class JetFromJavaDescriptorHelper {
|
||||
public static ClassKind getCompiledClassKind(@NotNull PsiClass psiClass) {
|
||||
ClassData classData = getClassData(psiClass);
|
||||
if (classData == null) return null;
|
||||
return DescriptorDeserializer.classKind(Flags.CLASS_KIND.get(classData.getClassProto().getFlags()));
|
||||
return SerializationPackage.classKind(Flags.CLASS_KIND.get(classData.getClassProto().getFlags()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,17 +33,17 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.KotlinBinaryClassCache
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedResolverUtils
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter
|
||||
import org.jetbrains.jet.lang.types.error.MissingDependencyErrorClassDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder
|
||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.DescriptorDeserializers
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.DescriptorDeserializersStorage
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.ConstantDescriptorDeserializer
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.ConstantDescriptorLoader
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
|
||||
import org.jetbrains.jet.descriptors.serialization.context.DeserializationGlobalContext
|
||||
|
||||
public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler {
|
||||
val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile)
|
||||
@@ -67,11 +67,9 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
return Collections.emptyList()
|
||||
}
|
||||
val membersScope = DeserializedPackageMemberScope(
|
||||
storageManager,
|
||||
createDummyPackageFragment(packageFqName),
|
||||
deserializers,
|
||||
descriptorFinder,
|
||||
JavaProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
JavaProtoBufUtil.readPackageDataFrom(annotationData),
|
||||
deserializationContext
|
||||
)
|
||||
return membersScope.getAllDescriptors()
|
||||
}
|
||||
@@ -108,32 +106,26 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
deserializerStorage.setErrorReporter(LOGGING_REPORTER)
|
||||
}
|
||||
|
||||
private val annotationDeserializer = AnnotationDescriptorDeserializer();
|
||||
private val annotationLoader = AnnotationDescriptorLoader();
|
||||
{
|
||||
annotationDeserializer.setClassResolver {
|
||||
annotationLoader.setClassResolver {
|
||||
fqName ->
|
||||
classes(fqName.toClassId())
|
||||
}
|
||||
annotationDeserializer.setKotlinClassFinder(localClassFinder)
|
||||
annotationDeserializer.setErrorReporter(LOGGING_REPORTER)
|
||||
annotationDeserializer.setStorage(deserializerStorage)
|
||||
annotationLoader.setKotlinClassFinder(localClassFinder)
|
||||
annotationLoader.setErrorReporter(LOGGING_REPORTER)
|
||||
annotationLoader.setStorage(deserializerStorage)
|
||||
}
|
||||
|
||||
private val constantDeserializer = ConstantDescriptorDeserializer();
|
||||
private val constantLoader = ConstantDescriptorLoader();
|
||||
{
|
||||
constantDeserializer.setClassResolver {
|
||||
constantLoader.setClassResolver {
|
||||
fqName ->
|
||||
classes(fqName.toClassId())
|
||||
}
|
||||
constantDeserializer.setKotlinClassFinder(localClassFinder)
|
||||
constantDeserializer.setErrorReporter(LOGGING_REPORTER)
|
||||
constantDeserializer.setStorage(deserializerStorage)
|
||||
}
|
||||
|
||||
private val deserializers = DescriptorDeserializers();
|
||||
{
|
||||
deserializers.setAnnotationDescriptorDeserializer(annotationDeserializer)
|
||||
deserializers.setConstantDescriptorDeserializer(constantDeserializer)
|
||||
constantLoader.setKotlinClassFinder(localClassFinder)
|
||||
constantLoader.setErrorReporter(LOGGING_REPORTER)
|
||||
constantLoader.setStorage(deserializerStorage)
|
||||
}
|
||||
|
||||
private val descriptorFinder = object : DescriptorFinder {
|
||||
@@ -156,6 +148,9 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
}
|
||||
}
|
||||
|
||||
val deserializationContext = DeserializationGlobalContext(storageManager, descriptorFinder, annotationLoader,
|
||||
constantLoader, packageFragmentProvider)
|
||||
|
||||
private fun createDummyPackageFragment(fqName: FqName): MutablePackageFragmentDescriptor {
|
||||
return MutablePackageFragmentDescriptor(ErrorUtils.getErrorModule(), fqName)
|
||||
}
|
||||
@@ -182,8 +177,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
LOG.error("Annotation data missing for ${kotlinClass.getClassName()}")
|
||||
}
|
||||
val classData = JavaProtoBufUtil.readClassDataFrom(data!!)
|
||||
return DeserializedClassDescriptor(storageManager, deserializers, descriptorFinder, packageFragmentProvider,
|
||||
classData.getNameResolver(), classData.getClassProto())
|
||||
return DeserializedClassDescriptor(deserializationContext, classData)
|
||||
}
|
||||
|
||||
// we need a "magic" way to obtain ClassId from FqName
|
||||
|
||||
Reference in New Issue
Block a user