From b44bc620e077a11c631e7fbe61657d0ca9752e9a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 9 Jul 2013 16:00:07 +0400 Subject: [PATCH] Implement getNamespace() for deserialized scope DescriptorFinder now can find packages, pull the method up from AbstractDescriptorFinder class --- .../resolver/DeserializedDescriptorResolver.java | 6 ++++++ .../serialization/AbstractDescriptorFinder.java | 7 +------ .../descriptors/serialization/DescriptorFinder.java | 12 +++++++++++- .../descriptors/DeserializedPackageMemberScope.java | 6 ++++++ .../types/lang/BuiltinsNamespaceDescriptorImpl.java | 10 ++++------ .../AbstractDescriptorSerializationTest.java | 13 ++++++++++--- .../serialization/BuiltinsDeserializationTest.java | 13 +++++-------- .../serialization/KotlinInfoForClassTest.java | 2 +- 8 files changed, 44 insertions(+), 25 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DeserializedDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DeserializedDescriptorResolver.java index 8e7b4115a34..1379985b82f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DeserializedDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DeserializedDescriptorResolver.java @@ -66,6 +66,12 @@ public final class DeserializedDescriptorResolver { public ClassDescriptor findClass(@NotNull ClassId classId) { return javaClassResolver.resolveClass(kotlinFqNameToJavaFqName(classId.asSingleFqName())); } + + @Nullable + @Override + public NamespaceDescriptor findPackage(@NotNull FqName name) { + return javaNamespaceResolver.resolveNamespace(name); + } }; @Inject 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 666692db77a..4aaa0f323f5 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 @@ -23,10 +23,8 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeseria import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullable; import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager; -import org.jetbrains.jet.lang.resolve.name.FqName; import static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG; @@ -52,7 +50,7 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder { ProtoBuf.Class classProto = classData.getClassProto(); DeclarationDescriptor owner = - classId.isTopLevelClass() ? getPackage(classId.getPackageFqName()) : findClass(classId.getOuterClassId()); + classId.isTopLevelClass() ? findPackage(classId.getPackageFqName()) : findClass(classId.getOuterClassId()); assert owner != null : "No owner found for " + classId; AbstractDescriptorFinder _this = AbstractDescriptorFinder.this; @@ -74,8 +72,5 @@ public abstract class AbstractDescriptorFinder implements DescriptorFinder { @Nullable protected abstract ClassData getClassData(@NotNull ClassId classId); - @NotNull - protected abstract NamespaceDescriptor getPackage(@NotNull FqName fqName); - protected abstract void classDescriptorCreated(@NotNull ClassDescriptor 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 068a90ffd0e..72aaf505113 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,17 +19,27 @@ 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.NamespaceDescriptor; +import org.jetbrains.jet.lang.resolve.name.FqName; public interface DescriptorFinder { - DescriptorFinder EMPTY = new DescriptorFinder() { @Nullable @Override public ClassDescriptor findClass(@NotNull ClassId classId) { return null; } + + @Nullable + @Override + public NamespaceDescriptor findPackage(@NotNull FqName name) { + return null; + } }; @Nullable ClassDescriptor findClass(@NotNull ClassId classId); + + @Nullable + NamespaceDescriptor findPackage(@NotNull FqName name); } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java index 520d46168de..462204ff2b3 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java @@ -116,4 +116,10 @@ public abstract class DeserializedPackageMemberScope extends DeserializedMemberS protected void addNonDeclaredDescriptors(@NotNull Collection result) { // Do nothing } + + @Nullable + @Override + public NamespaceDescriptor getNamespace(@NotNull Name name) { + return descriptorFinder.findPackage(packageFqName.child(name)); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java index f8274b4846f..cc7aa23da4c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java @@ -35,8 +35,7 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { super(containingDeclaration, Collections.emptyList(), KotlinBuiltIns.BUILT_INS_PACKAGE_NAME); try { - nameResolver = - NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this))); + nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(this))); DescriptorFinder descriptorFinder = new AbstractDescriptorFinder(storageManager, AnnotationDeserializer.UNSUPPORTED) { @@ -66,11 +65,10 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { } } - @NotNull + @Nullable @Override - protected NamespaceDescriptor getPackage(@NotNull FqName fqName) { - assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Wrong package: " + fqName; - return BuiltinsNamespaceDescriptorImpl.this; + public NamespaceDescriptor findPackage(@NotNull FqName fqName) { + return fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) ? BuiltinsNamespaceDescriptorImpl.this : null; } @Override diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java index 5f8398843fa..731d7367dd7 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java @@ -327,6 +327,12 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith public ClassDescriptor findClass(@NotNull ClassId classId) { return classes.fun(classId); } + + @Nullable + @Override + public NamespaceDescriptor findPackage(@NotNull FqName name) { + return null; + } } private static class JavaDescriptorFinder implements DescriptorFinder { @@ -345,7 +351,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith if (javaClassDescriptor != null) { return javaClassDescriptor; } - NamespaceDescriptor packageDescriptor = getNamespace(classId.getPackageFqName()); + NamespaceDescriptor packageDescriptor = findPackage(classId.getPackageFqName()); if (packageDescriptor == null) { throw new IllegalStateException("Java package not found: " + classId.getPackageFqName() + " for " + classId); } @@ -368,8 +374,9 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith } @Nullable - private NamespaceDescriptor getNamespace(@NotNull FqName fqName) { - return javaDescriptorResolver.resolveNamespace(fqName); + @Override + public NamespaceDescriptor findPackage(@NotNull FqName name) { + return javaDescriptorResolver.resolveNamespace(name); } } } diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java index f863812413f..3abd34ed447 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/BuiltinsDeserializationTest.java @@ -80,12 +80,10 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment { final NameResolver nameResolver = NameSerializationUtil.createNameResolver(serializer.getNameTable()); - DescriptorFinder descriptorFinder = new AbstractDescriptorFinder(new LockBasedStorageManager(), - AnnotationDeserializer.UNSUPPORTED) { - + DescriptorFinder finder = new AbstractDescriptorFinder(new LockBasedStorageManager(), AnnotationDeserializer.UNSUPPORTED) { @NotNull @Override - protected NamespaceDescriptor getPackage(@NotNull FqName fqName) { + public NamespaceDescriptor findPackage(@NotNull FqName fqName) { assert fqName.equals(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME) : "Unsupported package: " + fqName; return actualNamespace; } @@ -121,10 +119,10 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment { // Make the lazy loader create classes for (ClassId classId : classProtos.keySet()) { - descriptorFinder.findClass(classId); + finder.findClass(classId); } - deserializeCallables(callableProtos, actualNamespace, nameResolver, descriptorFinder); + deserializeCallables(callableProtos, actualNamespace, nameResolver, finder); actualNamespace.getMemberScope().changeLockLevel(WritableScope.LockLevel.READING); return actualNamespace; @@ -166,8 +164,7 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment { NameResolver nameResolver, DescriptorFinder descriptorFinder ) { - DescriptorDeserializer descriptorDeserializer; - descriptorDeserializer = + DescriptorDeserializer descriptorDeserializer = DescriptorDeserializer.create(new LockBasedStorageManager(), actualNamespace, nameResolver, descriptorFinder, AnnotationDeserializer.UNSUPPORTED); for (ProtoBuf.Callable callableProto : callableProtos) { CallableMemberDescriptor callableMemberDescriptor = descriptorDeserializer.loadCallable(callableProto); diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/KotlinInfoForClassTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/KotlinInfoForClassTest.java index cd1942c8843..97cb18b6e91 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/KotlinInfoForClassTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/KotlinInfoForClassTest.java @@ -82,7 +82,7 @@ public class KotlinInfoForClassTest extends CodegenTestCase { @NotNull @Override - protected NamespaceDescriptor getPackage(@NotNull FqName fqName) { + public NamespaceDescriptor findPackage(@NotNull FqName fqName) { assert fqName.equals(NAMESPACE_NAME) : "Unsupported namespace: " + fqName; return namespace; }