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:
+2
-2
@@ -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
|
||||
+13
-2
@@ -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)
|
||||
}
|
||||
+13
-9
@@ -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)
|
||||
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user