Minor, change parameter order, reformat
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
package org.jetbrains.jet.lang.types.lang
|
||||
|
||||
import org.jetbrains.jet.descriptors.serialization.*
|
||||
import org.jetbrains.jet.descriptors.serialization.context.DeserializationContext
|
||||
import org.jetbrains.jet.descriptors.serialization.context.DeserializationGlobalContext
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationLoader
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.ConstantLoader
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope
|
||||
@@ -28,9 +28,7 @@ import org.jetbrains.jet.lang.descriptors.impl.PackageFragmentDescriptorImpl
|
||||
import org.jetbrains.jet.lang.resolve.name.ClassId
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||
import org.jetbrains.jet.lang.resolve.name.Name
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||
import org.jetbrains.jet.storage.StorageManager
|
||||
|
||||
import java.io.DataInputStream
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
@@ -44,17 +42,11 @@ class BuiltinsPackageFragment(storageManager: StorageManager, module: ModuleDesc
|
||||
public val provider: PackageFragmentProvider = BuiltinsPackageFragmentProvider()
|
||||
|
||||
private val members: DeserializedPackageMemberScope = run {
|
||||
val builtInsClassDataFinder = BuiltInsClassDataFinder()
|
||||
val deserializationContext = DeserializationContext(storageManager,
|
||||
module,
|
||||
builtInsClassDataFinder,
|
||||
AnnotationLoader.UNSUPPORTED, // TODO: support annotations
|
||||
ConstantLoader.UNSUPPORTED,
|
||||
provider,
|
||||
FlexibleTypeCapabilitiesDeserializer.ThrowException,
|
||||
ClassDeserializer(storageManager, builtInsClassDataFinder),
|
||||
nameResolver)
|
||||
DeserializedPackageMemberScope(this, loadPackage(), deserializationContext, { readClassNames() })
|
||||
val deserializationContext = DeserializationGlobalContext(
|
||||
storageManager, module, BuiltInsClassDataFinder(), AnnotationLoader.UNSUPPORTED, // TODO: support annotations
|
||||
ConstantLoader.UNSUPPORTED, provider, FlexibleTypeCapabilitiesDeserializer.ThrowException
|
||||
).withNameResolver(nameResolver)
|
||||
DeserializedPackageMemberScope(this, loadPackage(), deserializationContext, { readClassNames() })
|
||||
}
|
||||
|
||||
private fun loadPackage(): ProtoBuf.Package {
|
||||
|
||||
+3
-2
@@ -23,13 +23,14 @@ import org.jetbrains.jet.descriptors.serialization.context.DeserializationGlobal
|
||||
import kotlin.properties.Delegates
|
||||
import org.jetbrains.jet.lang.resolve.name.ClassId
|
||||
|
||||
public class ClassDeserializer(val storageManager: StorageManager, val classDataFinder: ClassDataFinder) {
|
||||
public class ClassDeserializer(storageManager: StorageManager) {
|
||||
// This should have been a constructor parameter, but this class and the context depend circularly on each other
|
||||
var globalContext: DeserializationGlobalContext by Delegates.notNull()
|
||||
|
||||
private val classes: (ClassKey) -> DeserializedClassDescriptor? = storageManager.createMemoizedFunctionWithNullableValues {
|
||||
(key: ClassKey) ->
|
||||
val classId = key.classId
|
||||
val classData = key.classData ?: classDataFinder.findClassData(classId)
|
||||
val classData = key.classData ?: globalContext.classDataFinder.findClassData(classId)
|
||||
if (classData != null) {
|
||||
val outerClassContext =
|
||||
if (classId.isTopLevelClass()) null
|
||||
|
||||
+11
-10
@@ -40,7 +40,7 @@ public open class DeserializationGlobalContext(
|
||||
public val constantLoader: ConstantLoader,
|
||||
public val packageFragmentProvider: PackageFragmentProvider,
|
||||
public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer,
|
||||
public val classDeserializer: ClassDeserializer = ClassDeserializer(storageManager, classDataFinder)
|
||||
public val classDeserializer: ClassDeserializer = ClassDeserializer(storageManager)
|
||||
) {
|
||||
{
|
||||
classDeserializer.globalContext = this
|
||||
@@ -48,10 +48,15 @@ public open class DeserializationGlobalContext(
|
||||
|
||||
public fun withNameResolver(nameResolver: NameResolver): DeserializationContext {
|
||||
return DeserializationContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
|
||||
constantLoader, packageFragmentProvider, flexibleTypeCapabilitiesDeserializer, classDeserializer, nameResolver)
|
||||
constantLoader, packageFragmentProvider, flexibleTypeCapabilitiesDeserializer,
|
||||
classDeserializer, nameResolver)
|
||||
}
|
||||
}
|
||||
|
||||
fun DeserializationGlobalContext.deserializeClass(classId: ClassId): ClassDescriptor? {
|
||||
return classDeserializer.deserializeClass(classId)
|
||||
}
|
||||
|
||||
|
||||
public open class DeserializationContext(
|
||||
storageManager: StorageManager,
|
||||
@@ -72,8 +77,8 @@ public open class DeserializationContext(
|
||||
|
||||
fun withTypes(containingDeclaration: DeclarationDescriptor, typeDeserializer: TypeDeserializer): DeserializationContextWithTypes {
|
||||
return DeserializationContextWithTypes(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
|
||||
constantLoader, packageFragmentProvider, classDeserializer,
|
||||
nameResolver, flexibleTypeCapabilitiesDeserializer, containingDeclaration, typeDeserializer)
|
||||
constantLoader, packageFragmentProvider, flexibleTypeCapabilitiesDeserializer,
|
||||
classDeserializer, nameResolver, containingDeclaration, typeDeserializer)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -86,16 +91,16 @@ class DeserializationContextWithTypes(
|
||||
annotationLoader: AnnotationLoader,
|
||||
constantLoader: ConstantLoader,
|
||||
packageFragmentProvider: PackageFragmentProvider,
|
||||
flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer,
|
||||
classDeserializer: ClassDeserializer,
|
||||
nameResolver: NameResolver,
|
||||
flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer,
|
||||
val containingDeclaration: DeclarationDescriptor,
|
||||
val typeDeserializer: TypeDeserializer
|
||||
) : DeserializationContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
|
||||
constantLoader, packageFragmentProvider, flexibleTypeCapabilitiesDeserializer, classDeserializer, nameResolver) {
|
||||
val deserializer: MemberDeserializer = MemberDeserializer(this)
|
||||
|
||||
public fun childContext(descriptor: DeclarationDescriptor, typeParameterProtos: List<TypeParameter>): DeserializationContextWithTypes {
|
||||
fun childContext(descriptor: DeclarationDescriptor, typeParameterProtos: List<TypeParameter>): DeserializationContextWithTypes {
|
||||
val childTypeDeserializer = TypeDeserializer(this, typeDeserializer, "Child deserializer for ${descriptor.getName()}")
|
||||
val childContext = withTypes(descriptor, childTypeDeserializer)
|
||||
|
||||
@@ -106,7 +111,3 @@ class DeserializationContextWithTypes(
|
||||
return childContext
|
||||
}
|
||||
}
|
||||
|
||||
fun DeserializationGlobalContext.deserializeClass(classId: ClassId): ClassDescriptor? {
|
||||
return classDeserializer.deserializeClass(classId)
|
||||
}
|
||||
|
||||
+2
-1
@@ -38,6 +38,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
|
||||
import org.jetbrains.jet.descriptors.serialization.ClassData
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.jet.plugin.decompiler.isKotlinWithCompatibleAbiVersion
|
||||
import org.jetbrains.jet.descriptors.serialization.context.deserializeClass
|
||||
|
||||
public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler {
|
||||
val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(classFile)
|
||||
@@ -53,7 +54,7 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
|
||||
|
||||
private fun createDummyModule(name: String) = ModuleDescriptorImpl(Name.special("<$name>"), listOf(), PlatformToKotlinClassMap.EMPTY)
|
||||
|
||||
override fun resolveTopLevelClass(classId: ClassId) = deserializationContext.classDeserializer.deserializeClass(classId)
|
||||
override fun resolveTopLevelClass(classId: ClassId) = deserializationContext.deserializeClass(classId)
|
||||
|
||||
override fun resolveDeclarationsInPackage(packageFqName: FqName): Collection<DeclarationDescriptor> {
|
||||
assert(packageFqName == directoryPackageFqName, "Was called for $packageFqName but only $directoryPackageFqName is expected.")
|
||||
|
||||
Reference in New Issue
Block a user