diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java index b976ad92508a..0e65a9e144dd 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefFieldImpl.java @@ -60,8 +60,9 @@ public class RefFieldImpl extends RefJavaElementImpl implements RefField { if (forWriting && expressionFrom != null) { PsiClassInitializer initializer = PsiTreeUtil.getParentOfType(expressionFrom, PsiClassInitializer.class); - if (initializer != null) { - if (initializer.getParent() instanceof PsiClass && psiFrom == initializer.getParent() && !expressionFrom.isQualified()) { + if (initializer != null && initializer.getParent() instanceof PsiClass && psiFrom == initializer.getParent()) { + PsiExpression qualifierExpression = expressionFrom.getQualifierExpression(); + if (qualifierExpression == null || qualifierExpression instanceof PsiThisExpression && ((PsiThisExpression)qualifierExpression).getQualifier() == null) { referencedFromClassInitializer = true; } } diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/expected.xml b/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/expected.xml new file mode 100644 index 000000000000..2296325ab375 --- /dev/null +++ b/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/expected.xml @@ -0,0 +1,8 @@ + + + + Test.java + 2 + Declaration can have final modifier + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/src/Test.java b/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/src/Test.java new file mode 100644 index 000000000000..3f6b54d537e8 --- /dev/null +++ b/java/java-tests/testData/inspection/canBeFinal/fieldInitializedInClassInitializer/src/Test.java @@ -0,0 +1,10 @@ +final class G { + private Object foo; + { + this.foo = ""; + } + + void fooBar() { + System.out.println(foo); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java index 859e985f80a4..fc5a56c5c5e7 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/CanBeFinalTest.java @@ -162,4 +162,8 @@ public class CanBeFinalTest extends InspectionTestCase { doTest(); } + + public void testfieldInitializedInClassInitializer() throws Exception { + doTest(); + } }