Merge remote-tracking branch 'origin/master' into incremental

This commit is contained in:
Evgeny Gerashchenko
2014-06-19 11:43:11 +04:00
89 changed files with 1305 additions and 808 deletions
@@ -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