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 bc2b3ade12a9..1d9469669b6f 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 @@ -585,9 +585,13 @@ public class DfaMemoryStateImpl implements DfaMemoryState { } return applyCondition(compareToNull(dfaVar, false)); } + boolean wasUnknown = getVariableState(dfaVar).getNullability() == Nullness.UNKNOWN; if (applyCondition(compareToNull(dfaVar, true))) { DfaVariableState newState = getVariableState(dfaVar).withInstanceofValue((DfaTypeValue)dfaRight); if (newState != null) { + if (wasUnknown) { + newState = newState.withNullability(Nullness.UNKNOWN); + } setVariableState(dfaVar, newState); return true; } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/DontMakeNullableAfterInstanceof.java b/java/java-tests/testData/inspection/dataFlow/fixture/DontMakeNullableAfterInstanceof.java new file mode 100644 index 000000000000..d5ba0d018572 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/DontMakeNullableAfterInstanceof.java @@ -0,0 +1,11 @@ +class Some { + void foo(Object o) { + if (o instanceof String) { + + } + o.hashCode(); + } + +} + + diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index e9482f500ee7..d1606807fec5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -308,6 +308,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testVariablesDiverge() { doTest(); } public void testDontForgetInstanceofInfoWhenMerging() { doTest(); } + public void testDontMakeNullableAfterInstanceof() { doTest(); } public void _testNullCheckBeforeInstanceof() { doTest(); } // http://youtrack.jetbrains.com/issue/IDEA-113220 }