Minor, change parameter order, reformat

This commit is contained in:
Alexander Udalov
2014-11-25 18:41:10 +03:00
parent eadf9a13b9
commit fc0f83cbdb
4 changed files with 22 additions and 27 deletions
@@ -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 {
@@ -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
@@ -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)
}
@@ -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.")