From 1bbe9b0bd45f9037df7c0225cb749fd8a744b361 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 26 Nov 2013 22:07:11 +0400 Subject: [PATCH] Removed DescriptorFinder.findPackage. --- .../AbstractDescriptorFinder.java | 8 ++-- .../serialization/DescriptorFinder.java | 11 ------ .../DeserializedClassDescriptor.java | 20 +++++++--- .../AbstractDescriptorSerializationTest.java | 19 +++------- .../BuiltinsDeserializationTest.java | 9 +---- .../DeserializedDescriptorResolver.java | 8 +--- .../types/lang/BuiltinsPackageFragment.java | 37 +++++++++++++++---- .../jet/lang/types/lang/KotlinBuiltIns.java | 28 +------------- 8 files changed, 59 insertions(+), 81 deletions(-) diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorFinder.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorFinder.java index 854627891e3..aea08b57288 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorFinder.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorFinder.java @@ -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; } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorFinder.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorFinder.java index d4e7b57a517..d56637c306e 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorFinder.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorFinder.java @@ -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 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 getClassNames(@NotNull FqName packageName); } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java index ac192e9be16..125defab044 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java @@ -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 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()))); diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java index 116b6bfb9e4..901ac3c6282 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java @@ -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, ""); - 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 classDataMap; public DescriptorFinderFromClassDataOrJava( @NotNull JavaDescriptorResolver javaDescriptorResolver, - @NotNull PackageFragmentDescriptor packageForClasses, - @NotNull Map classDataMap + @NotNull Map 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 getClassNames(@NotNull FqName packageName) { diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java index ecb4b3c55a4..266d6b28487 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java @@ -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 diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java index e27de9fed33..b370a3cb14d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java @@ -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 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; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java index 5bcb09d44fa..9de59862bf0 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java @@ -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.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 getPackageFragments(@NotNull FqName fqName) { + if (fqName.isRoot()) { + return Collections.singletonList(rootPackage); + } + else if (KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.equals(fqName)) { + return Collections.singletonList(BuiltinsPackageFragment.this); + } + return Collections.emptyList(); + } + + @NotNull + @Override + public Collection 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> classNames; public BuiltInsDescriptorFinder(@NotNull StorageManager storageManager) { - super(storageManager, UNSUPPORTED); + super(storageManager, UNSUPPORTED, packageFragmentProvider); classNames = storageManager.createLazyValue(new Function0>() { @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 getClassNames(@NotNull FqName packageName) { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 3fb5faabcd2..fc54550a863 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -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 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 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() {