diff --git a/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowAnalyzer.java b/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowAnalyzer.java index 915cdbe1d272..a7b7e290b42c 100644 --- a/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowAnalyzer.java +++ b/java/java-psi-impl/src/com/intellij/psi/controlFlow/ControlFlowAnalyzer.java @@ -1270,10 +1270,11 @@ class ControlFlowAnalyzer extends JavaElementVisitor { PsiExpression lExpr = PsiUtil.skipParenthesizedExprDown(expression.getLExpression()); if (lExpr instanceof PsiReferenceExpression) { final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)lExpr; - if (!referenceExpression.isQualified() - || referenceExpression.getQualifierExpression() instanceof PsiThisExpression) { - - PsiVariable variable = getUsedVariable(referenceExpression); + PsiExpression qualifierExpression = referenceExpression.getQualifierExpression(); + PsiVariable variable = getUsedVariable(referenceExpression); + if (qualifierExpression == null || + qualifierExpression instanceof PsiThisExpression || + variable instanceof PsiField && variable.hasModifierProperty(PsiModifier.STATIC)) { if (variable != null) { if (myAssignmentTargetsAreElements) startElement(lExpr); @@ -1285,7 +1286,6 @@ class ControlFlowAnalyzer extends JavaElementVisitor { if (myAssignmentTargetsAreElements) finishElement(lExpr); } - } else { lExpr.accept(this); //? diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/expected.xml b/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/expected.xml new file mode 100644 index 000000000000..580a889dbfd6 --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/expected.xml @@ -0,0 +1,3 @@ + + + diff --git a/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/src/Test.java b/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/src/Test.java new file mode 100644 index 000000000000..09fa1567b75a --- /dev/null +++ b/java/java-tests/testData/inspection/fieldCanBeLocal/staticQualifiedFieldAccessForWriting/src/Test.java @@ -0,0 +1,7 @@ +class G{ + private static boolean foo = true; + static void bar(){ + if(foo) + G.foo = false; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java index e6c17b9143f2..db303c699ddc 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/FieldCanBeLocalTest.java @@ -38,6 +38,7 @@ public class FieldCanBeLocalTest extends InspectionTestCase { public void testFieldUsedInConstantInitialization() throws Exception {doTest();} public void testFieldWithImmutableType() throws Exception {doTest();} public void testFieldUsedForWritingInLambda() throws Exception {doTest();} + public void testStaticQualifiedFieldAccessForWriting() throws Exception {doTest();} public void testIgnoreAnnotated() throws Exception { final FieldCanBeLocalInspection inspection = new FieldCanBeLocalInspection(); doTestConfigured(inspection);