diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java index 2e0826cd60e..d6ca72602fc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java @@ -373,7 +373,6 @@ public class JetFlowInformationProvider { private boolean checkBackingField(@NotNull VariableContext cxtx, @NotNull JetElement element) { VariableDescriptor variableDescriptor = cxtx.variableDescriptor; boolean[] error = new boolean[1]; - if (isCorrectBackingFieldReference((JetElement) element.getParent(), cxtx, error, false)) return false; // this expression has been already checked if (!isCorrectBackingFieldReference(element, cxtx, error, true)) return false; if (error[0]) return true; if (!(variableDescriptor instanceof PropertyDescriptor)) { diff --git a/compiler/testData/cfg/backingFieldQualifiedWithThis.instructions b/compiler/testData/cfg/backingFieldQualifiedWithThis.instructions new file mode 100644 index 00000000000..2c9520ad281 --- /dev/null +++ b/compiler/testData/cfg/backingFieldQualifiedWithThis.instructions @@ -0,0 +1,35 @@ +== Bar == +abstract class Bar { + abstract var bar : String + fun foo() = "foo" + this.$bar +} +--------------------- +L0: + + v(abstract var bar : String) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== +== foo == +fun foo() = "foo" + this.$bar +--------------------- +L0: + + mark("foo" + this.$bar) + mark("foo") + r("foo") + mark(this.$bar) + r(this) + r($bar) + call(+, plus) +L1: + NEXT:[] +error: + PREV:[] +sink: + PREV:[, ] +===================== diff --git a/compiler/testData/cfg/backingFieldQualifiedWithThis.kt b/compiler/testData/cfg/backingFieldQualifiedWithThis.kt new file mode 100644 index 00000000000..cb159cb72d0 --- /dev/null +++ b/compiler/testData/cfg/backingFieldQualifiedWithThis.kt @@ -0,0 +1,4 @@ +abstract class Bar { + abstract var bar : String + fun foo() = "foo" + this.$bar +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/backingField/qualifiedWithThis.kt b/compiler/testData/diagnostics/tests/backingField/qualifiedWithThis.kt new file mode 100644 index 00000000000..f989e7358ac --- /dev/null +++ b/compiler/testData/diagnostics/tests/backingField/qualifiedWithThis.kt @@ -0,0 +1,4 @@ +abstract class Bar { + abstract var bar : String + fun foo() = "foo" + this.$bar +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java index 056f84150b9..9770e5227aa 100644 --- a/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/cfg/ControlFlowTestGenerated.java @@ -16,17 +16,14 @@ package org.jetbrains.jet.cfg; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; -import java.util.regex.Pattern; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.cfg.AbstractControlFlowTest; +import java.io.File; +import java.util.regex.Pattern; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @@ -77,6 +74,11 @@ public class ControlFlowTestGenerated extends AbstractControlFlowTest { doTest("compiler/testData/cfg/backingFieldAccess.kt"); } + @TestMetadata("backingFieldQualifiedWithThis.kt") + public void testBackingFieldQualifiedWithThis() throws Exception { + doTest("compiler/testData/cfg/backingFieldQualifiedWithThis.kt"); + } + @TestMetadata("Basic.kt") public void testBasic() throws Exception { doTest("compiler/testData/cfg/Basic.kt"); diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b64bc3e4bea..9445d48dba8 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -653,6 +653,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/backingField/kt782namespaceLevel.kt"); } + @TestMetadata("qualifiedWithThis.kt") + public void testQualifiedWithThis() throws Exception { + doTest("compiler/testData/diagnostics/tests/backingField/qualifiedWithThis.kt"); + } + @TestMetadata("ReadForwardInAnonymous.kt") public void testReadForwardInAnonymous() throws Exception { doTest("compiler/testData/diagnostics/tests/backingField/ReadForwardInAnonymous.kt"); diff --git a/idea/testData/quickfix/variables/changeToPropertyName/afterAbstractPropertyThis.kt b/idea/testData/quickfix/variables/changeToPropertyName/afterAbstractPropertyThis.kt index 238aa68dbf9..6a2ed782cb6 100644 --- a/idea/testData/quickfix/variables/changeToPropertyName/afterAbstractPropertyThis.kt +++ b/idea/testData/quickfix/variables/changeToPropertyName/afterAbstractPropertyThis.kt @@ -1,5 +1,5 @@ // "Change '$bar' to 'bar'" "true" abstract class Bar { abstract var bar : String - fun foo() = "foo" + this.bar + fun foo() = "foo" + this.bar } \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeToPropertyName/beforeAbstractPropertyThis.kt b/idea/testData/quickfix/variables/changeToPropertyName/beforeAbstractPropertyThis.kt index 2c01d3e6258..a8ef24c3e2c 100644 --- a/idea/testData/quickfix/variables/changeToPropertyName/beforeAbstractPropertyThis.kt +++ b/idea/testData/quickfix/variables/changeToPropertyName/beforeAbstractPropertyThis.kt @@ -1,5 +1,5 @@ // "Change '$bar' to 'bar'" "true" abstract class Bar { abstract var bar : String - fun foo() = "foo" + this.$bar + fun foo() = "foo" + this.$bar } \ No newline at end of file