From 3266c2bdde8bfae5e48660fcbcd1095919885df6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 10 Jul 2012 21:59:01 +0400 Subject: [PATCH] Lazy resolve: Proper scope when inferring types of member properties --- .../resolve/lazy/LazyClassDescriptor.java | 20 +++++++++++++++++++ .../resolve/lazy/LazyClassMemberScope.java | 3 +++ .../namespaceComparator/varargIterator.kt | 3 +++ .../namespaceComparator/varargIterator.txt | 6 ++++++ ...esolveNamespaceComparingTestGenerated.java | 15 ++++++-------- 5 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 compiler/testData/lazyResolve/namespaceComparator/varargIterator.kt create mode 100644 compiler/testData/lazyResolve/namespaceComparator/varargIterator.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 9f3b77aa51b..79a6594d90a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -76,6 +76,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private JetScope scopeForClassHeaderResolution; private JetScope scopeForMemberDeclarationResolution; + private JetScope scopeForPropertyInitializerResolution; public LazyClassDescriptor( @@ -140,6 +141,25 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes return scopeForMemberDeclarationResolution; } + public JetScope getScopeForPropertyInitializerResolution() { + ConstructorDescriptor primaryConstructor = getUnsubstitutedPrimaryConstructor(); + if (primaryConstructor == null) return getScopeForMemberDeclarationResolution(); + + if (scopeForPropertyInitializerResolution == null) { + WritableScopeImpl scope = new WritableScopeImpl( + getScopeForMemberDeclarationResolution(), this, RedeclarationHandler.DO_NOTHING, "Property Initializer Resolution"); + + List parameters = primaryConstructor.getValueParameters(); + for (ValueParameterDescriptor valueParameterDescriptor : parameters) { + scope.addVariableDescriptor(valueParameterDescriptor); + } + + scope.changeLockLevel(WritableScope.LockLevel.READING); + scopeForPropertyInitializerResolution = scope; + } + return scopeForPropertyInitializerResolution; + } + @NotNull @Override public Collection getConstructors() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java index 5a29b9ef577..f4cdae9c477 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java @@ -56,6 +56,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope(vararg iterators: java.util.Iterator){ + val iteratorsIter = iterators.iterator() +} diff --git a/compiler/testData/lazyResolve/namespaceComparator/varargIterator.txt b/compiler/testData/lazyResolve/namespaceComparator/varargIterator.txt new file mode 100644 index 00000000000..6ece491b5ef --- /dev/null +++ b/compiler/testData/lazyResolve/namespaceComparator/varargIterator.txt @@ -0,0 +1,6 @@ +namespace + +internal final class CompositeIterator : jet.Any { + public final /*constructor*/ fun (/*0*/ vararg iterators: java.util.Iterator /*jet.Array>*/): CompositeIterator + internal final val iteratorsIter: jet.Iterator> +} 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 1a85ebd1f9c..f1e83c9b387 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.LazyResolveTestGenerator}. DO NOT MODIFY MANUALLY */ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyResolveNamespaceComparingTest { @@ -1275,11 +1272,6 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTest("compiler/testData/lazyResolve/namespaceComparator/genericFunction.kt"); } - @TestMetadata("iterator.kt") - public void testIterator() throws Exception { - doTest("compiler/testData/lazyResolve/namespaceComparator/iterator.kt"); - } - @TestMetadata("packageLevelObject.kt") public void testPackageLevelObject() throws Exception { doTest("compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.kt"); @@ -1290,6 +1282,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso doTest("compiler/testData/lazyResolve/namespaceComparator/simpleClass.kt"); } + @TestMetadata("varargIterator.kt") + public void testVarargIterator() throws Exception { + doTest("compiler/testData/lazyResolve/namespaceComparator/varargIterator.kt"); + } + } public static Test suite() {