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 872f7d6e382f..80a12732dc8e 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 @@ -235,7 +235,10 @@ public class DfaMemoryStateImpl implements DfaMemoryState { setVariableState(var, state.withFacts(facts)); SpecialFieldValue specialFieldValue = facts.get(DfaFactType.SPECIAL_FIELD_VALUE); if (specialFieldValue != null) { - setVarValue((DfaVariableValue)specialFieldValue.getField().createValue(myFactory, var), specialFieldValue.toConstant(myFactory)); + DfaValue targetSpecialField = specialFieldValue.getField().createValue(myFactory, var); + if (targetSpecialField instanceof DfaVariableValue) { + setVarValue((DfaVariableValue)targetSpecialField, specialFieldValue.toConstant(myFactory)); + } } } else if (DfaUtil.isComparedByEquals(value.getType()) && !DfaUtil.isComparedByEquals(var.getType())) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/RewriteFinal.java b/java/java-tests/testData/inspection/dataFlow/fixture/RewriteFinal.java new file mode 100644 index 000000000000..475dd056f194 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/RewriteFinal.java @@ -0,0 +1,7 @@ +final class MyClass { + static final int[] arr = {1,2,3}; + + void test() { + arr = new int[] {4}; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java index c315879a4919..4b8adb337c17 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java @@ -670,4 +670,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase { public void testNotNullAnonymousConstructor() { doTest(); } public void testCaughtNPE() { doTest(); } public void testTernaryNullability() { doTest(); } + public void testRewriteFinal() { doTest(); } }