From 0faea1ed0b818068c07791695ac55f0966dae926 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 8 Aug 2012 15:22:27 +0400 Subject: [PATCH] Chain scope for merging in lazy package descriptor --- .../resolve/lazy/LazyPackageDescriptor.java | 13 +++++----- .../jet/lang/resolve/scopes/ChainedScope.java | 2 +- .../namespaceComparator/objectMembers.kt | 7 +++++ .../namespaceComparator/objectMembers.txt | 7 +++++ .../packageLevelObject.txt | 3 +++ ...esolveNamespaceComparingTestGenerated.java | 14 ++++++---- .../jet/test/util/NamespaceComparator.java | 26 ++++++++++++++++--- 7 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt create mode 100644 compiler/testData/lazyResolve/namespaceComparator/objectMembers.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageDescriptor.java index af7f58d4c92..d8e44f28cd4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyPackageDescriptor.java @@ -24,10 +24,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; +import org.jetbrains.jet.lang.resolve.scopes.*; import java.util.Collections; @@ -44,12 +41,14 @@ public class LazyPackageDescriptor extends AbstractNamespaceDescriptorImpl imple @NotNull PackageMemberDeclarationProvider declarationProvider ) { super(containingDeclaration, Collections.emptyList(), name); + WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Package scope"); resolveSession.getModuleConfiguration().extendNamespaceScope(resolveSession.getTrace(), this, scope); - LazyPackageMemberScope lazyPackageMemberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this); - scope.importScope(lazyPackageMemberScope); scope.changeLockLevel(WritableScope.LockLevel.READING); - this.memberScope = scope; + + LazyPackageMemberScope lazyPackageMemberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this); + + this.memberScope = new ChainedScope(containingDeclaration, lazyPackageMemberScope, scope); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java index b34b69fb10b..5881ce61ec9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java @@ -118,7 +118,7 @@ public class ChainedScope implements JetScope { @NotNull @Override public ReceiverDescriptor getImplicitReceiver() { - throw new UnsupportedOperationException(); // TODO + return ReceiverDescriptor.NO_RECEIVER; } @Override diff --git a/compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt b/compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt new file mode 100644 index 00000000000..a05a78d2382 --- /dev/null +++ b/compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt @@ -0,0 +1,7 @@ +package test + +object SomeObject { + fun test(a: Int) : Int { + return 0 + } +} \ No newline at end of file diff --git a/compiler/testData/lazyResolve/namespaceComparator/objectMembers.txt b/compiler/testData/lazyResolve/namespaceComparator/objectMembers.txt new file mode 100644 index 00000000000..b40fc620291 --- /dev/null +++ b/compiler/testData/lazyResolve/namespaceComparator/objectMembers.txt @@ -0,0 +1,7 @@ +namespace test + +internal final object test.SomeObject : jet.Any { + internal final /*constructor*/ fun (): test.SomeObject + internal final fun test(/*0*/ a: jet.Int): jet.Int +} +internal final val SomeObject: test.SomeObject diff --git a/compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.txt b/compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.txt index bff1bb4b0d3..afc53292714 100644 --- a/compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.txt +++ b/compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.txt @@ -1,3 +1,6 @@ namespace test +internal final object test.Bar : jet.Any { + internal final /*constructor*/ fun (): test.Bar +} internal final val Bar: test.Bar diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java index 9be5d5928fd..92732d8f83f 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -15,15 +15,12 @@ */ package org.jetbrains.jet.lang.resolve.lazy; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest; +import java.io.File; /** This class is generated by {@link org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest}. DO NOT MODIFY MANUALLY */ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyResolveNamespaceComparingTest { @@ -1272,7 +1269,9 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso @TestMetadata("compiler/testData/lazyResolve/namespaceComparator") public static class NamespaceComparator extends AbstractLazyResolveNamespaceComparingTest { public void testAllFilesPresentInNamespaceComparator() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest", new File("compiler/testData/lazyResolve/namespaceComparator"), "kt", false); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), + "org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparingTest", + new File("compiler/testData/lazyResolve/namespaceComparator"), "kt", false); } @TestMetadata("enum.kt") @@ -1295,6 +1294,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/innerObject.kt"); } + @TestMetadata("objectMembers.kt") + public void testObjectMembers() throws Exception { + doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/objectMembers.kt"); + } + @TestMetadata("OverrideWithErrors.kt") public void testOverrideWithErrors() throws Exception { doTestSinglePackage("compiler/testData/lazyResolve/namespaceComparator/OverrideWithErrors.kt"); diff --git a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java index 6f4c235c41d..df905e87823 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/NamespaceComparator.java @@ -20,6 +20,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.PropertyCodegen; @@ -125,9 +126,10 @@ public class NamespaceComparator { //deferred.assertTrue("namespace " + nsa.getName() + " is empty", !nsa.getMemberScope().getAllDescriptors().isEmpty()); - Set classifierNames = new HashSet(); - Set propertyNames = new HashSet(); - Set functionNames = new HashSet(); + Set classifierNames = Sets.newHashSet(); + Set propertyNames = Sets.newHashSet(); + Set functionNames = Sets.newHashSet(); + Set objectNames = Sets.newHashSet(); for (DeclarationDescriptor ad : nsa.getMemberScope().getAllDescriptors()) { if (ad instanceof ClassifierDescriptor) { @@ -162,6 +164,10 @@ public class NamespaceComparator { } } + for (ClassDescriptor objectDescriptor : nsa.getMemberScope().getObjectDescriptors()) { + objectNames.add(objectDescriptor.getName()); + } + for (Name name : sorted(classifierNames)) { ClassifierDescriptor ca = nsa.getMemberScope().getClassifier(name); ClassifierDescriptor cb = nsb.getMemberScope().getClassifier(name); @@ -170,6 +176,14 @@ public class NamespaceComparator { compareClassifiers(ca, cb, sb); } + for (Name name : sorted(objectNames)) { + ClassifierDescriptor ca = nsa.getMemberScope().getObjectDescriptor(name); + ClassifierDescriptor cb = nsb.getMemberScope().getObjectDescriptor(name); + deferred.assertTrue("Object not found in " + nsa + ": " + name, ca != null); + deferred.assertTrue("Object not found in " + nsb + ": " + name, cb != null); + compareClassifiers(ca, cb, sb); + } + for (Name name : sorted(propertyNames)) { Collection pa = nsa.getMemberScope().getProperties(name); Collection pb = nsb.getMemberScope().getProperties(name); @@ -729,6 +743,12 @@ public class NamespaceComparator { memberStrings.add(memberSb.toString()); } + //for (DeclarationDescriptor object : memberScope.getObjectDescriptors()) { + // StringBuilder objectSb = new StringBuilder(); + // new FullContentSerialier(objectSb).serialize(object); + // memberStrings.add(objectSb.toString()); + //} + Collections.sort(memberStrings, new MemberComparator()); for (String memberString : memberStrings) {