Refactor: DescriptorFinder -> ClassDataFinder

Deserialization subsystem only need to know about the way to obtain class data, it can construct descriptors itself (no need to call DeserializedClassDescriptor constructor from other modules)
This commit is contained in:
Pavel V. Talanov
2014-06-16 15:00:57 +04:00
parent 53337f793b
commit 0c8956a36e
14 changed files with 77 additions and 82 deletions
@@ -26,9 +26,9 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import java.util.Collection;
import java.util.Collections;
public interface DescriptorFinder {
public interface ClassDataFinder {
@Nullable
ClassDescriptor findClass(@NotNull ClassId classId);
ClassData findClassData(@NotNull ClassId classId);
@ReadOnly
@NotNull
@@ -18,12 +18,23 @@ package org.jetbrains.jet.descriptors.serialization
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
import org.jetbrains.jet.storage.StorageManager
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor
import org.jetbrains.jet.descriptors.serialization.context.DeserializationGlobalContext
import kotlin.properties.Delegates
public class ClassDeserializer(val storageManager: StorageManager, val descriptorFinder: DescriptorFinder) {
public class ClassDeserializer(val storageManager: StorageManager, val classDataFinder: ClassDataFinder) {
private val classes = storageManager.createMemoizedFunctionWithNullableValues {
(classId: ClassId) ->
descriptorFinder.findClass(classId)
val classData = classDataFinder.findClassData(classId)
if (classData != null) {
DeserializedClassDescriptor(context, classData)
}
else {
null
}
}
var context: DeserializationGlobalContext by Delegates.notNull()
public fun deserializeClass(classId: ClassId): ClassDescriptor? = classes(classId)
}
@@ -19,7 +19,7 @@ package org.jetbrains.jet.descriptors.serialization.context
import org.jetbrains.jet.storage.StorageManager
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationLoader
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider
import org.jetbrains.jet.descriptors.serialization.DescriptorFinder
import org.jetbrains.jet.descriptors.serialization.ClassDataFinder
import org.jetbrains.jet.descriptors.serialization.NameResolver
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.descriptors.serialization.TypeDeserializer
@@ -36,14 +36,18 @@ import org.jetbrains.jet.descriptors.serialization.ClassDeserializer
public open class DeserializationGlobalContext(
public val storageManager: StorageManager,
public val moduleDescriptor: ModuleDescriptor,
public val descriptorFinder: DescriptorFinder,
public val classDataFinder: ClassDataFinder,
public val annotationLoader: AnnotationLoader,
public val constantLoader: ConstantLoader,
public val packageFragmentProvider: PackageFragmentProvider,
public val classDeserializer: ClassDeserializer = ClassDeserializer(storageManager, descriptorFinder)
public val classDeserializer: ClassDeserializer = ClassDeserializer(storageManager, classDataFinder)
) {
{
classDeserializer.context = this
}
public fun withNameResolver(nameResolver: NameResolver): DeserializationContext {
return DeserializationContext(storageManager, moduleDescriptor, descriptorFinder, annotationLoader,
return DeserializationContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
constantLoader, packageFragmentProvider, classDeserializer, nameResolver)
}
}
@@ -52,13 +56,13 @@ public open class DeserializationGlobalContext(
public open class DeserializationContext(
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
descriptorFinder: DescriptorFinder,
classDataFinder: ClassDataFinder,
annotationLoader: AnnotationLoader,
constantLoader: ConstantLoader,
packageFragmentProvider: PackageFragmentProvider,
classDeserializer: ClassDeserializer,
public val nameResolver: NameResolver
) : DeserializationGlobalContext(storageManager, moduleDescriptor, descriptorFinder, annotationLoader,
) : DeserializationGlobalContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
constantLoader, packageFragmentProvider, classDeserializer) {
fun withTypes(containingDeclaration: DeclarationDescriptor): DeserializationContextWithTypes {
val typeDeserializer = TypeDeserializer(this, null, "Deserializer for ${containingDeclaration.getName()}",
@@ -67,7 +71,7 @@ public open class DeserializationContext(
}
fun withTypes(containingDeclaration: DeclarationDescriptor, typeDeserializer: TypeDeserializer): DeserializationContextWithTypes {
return DeserializationContextWithTypes(storageManager, moduleDescriptor, descriptorFinder, annotationLoader,
return DeserializationContextWithTypes(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
constantLoader, packageFragmentProvider, classDeserializer,
nameResolver, containingDeclaration, typeDeserializer)
}
@@ -78,7 +82,7 @@ public open class DeserializationContext(
class DeserializationContextWithTypes(
storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor,
descriptorFinder: DescriptorFinder,
classDataFinder: ClassDataFinder,
annotationLoader: AnnotationLoader,
constantLoader: ConstantLoader,
packageFragmentProvider: PackageFragmentProvider,
@@ -86,7 +90,7 @@ class DeserializationContextWithTypes(
nameResolver: NameResolver,
val containingDeclaration: DeclarationDescriptor,
val typeDeserializer: TypeDeserializer
) : DeserializationContext(storageManager, moduleDescriptor, descriptorFinder, annotationLoader,
) : DeserializationContext(storageManager, moduleDescriptor, classDataFinder, annotationLoader,
constantLoader, packageFragmentProvider, classDeserializer, nameResolver) {
val deserializer: MemberDeserializer = MemberDeserializer(this)
@@ -64,7 +64,7 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope {
@Override
protected void addAllClassDescriptors(@NotNull Collection<DeclarationDescriptor> result) {
for (Name className : context.getDescriptorFinder().getClassNames(packageFqName)) {
for (Name className : context.getClassDataFinder().getClassNames(packageFqName)) {
ClassDescriptor classDescriptor = getClassDescriptor(className);
if (classDescriptor != null) {