Merge DeserializationGlobalContext with DeserializationComponents
This commit is contained in:
+3
-8
@@ -18,15 +18,10 @@ package org.jetbrains.jet.descriptors.serialization
|
||||
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
|
||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor
|
||||
import org.jetbrains.jet.descriptors.serialization.context.DeserializationGlobalContext
|
||||
import kotlin.properties.Delegates
|
||||
import org.jetbrains.jet.lang.resolve.name.ClassId
|
||||
import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents
|
||||
|
||||
public class ClassDeserializer(components: DeserializationComponents) {
|
||||
// This should have been a constructor parameter, but this class and the context depend circularly on each other
|
||||
var globalContext: DeserializationGlobalContext by Delegates.notNull()
|
||||
|
||||
public class ClassDeserializer(private val components: DeserializationComponents) {
|
||||
private val classes: (ClassKey) -> DeserializedClassDescriptor? = components.storageManager.createMemoizedFunctionWithNullableValues {
|
||||
(key: ClassKey) ->
|
||||
val classId = key.classId
|
||||
@@ -35,8 +30,8 @@ public class ClassDeserializer(components: DeserializationComponents) {
|
||||
val outerClassContext =
|
||||
if (classId.isTopLevelClass()) null
|
||||
else classes(ClassKey(classId.getOuterClassId(), null))?.context
|
||||
val context = outerClassContext ?: globalContext
|
||||
DeserializedClassDescriptor(context.withNameResolver(classData.getNameResolver()), classData.getClassProto())
|
||||
// TODO: use outerClassContext
|
||||
DeserializedClassDescriptor(components.createContext(classData.getNameResolver()), classData.getClassProto())
|
||||
}
|
||||
else {
|
||||
null
|
||||
|
||||
+7
-22
@@ -41,46 +41,31 @@ public class DeserializationComponents(
|
||||
public val packageFragmentProvider: PackageFragmentProvider,
|
||||
public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer
|
||||
) {
|
||||
public fun createContext(): DeserializationGlobalContext = DeserializationGlobalContext(this)
|
||||
}
|
||||
public val classDeserializer: ClassDeserializer = ClassDeserializer(this)
|
||||
|
||||
public open class DeserializationGlobalContext(
|
||||
public val components: DeserializationComponents,
|
||||
public val classDeserializer: ClassDeserializer = ClassDeserializer(components)
|
||||
) {
|
||||
{
|
||||
classDeserializer.globalContext = this
|
||||
}
|
||||
public fun deserializeClass(classId: ClassId): ClassDescriptor? = classDeserializer.deserializeClass(classId)
|
||||
|
||||
public fun withNameResolver(nameResolver: NameResolver): DeserializationContext {
|
||||
return DeserializationContext(components, classDeserializer, nameResolver)
|
||||
}
|
||||
}
|
||||
|
||||
fun DeserializationGlobalContext.deserializeClass(classId: ClassId): ClassDescriptor? {
|
||||
return classDeserializer.deserializeClass(classId)
|
||||
public fun createContext(nameResolver: NameResolver): DeserializationContext = DeserializationContext(this, nameResolver)
|
||||
}
|
||||
|
||||
|
||||
public open class DeserializationContext(
|
||||
components: DeserializationComponents,
|
||||
classDeserializer: ClassDeserializer,
|
||||
public val components: DeserializationComponents,
|
||||
public val nameResolver: NameResolver
|
||||
) : DeserializationGlobalContext(components, classDeserializer) {
|
||||
) {
|
||||
fun withTypes(containingDeclaration: DeclarationDescriptor, parent: TypeDeserializer? = null): DeserializationContextWithTypes {
|
||||
val typeDeserializer = TypeDeserializer(this, parent, "Deserializer for ${containingDeclaration.getName()}")
|
||||
return DeserializationContextWithTypes(components, classDeserializer, nameResolver, containingDeclaration, typeDeserializer)
|
||||
return DeserializationContextWithTypes(components, nameResolver, containingDeclaration, typeDeserializer)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class DeserializationContextWithTypes(
|
||||
components: DeserializationComponents,
|
||||
classDeserializer: ClassDeserializer,
|
||||
nameResolver: NameResolver,
|
||||
val containingDeclaration: DeclarationDescriptor,
|
||||
val typeDeserializer: TypeDeserializer
|
||||
) : DeserializationContext(components, classDeserializer, nameResolver) {
|
||||
) : DeserializationContext(components, nameResolver) {
|
||||
val memberDeserializer: MemberDeserializer = MemberDeserializer(this)
|
||||
|
||||
fun childContext(descriptor: DeclarationDescriptor, typeParameterProtos: List<TypeParameter>): DeserializationContextWithTypes {
|
||||
|
||||
+4
-4
@@ -75,7 +75,7 @@ public class DeserializedClassDescriptor(
|
||||
return fragments.single()
|
||||
}
|
||||
else {
|
||||
return context.deserializeClass(classId.getOuterClassId()) ?: ErrorUtils.getErrorModule()
|
||||
return components.deserializeClass(classId.getOuterClassId()) ?: ErrorUtils.getErrorModule()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ public class DeserializedClassDescriptor(
|
||||
return DeserializedClassDescriptor(context, classObjectProto.getData())
|
||||
}
|
||||
|
||||
return context.deserializeClass(classId.createNestedClassId(getClassObjectName(getName())))
|
||||
return components.deserializeClass(classId.createNestedClassId(getClassObjectName(getName())))
|
||||
}
|
||||
|
||||
override fun getClassObjectDescriptor(): ClassDescriptor? = classObjectDescriptor()
|
||||
@@ -254,8 +254,8 @@ public class DeserializedClassDescriptor(
|
||||
|
||||
val findNestedClass = components.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
||||
name ->
|
||||
if (nestedClassNames.contains(name)) {
|
||||
context.deserializeClass(classId.createNestedClassId(name))
|
||||
if (name in nestedClassNames) {
|
||||
components.deserializeClass(classId.createNestedClassId(name))
|
||||
}
|
||||
else null
|
||||
}
|
||||
|
||||
+12
-6
@@ -28,11 +28,17 @@ import org.jetbrains.jet.utils.addIfNotNull
|
||||
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
|
||||
|
||||
|
||||
public fun DeserializedPackageMemberScope(packageDescriptor: PackageFragmentDescriptor,
|
||||
packageData: PackageData,
|
||||
context: DeserializationGlobalContext,
|
||||
classNames: () -> Collection<Name>): DeserializedPackageMemberScope
|
||||
= DeserializedPackageMemberScope(packageDescriptor, packageData.getPackageProto(), context.withNameResolver(packageData.getNameResolver()), classNames)
|
||||
public fun DeserializedPackageMemberScope(
|
||||
packageDescriptor: PackageFragmentDescriptor,
|
||||
packageData: PackageData,
|
||||
components: DeserializationComponents,
|
||||
classNames: () -> Collection<Name>
|
||||
): DeserializedPackageMemberScope = DeserializedPackageMemberScope(
|
||||
packageDescriptor,
|
||||
packageData.getPackageProto(),
|
||||
components.createContext(packageData.getNameResolver()),
|
||||
classNames
|
||||
)
|
||||
|
||||
public open class DeserializedPackageMemberScope(
|
||||
packageDescriptor: PackageFragmentDescriptor,
|
||||
@@ -47,7 +53,7 @@ public open class DeserializedPackageMemberScope(
|
||||
override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean)
|
||||
= computeDescriptors(kindFilter, nameFilter)
|
||||
|
||||
override fun getClassDescriptor(name: Name) = context.deserializeClass(ClassId(packageFqName, name))
|
||||
override fun getClassDescriptor(name: Name) = context.components.deserializeClass(ClassId(packageFqName, name))
|
||||
|
||||
override fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
||||
for (className in classNames()) {
|
||||
|
||||
Reference in New Issue
Block a user