diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index d109570fa7d..e77c9c43acb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -23,7 +23,6 @@ import com.intellij.util.containers.Queue; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.calls.BasicResolutionContext; import org.jetbrains.jet.lang.resolve.calls.CallMaker; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults; @@ -463,7 +462,7 @@ public class BodyResolver { JetScope declaringScope = context.getDeclaringScopes().get(accessor); JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScope( - declaringScope, propertyDescriptor, propertyDescriptor.getTypeParameters(), propertyDescriptor.getReceiverParameter(), trace); + declaringScope, propertyDescriptor.getTypeParameters(), propertyDescriptor.getReceiverParameter(), trace); WritableScope accessorScope = new WritableScopeImpl(propertyDeclarationInnerScope, declaringScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace)).setDebugName("Accessor scope"); accessorScope.changeLockLevel(WritableScope.LockLevel.READING); @@ -508,7 +507,8 @@ public class BodyResolver { private void resolvePropertyInitializer(JetProperty property, PropertyDescriptor propertyDescriptor, JetExpression initializer, JetScope scope) { //JetFlowInformationProvider flowInformationProvider = context.getDescriptorResolver().computeFlowData(property, initializer); // TODO : flow JET-15 JetType expectedTypeForInitializer = property.getPropertyTypeRef() != null ? propertyDescriptor.getType() : NO_EXPECTED_TYPE; - JetType type = expressionTypingServices.getType(descriptorResolver.getPropertyDeclarationInnerScope(scope, propertyDescriptor, propertyDescriptor.getTypeParameters(), propertyDescriptor.getReceiverParameter(), trace), initializer, expectedTypeForInitializer, trace); + JetScope propertyDeclarationInnerScope = descriptorResolver.getPropertyDeclarationInnerScope(scope, propertyDescriptor.getTypeParameters(), ReceiverDescriptor.NO_RECEIVER, trace); + JetType type = expressionTypingServices.getType(propertyDeclarationInnerScope, initializer, expectedTypeForInitializer, trace); // // JetType expectedType = propertyDescriptor.getInType(); // if (expectedType == null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 4cd112a3f44..49720a0841e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -517,9 +517,8 @@ public class DescriptorResolver { return variableDescriptor; } - public JetScope getPropertyDeclarationInnerScope(@NotNull JetScope outerScope, - @NotNull PropertyDescriptor propertyDescriptor, List typeParameters, - ReceiverDescriptor receiver, BindingTrace trace) { + public JetScope getPropertyDeclarationInnerScope(@NotNull JetScope outerScope, @NotNull List typeParameters, + @NotNull ReceiverDescriptor receiver, BindingTrace trace) { WritableScopeImpl result = new WritableScopeImpl(outerScope, outerScope.getContainingDeclaration(), new TraceBasedRedeclarationHandler(trace)).setDebugName("Property declaration inner scope"); for (TypeParameterDescriptor typeParameterDescriptor : typeParameters) { result.addTypeParameterDescriptor(typeParameterDescriptor); @@ -578,7 +577,7 @@ public class DescriptorResolver { ? ReceiverDescriptor.NO_RECEIVER : new ExtensionReceiver(propertyDescriptor, receiverType); - JetScope propertyScope = getPropertyDeclarationInnerScope(scope, propertyDescriptor, typeParameterDescriptors, receiverDescriptor, trace); + JetScope propertyScope = getPropertyDeclarationInnerScope(scope, typeParameterDescriptors, ReceiverDescriptor.NO_RECEIVER, trace); JetType type = getVariableType(propertyScope, property, DataFlowInfo.EMPTY, true, trace); diff --git a/compiler/testData/diagnostics/tests/QualifiedThis.jet b/compiler/testData/diagnostics/tests/QualifiedThis.jet index 94058bbe1fb..80c5ce0b552 100644 --- a/compiler/testData/diagnostics/tests/QualifiedThis.jet +++ b/compiler/testData/diagnostics/tests/QualifiedThis.jet @@ -30,7 +30,7 @@ package closures val x = this@B : B val y = this@A : A val z = this : B - val Int.xx = this : Int + val Int.xx : Int get() = this : Int fun Char.xx() : Any { this : Char val a = {Double.() -> this : Double + this@xx : Char} diff --git a/compiler/testData/diagnostics/tests/scopes/initializerScopeOfExtensionProperty.jet b/compiler/testData/diagnostics/tests/scopes/initializerScopeOfExtensionProperty.jet new file mode 100644 index 00000000000..1f30884832b --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/initializerScopeOfExtensionProperty.jet @@ -0,0 +1,31 @@ +package i + +import java.util.List + +val List.length = size() + +val List.length1 : Int get() = size() + +val String.bd = this + "!" + +val String.bd1 : String get() = this + "!" + + +class A { + val ii : Int = 1 +} + +val A.foo = ii + +val A.foo1 : Int get() = ii + + +class C { + class D {} +} + +val C.foo : C.D = D() + +val C.bar : C.D = C().D() + +val C.foo1 : C.D get() = D() \ No newline at end of file diff --git a/compiler/testData/resolve/Classifiers.jet b/compiler/testData/resolve/Classifiers.jet index bcfd4e6ad8f..a4bdd604e37 100644 --- a/compiler/testData/resolve/Classifiers.jet +++ b/compiler/testData/resolve/Classifiers.jet @@ -5,7 +5,7 @@ package qualified_this { val x = `qtB`this`qtB`@B val y = `qtA`this`qtA`@A val z = `qtB`this - ~xx~val Int.xx = `xx`this : Int + ~xx~val Int.xx get() = `xx`this : Int ~xx()~fun Int.xx() { `xx()`this : Int val a = {Int.() -> `xx()`this`xx()`@xx + this} diff --git a/idea/testData/checker/QualifiedThisInClosures.jet b/idea/testData/checker/QualifiedThisInClosures.jet index 3ad287a5d5c..1c9d4d15b5e 100644 --- a/idea/testData/checker/QualifiedThisInClosures.jet +++ b/idea/testData/checker/QualifiedThisInClosures.jet @@ -4,7 +4,7 @@ val x = this@B : B val y = this@A : A val z = this : B - val Int.xx = this : Int + val Int.xx : Int get() = this : Int fun Char.xx() : Any { this : Char val a = {Double.() -> this : Double + this@xx : Char}