diff --git a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java index 6de8c43e0f79..733de352a6aa 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -736,7 +736,8 @@ public class DfaMemoryStateImpl implements DfaMemoryState { } public void flushVariable(@NotNull DfaVariableValue variable) { - if (variable.getPsiVariable().hasModifierProperty(PsiModifier.FINAL)) { + PsiVariable psiVariable = variable.getPsiVariable(); + if (psiVariable instanceof PsiField && psiVariable.hasModifierProperty(PsiModifier.FINAL)) { return; } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java b/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java new file mode 100644 index 000000000000..f60cad9974f8 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/FinalLoopVariableInstanceof.java @@ -0,0 +1,16 @@ +public class Test { + + public static void main(Object[] args) throws Exception { + boolean elvisLives = false; + for (final Object o : args) { + if (o instanceof Integer) { + elvisLives = true; + } else { + if (elvisLives) { + System.err.println("Elvis is alive!"); + } + } + } + } + +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index 57ca43e790bb..0f0f2430cb5e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -75,5 +75,6 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testNotEqualsDoesntImplyNotNullity() throws Throwable { doTest(); } public void testEqualsEnumConstant() throws Throwable { doTest(); } public void testEqualsConstant() throws Throwable { doTest(); } + public void testFinalLoopVariableInstanceof() throws Throwable { doTest(); } }