Refactor: Introduce contexts in deserialization subsystem
Rewrite utilities to Kotlin and move them out of DescriptorDeserializer Include DescriptorDeserializer into context Use new context in injectors Drop Deserializers abstraction
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()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -40,11 +40,11 @@ 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.descriptors.serialization.descriptors.MemberFilter
|
||||
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)
|
||||
@@ -68,12 +68,9 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
return Collections.emptyList()
|
||||
}
|
||||
val membersScope = DeserializedPackageMemberScope(
|
||||
storageManager,
|
||||
createDummyPackageFragment(packageFqName),
|
||||
deserializers,
|
||||
MemberFilter.ALWAYS_TRUE,
|
||||
descriptorFinder,
|
||||
JavaProtoBufUtil.readPackageDataFrom(annotationData)
|
||||
JavaProtoBufUtil.readPackageDataFrom(annotationData),
|
||||
deserializationContext
|
||||
)
|
||||
return membersScope.getAllDescriptors()
|
||||
}
|
||||
@@ -132,12 +129,6 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
constantDeserializer.setStorage(deserializerStorage)
|
||||
}
|
||||
|
||||
private val deserializers = DescriptorDeserializers();
|
||||
{
|
||||
deserializers.setAnnotationDescriptorDeserializer(annotationDeserializer)
|
||||
deserializers.setConstantDescriptorDeserializer(constantDeserializer)
|
||||
}
|
||||
|
||||
private val descriptorFinder = object : DescriptorFinder {
|
||||
override fun findClass(classId: ClassId): ClassDescriptor? {
|
||||
return classes(classId)
|
||||
@@ -158,6 +149,9 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
}
|
||||
}
|
||||
|
||||
val deserializationContext = DeserializationGlobalContext(storageManager, descriptorFinder, annotationDeserializer,
|
||||
constantDeserializer, packageFragmentProvider, MemberFilter.ALWAYS_TRUE)
|
||||
|
||||
private fun createDummyPackageFragment(fqName: FqName): MutablePackageFragmentDescriptor {
|
||||
return MutablePackageFragmentDescriptor(ErrorUtils.getErrorModule(), fqName)
|
||||
}
|
||||
@@ -184,8 +178,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