diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index f85ba17bf7cf..6f466384c8ae 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -549,7 +549,7 @@ public class DfaMemoryStateImpl implements DfaMemoryState { public DfaConstValue getConstantValue(DfaVariableValue value) { DfaConstValue result = null; for (DfaValue equal : getEqClassesFor(value)) { - if (equal == value) continue; + if (equal instanceof DfaVariableValue) continue; DfaConstValue constValue = asConstantValue(equal); if (constValue == null) return null; result = constValue; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ReportConstantReferencesAfterFinalFieldAccess.java b/java/java-tests/testData/inspection/dataFlow/fixture/ReportConstantReferencesAfterFinalFieldAccess.java new file mode 100644 index 000000000000..9957eb710fa6 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ReportConstantReferencesAfterFinalFieldAccess.java @@ -0,0 +1,18 @@ +public class Foo { + private final boolean field = hashCode() == 2; + + public void main(boolean b) { + if (!b) { + System.out.println(b); + + } + if (field) { + System.out.println(b); + } + if (b) { + System.out.println(b); + } + } + +} + diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index dfa3bcbed316..74cbba71ac53 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -147,12 +147,14 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { } public void testReportConstantReferences() { - doTestReplaceConstantReferences(); + doTestReportConstantReferences(); myFixture.launchAction(myFixture.findSingleIntention("Replace with 'null'")); myFixture.checkResultByFile(getTestName(false) + "_after.java"); } - private void doTestReplaceConstantReferences() { + public void testReportConstantReferencesAfterFinalFieldAccess() { doTestReportConstantReferences(); } + + private void doTestReportConstantReferences() { DataFlowInspection inspection = new DataFlowInspection(); inspection.SUGGEST_NULLABLE_ANNOTATIONS = true; myFixture.enableInspections(inspection); @@ -160,27 +162,27 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { } public void testReportConstantReferences_ReplaceWithString() { - doTestReplaceConstantReferences(); + doTestReportConstantReferences(); myFixture.launchAction(myFixture.findSingleIntention("Replace with 'CONST'")); myFixture.checkResultByFile(getTestName(false) + "_after.java"); } public void testReportConstantReferences_ReplaceWithIntConstant() { - doTestReplaceConstantReferences(); + doTestReportConstantReferences(); myFixture.launchAction(myFixture.findSingleIntention("Replace with 'CONST'")); myFixture.checkResultByFile(getTestName(false) + "_after.java"); } public void testReportConstantReferences_ReplaceWithEnum() { myFixture.addClass("package foo; public enum MyEnum { FOO }"); - doTestReplaceConstantReferences(); + doTestReportConstantReferences(); myFixture.launchAction(myFixture.findSingleIntention("Replace with 'FOO'")); myFixture.checkResultByFile(getTestName(false) + "_after.java"); } public void testReportConstantReferences_NotInComplexAssignment() { myFixture.addClass("package foo; public enum MyEnum { FOO }"); - doTestReplaceConstantReferences(); + doTestReportConstantReferences(); assertEmpty(myFixture.filterAvailableIntentions("Replace with")); } - public void testReportConstantReferences_Switch() { doTestReplaceConstantReferences(); } + public void testReportConstantReferences_Switch() { doTestReportConstantReferences(); } public void testCheckFieldInitializers() { doTest();