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