Lazy resolve: Proper scope when inferring types of member properties
This commit is contained in:
@@ -76,6 +76,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
|
|
||||||
private JetScope scopeForClassHeaderResolution;
|
private JetScope scopeForClassHeaderResolution;
|
||||||
private JetScope scopeForMemberDeclarationResolution;
|
private JetScope scopeForMemberDeclarationResolution;
|
||||||
|
private JetScope scopeForPropertyInitializerResolution;
|
||||||
|
|
||||||
|
|
||||||
public LazyClassDescriptor(
|
public LazyClassDescriptor(
|
||||||
@@ -140,6 +141,25 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
return scopeForMemberDeclarationResolution;
|
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<ValueParameterDescriptor> parameters = primaryConstructor.getValueParameters();
|
||||||
|
for (ValueParameterDescriptor valueParameterDescriptor : parameters) {
|
||||||
|
scope.addVariableDescriptor(valueParameterDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
|
scopeForPropertyInitializerResolution = scope;
|
||||||
|
}
|
||||||
|
return scopeForPropertyInitializerResolution;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Collection<ConstructorDescriptor> getConstructors() {
|
public Collection<ConstructorDescriptor> getConstructors() {
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected JetScope getScopeForMemberDeclarationResolution(JetDeclaration declaration) {
|
protected JetScope getScopeForMemberDeclarationResolution(JetDeclaration declaration) {
|
||||||
|
if (declaration instanceof JetProperty) {
|
||||||
|
return thisDescriptor.getScopeForPropertyInitializerResolution();
|
||||||
|
}
|
||||||
return thisDescriptor.getScopeForMemberDeclarationResolution();
|
return thisDescriptor.getScopeForMemberDeclarationResolution();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
class CompositeIterator<T>(vararg iterators: java.util.Iterator<T>){
|
||||||
|
val iteratorsIter = iterators.iterator()
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace <root>
|
||||||
|
|
||||||
|
internal final class CompositeIterator</*0*/ T : jet.Any?> : jet.Any {
|
||||||
|
public final /*constructor*/ fun </*0*/ T : jet.Any?><init>(/*0*/ vararg iterators: java.util.Iterator<T> /*jet.Array<java.util.Iterator<T>>*/): CompositeIterator<T>
|
||||||
|
internal final val iteratorsIter: jet.Iterator<java.util.Iterator<T>>
|
||||||
|
}
|
||||||
+6
-9
@@ -15,15 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.jet.lang.resolve.lazy;
|
package org.jetbrains.jet.lang.resolve.lazy;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.test.TestMetadata;
|
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 */
|
/** This class is generated by {@link org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestGenerator}. DO NOT MODIFY MANUALLY */
|
||||||
public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyResolveNamespaceComparingTest {
|
public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyResolveNamespaceComparingTest {
|
||||||
@@ -1275,11 +1272,6 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
|
|||||||
doTest("compiler/testData/lazyResolve/namespaceComparator/genericFunction.kt");
|
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")
|
@TestMetadata("packageLevelObject.kt")
|
||||||
public void testPackageLevelObject() throws Exception {
|
public void testPackageLevelObject() throws Exception {
|
||||||
doTest("compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.kt");
|
doTest("compiler/testData/lazyResolve/namespaceComparator/packageLevelObject.kt");
|
||||||
@@ -1290,6 +1282,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
|
|||||||
doTest("compiler/testData/lazyResolve/namespaceComparator/simpleClass.kt");
|
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() {
|
public static Test suite() {
|
||||||
|
|||||||
Reference in New Issue
Block a user