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 1dc5e2985589..e8b74efd73d0 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -549,8 +549,7 @@ public class DfaMemoryStateImpl implements DfaMemoryState { DfaTypeValue dfaType = (DfaTypeValue)dfaCond.getRightOperand(); final DfaVariableState varState = getVariableState(dfaVar); - varState.setNullable(varState.isNullable() || dfaType.isNullable()); - return !isNotNull(dfaVar) || varState.setInstanceofValue(dfaType); + return isNull(dfaVar) || varState.setInstanceofValue(dfaType); } public boolean applyCondition(DfaValue dfaCond) { diff --git a/java/java-tests/testData/inspection/dataFlow/TryWithResources.java b/java/java-tests/testData/inspection/dataFlow/TryWithResources.java index a04488139ca6..ce172cb267f9 100644 --- a/java/java-tests/testData/inspection/dataFlow/TryWithResources.java +++ b/java/java-tests/testData/inspection/dataFlow/TryWithResources.java @@ -36,7 +36,7 @@ class Test { System.out.println(r); } catch (Exception e) { - if (e instanceof ResourcefulException1) { + if (e instanceof ResourcefulException1) { System.out.println("1"); } else if (e instanceof ResourcefulException2) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java b/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java new file mode 100644 index 000000000000..2f85648a8413 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/NullCheckDoesntAffectUncheckedCast.java @@ -0,0 +1,15 @@ +public class DataFlowBug { + + public int add2(Object left, Object right) { + if (left != null && !(left instanceof String)) { + return ((String) left).length(); + + } + if (!(right instanceof String)) { + return ((String) right).length(); + + } + return 2; + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java index 4b93063ce552..600b822e2780 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -150,6 +150,7 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testTransientFinalField() { doTest(); } public void _testSymmetricUncheckedCast() { doTest(); } + public void testNullCheckDoesntAffectUncheckedCast() { doTest(); } public void testNullableForeachVariable() { setupCustomAnnotations();