Chain scope for merging in lazy package descriptor
This commit is contained in:
+6
-7
@@ -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.<AnnotationDescriptor>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
|
||||
|
||||
@@ -118,7 +118,7 @@ public class ChainedScope implements JetScope {
|
||||
@NotNull
|
||||
@Override
|
||||
public ReceiverDescriptor getImplicitReceiver() {
|
||||
throw new UnsupportedOperationException(); // TODO
|
||||
return ReceiverDescriptor.NO_RECEIVER;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package test
|
||||
|
||||
object SomeObject {
|
||||
fun test(a: Int) : Int {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace test
|
||||
|
||||
internal final object test.SomeObject : jet.Any {
|
||||
internal final /*constructor*/ fun <init>(): test.SomeObject
|
||||
internal final fun test(/*0*/ a: jet.Int): jet.Int
|
||||
}
|
||||
internal final val SomeObject: test.SomeObject
|
||||
@@ -1,3 +1,6 @@
|
||||
namespace test
|
||||
|
||||
internal final object test.Bar : jet.Any {
|
||||
internal final /*constructor*/ fun <init>(): test.Bar
|
||||
}
|
||||
internal final val Bar: test.Bar
|
||||
|
||||
+9
-5
@@ -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");
|
||||
|
||||
@@ -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<Name> classifierNames = new HashSet<Name>();
|
||||
Set<Name> propertyNames = new HashSet<Name>();
|
||||
Set<Name> functionNames = new HashSet<Name>();
|
||||
Set<Name> classifierNames = Sets.newHashSet();
|
||||
Set<Name> propertyNames = Sets.newHashSet();
|
||||
Set<Name> functionNames = Sets.newHashSet();
|
||||
Set<Name> 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<VariableDescriptor> pa = nsa.getMemberScope().getProperties(name);
|
||||
Collection<VariableDescriptor> 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) {
|
||||
|
||||
Reference in New Issue
Block a user