Removed DescriptorFinder.findPackage.

This commit is contained in:
Evgeny Gerashchenko
2013-11-26 22:07:11 +04:00
parent 557aaf363a
commit 1bbe9b0bd4
8 changed files with 59 additions and 81 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider;
import org.jetbrains.jet.storage.MemoizedFunctionToNullable;
import org.jetbrains.jet.storage.StorageManager;
@@ -31,7 +32,8 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder {
public AbstractDescriptorFinder(
@NotNull final StorageManager storageManager,
@NotNull AnnotationDeserializer annotationDeserializer
@NotNull AnnotationDeserializer annotationDeserializer,
@NotNull final PackageFragmentProvider packageFragmentProvider
) {
this.annotationDeserializer = annotationDeserializer;
@@ -45,8 +47,8 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder {
AbstractDescriptorFinder _this = AbstractDescriptorFinder.this;
ClassDescriptor classDescriptor =
new DeserializedClassDescriptor(storageManager, _this.annotationDeserializer, _this, classData.getNameResolver(),
classData.getClassProto());
new DeserializedClassDescriptor(storageManager, _this.annotationDeserializer, _this, packageFragmentProvider,
classData.getNameResolver(), classData.getClassProto());
classDescriptorCreated(classDescriptor);
return classDescriptor;
}
@@ -19,7 +19,6 @@ package org.jetbrains.jet.descriptors.serialization;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name;
@@ -34,13 +33,6 @@ public interface DescriptorFinder {
return null;
}
// TODO 1 remove it, make owner not lazy
@Nullable
@Override
public PackageFragmentDescriptor findPackage(@NotNull FqName name) {
return null;
}
@NotNull
@Override
public Collection<Name> getClassNames(@NotNull FqName packageName) {
@@ -51,9 +43,6 @@ public interface DescriptorFinder {
@Nullable
ClassDescriptor findClass(@NotNull ClassId classId);
@Nullable
PackageFragmentDescriptor findPackage(@NotNull FqName name);
@NotNull
Collection<Name> getClassNames(@NotNull FqName packageName);
}
@@ -72,11 +72,13 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
private final ClassKind kind;
private final boolean isInner;
private final DescriptorFinder descriptorFinder;
private final PackageFragmentProvider packageFragmentProvider;
public DeserializedClassDescriptor(
@NotNull StorageManager storageManager,
@NotNull AnnotationDeserializer annotationResolver,
@NotNull DescriptorFinder descriptorFinder,
@NotNull PackageFragmentProvider packageFragmentProvider,
@NotNull NameResolver nameResolver,
@NotNull ProtoBuf.Class classProto
) {
@@ -84,6 +86,7 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
this.classProto = classProto;
this.classId = nameResolver.getClassId(classProto.getFqName());
this.storageManager = storageManager;
this.packageFragmentProvider = packageFragmentProvider;
this.descriptorFinder = descriptorFinder;
TypeDeserializer notNullTypeDeserializer = new TypeDeserializer(storageManager, null, nameResolver,
@@ -143,10 +146,15 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
@NotNull
private DeclarationDescriptor computeContainingDeclaration() {
ClassOrNamespaceDescriptor result = classId.isTopLevelClass() ?
descriptorFinder.findPackage(classId.getPackageFqName()) :
descriptorFinder.findClass(classId.getOuterClassId());
return result != null ? result : ErrorUtils.getErrorModule();
if (classId.isTopLevelClass()) {
List<PackageFragmentDescriptor> fragments = packageFragmentProvider.getPackageFragments(classId.getPackageFqName());
assert fragments.size() == 1 : "there should be exactly one package: " + fragments;
return fragments.iterator().next();
}
else {
ClassOrNamespaceDescriptor result = descriptorFinder.findClass(classId.getOuterClassId());
return result != null ? result : ErrorUtils.getErrorModule();
}
}
@NotNull
@@ -245,8 +253,8 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme
throw new IllegalStateException("Object should have a serialized class object: " + classId);
}
return new DeserializedClassDescriptor(storageManager, annotationDeserializer, descriptorFinder, deserializer.getNameResolver(),
classObjectProto.getData());
return new DeserializedClassDescriptor(storageManager, annotationDeserializer, descriptorFinder, packageFragmentProvider,
deserializer.getNameResolver(), classObjectProto.getData());
}
return descriptorFinder.findClass(classId.createNestedClassId(getClassObjectName(getName())));