diff --git a/java/java-impl/src/com/intellij/psi/filters/element/ExcludeSillyAssignment.java b/java/java-impl/src/com/intellij/psi/filters/element/ExcludeSillyAssignment.java index a5bb70e4e01b..e999d77684ad 100644 --- a/java/java-impl/src/com/intellij/psi/filters/element/ExcludeSillyAssignment.java +++ b/java/java-impl/src/com/intellij/psi/filters/element/ExcludeSillyAssignment.java @@ -39,7 +39,12 @@ public class ExcludeSillyAssignment implements ElementFilter { final PsiExpression left = ((PsiAssignmentExpression)each).getLExpression(); if (left instanceof PsiReferenceExpression) { final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)left; - if (referenceExpression.isQualified()) return true; + final PsiElement qualifier = referenceExpression.getQualifier(); + if (qualifier != null) { + if (!(qualifier instanceof PsiThisExpression) || ((PsiThisExpression)qualifier).getQualifier() != null) { + return true; + } + } return !referenceExpression.isReferenceTo((PsiElement)element); } diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java b/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java new file mode 100644 index 000000000000..93b10fb8f3f8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/ThisFieldAssignedToItself.java @@ -0,0 +1,8 @@ +class A { + Object field; + + A() { + field = 2; + this.field = fi + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index b9c898483889..bfa4827e4743 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -961,6 +961,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase { public void testWildcardedInstanceof3() throws Throwable { doTest(); } public void testCheckStaticImportsType() throws Throwable { doAntiTest(); } + public void testThisFieldAssignedToItself() throws Throwable { doAntiTest(); } public void testTypeVariableInstanceOf() throws Throwable { configureByTestName();