Removed DescriptorFinder.findPackage.
This commit is contained in:
+5
-3
@@ -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;
|
||||
}
|
||||
|
||||
-11
@@ -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);
|
||||
}
|
||||
|
||||
+14
-6
@@ -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())));
|
||||
|
||||
+5
-14
@@ -26,7 +26,6 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment;
|
||||
import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil;
|
||||
@@ -94,7 +93,8 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
||||
|
||||
MutablePackageFragmentDescriptor packageFragment = JetTestUtils.createTestPackageFragment(TEST_PACKAGE_NAME, "<fake>");
|
||||
|
||||
DescriptorFinder descriptorFinder = new DescriptorFinderFromClassDataOrJava(javaDescriptorResolver, packageFragment, classDataMap);
|
||||
DescriptorFinder descriptorFinder = new DescriptorFinderFromClassDataOrJava(
|
||||
javaDescriptorResolver, classDataMap, packageFragment.getContainingDeclaration().getPackageFragmentProvider());
|
||||
|
||||
for (ClassDescriptor classDescriptor : classesAndObjects) {
|
||||
ClassId classId = getClassId(classDescriptor);
|
||||
@@ -161,17 +161,15 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
||||
|
||||
private static class DescriptorFinderFromClassDataOrJava extends AbstractDescriptorFinder {
|
||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||
private final PackageFragmentDescriptor packageForClasses;
|
||||
private final Map<String, ClassData> classDataMap;
|
||||
|
||||
public DescriptorFinderFromClassDataOrJava(
|
||||
@NotNull JavaDescriptorResolver javaDescriptorResolver,
|
||||
@NotNull PackageFragmentDescriptor packageForClasses,
|
||||
@NotNull Map<String, ClassData> classDataMap
|
||||
@NotNull Map<String, ClassData> classDataMap,
|
||||
@NotNull PackageFragmentProvider packageFragmentProvider
|
||||
) {
|
||||
super(new LockBasedStorageManager(), UNSUPPORTED);
|
||||
super(new LockBasedStorageManager(), UNSUPPORTED, packageFragmentProvider);
|
||||
this.javaDescriptorResolver = javaDescriptorResolver;
|
||||
this.packageForClasses = packageForClasses;
|
||||
this.classDataMap = classDataMap;
|
||||
}
|
||||
|
||||
@@ -188,13 +186,6 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
||||
return classDataMap.get(classId.asSingleFqName().asString());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PackageFragmentDescriptor findPackage(@NotNull FqName name) {
|
||||
assert DescriptorUtils.getFQName(packageForClasses).equals(name.toUnsafe()) : name + " : " + packageForClasses;
|
||||
return packageForClasses;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<Name> getClassNames(@NotNull FqName packageName) {
|
||||
|
||||
+2
-7
@@ -79,13 +79,8 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
|
||||
|
||||
final NameResolver nameResolver = NameSerializationUtil.createNameResolver(serializer.getNameTable());
|
||||
|
||||
DescriptorFinder finder = new AbstractDescriptorFinder(new LockBasedStorageManager(), AnnotationDeserializer.UNSUPPORTED) {
|
||||
@NotNull
|
||||
@Override
|
||||
public PackageFragmentDescriptor findPackage(@NotNull FqName fqName) {
|
||||
assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Unsupported package: " + fqName;
|
||||
return actualPackage;
|
||||
}
|
||||
DescriptorFinder finder = new AbstractDescriptorFinder(new LockBasedStorageManager(), AnnotationDeserializer.UNSUPPORTED,
|
||||
actualPackage.getContainingDeclaration().getPackageFragmentProvider()) {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
|
||||
+1
-7
@@ -61,12 +61,6 @@ public final class DeserializedDescriptorResolver {
|
||||
return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName()), INCLUDE_KOTLIN_SOURCES);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PackageFragmentDescriptor findPackage(@NotNull FqName name) {
|
||||
return javaPackageFragmentProvider.getOrCreatePackage(name);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<Name> getClassNames(@NotNull FqName packageName) {
|
||||
@@ -100,7 +94,7 @@ public final class DeserializedDescriptorResolver {
|
||||
if (data != null) {
|
||||
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
|
||||
return new DeserializedClassDescriptor(storageManager, annotationDeserializer, javaDescriptorFinder,
|
||||
classData.getNameResolver(), classData.getClassProto());
|
||||
javaPackageFragmentProvider, classData.getNameResolver(), classData.getClassProto());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+30
-7
@@ -8,6 +8,7 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPacka
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
@@ -29,12 +30,15 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
|
||||
private final DeserializedPackageMemberScope members;
|
||||
private final NameResolver nameResolver;
|
||||
private final ModuleDescriptor module;
|
||||
final PackageFragmentProvider packageFragmentProvider;
|
||||
|
||||
public BuiltinsPackageFragment(@NotNull StorageManager storageManager, @NotNull ModuleDescriptor module) {
|
||||
super(Collections.<AnnotationDescriptor>emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME);
|
||||
this.module = module;
|
||||
nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this)));
|
||||
|
||||
packageFragmentProvider = new BuiltinsPackageFragmentProvider();
|
||||
|
||||
members = new DeserializedPackageMemberScope(storageManager, this, UNSUPPORTED, new BuiltInsDescriptorFinder(storageManager),
|
||||
loadPackage(), nameResolver);
|
||||
}
|
||||
@@ -94,11 +98,36 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
|
||||
return KotlinBuiltIns.class.getClassLoader().getResourceAsStream(path);
|
||||
}
|
||||
|
||||
private class BuiltinsPackageFragmentProvider implements PackageFragmentProvider {
|
||||
private final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(module, FqName.ROOT);
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<PackageFragmentDescriptor> getPackageFragments(@NotNull FqName fqName) {
|
||||
if (fqName.isRoot()) {
|
||||
return Collections.singletonList(rootPackage);
|
||||
}
|
||||
else if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName)) {
|
||||
return Collections.<PackageFragmentDescriptor>singletonList(BuiltinsPackageFragment.this);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<FqName> getSubPackagesOf(@NotNull FqName fqName) {
|
||||
if (fqName.isRoot()) {
|
||||
return Collections.singleton(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
private class BuiltInsDescriptorFinder extends AbstractDescriptorFinder {
|
||||
private final NotNullLazyValue<Collection<Name>> classNames;
|
||||
|
||||
public BuiltInsDescriptorFinder(@NotNull StorageManager storageManager) {
|
||||
super(storageManager, UNSUPPORTED);
|
||||
super(storageManager, UNSUPPORTED, packageFragmentProvider);
|
||||
|
||||
classNames = storageManager.createLazyValue(new Function0<Collection<Name>>() {
|
||||
@Override
|
||||
@@ -153,12 +182,6 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PackageFragmentDescriptor findPackage(@NotNull FqName fqName) {
|
||||
return fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? BuiltinsPackageFragment.this : null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<Name> getClassNames(@NotNull FqName packageName) {
|
||||
|
||||
@@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.ImportPath;
|
||||
@@ -157,31 +156,8 @@ public class KotlinBuiltIns {
|
||||
}
|
||||
|
||||
private static void loadBuiltIns(@NotNull ModuleDescriptorImpl module) throws IOException {
|
||||
final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(module, FqName.ROOT);
|
||||
final PackageFragmentDescriptor builtinsPackage = new BuiltinsPackageFragment(new LockBasedStorageManager(), module);
|
||||
|
||||
module.addFragmentProvider(new PackageFragmentProvider() {
|
||||
@NotNull
|
||||
@Override
|
||||
public List<PackageFragmentDescriptor> getPackageFragments(@NotNull FqName fqName) {
|
||||
if (fqName.isRoot()) {
|
||||
return Collections.singletonList(rootPackage);
|
||||
}
|
||||
else if (BUILT_INS_PACKAGE_FQ_NAME.equals(fqName)) {
|
||||
return Collections.singletonList(builtinsPackage);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<FqName> getSubPackagesOf(@NotNull FqName fqName) {
|
||||
if (fqName.isRoot()) {
|
||||
return Collections.singleton(BUILT_INS_PACKAGE_FQ_NAME);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
});
|
||||
BuiltinsPackageFragment builtinsPackageFragment = new BuiltinsPackageFragment(new LockBasedStorageManager(), module);
|
||||
module.addFragmentProvider(builtinsPackageFragment.packageFragmentProvider);
|
||||
}
|
||||
|
||||
private void doInitialize() {
|
||||
|
||||
Reference in New Issue
Block a user