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 73b7c8fb4bd7..f85ba17bf7cf 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 @@ -292,6 +292,9 @@ public class DfaMemoryStateImpl implements DfaMemoryState { if (value instanceof DfaVariableValue) { myVariableStates.put(var, getVariableState((DfaVariableValue)value).clone()); } + else if (value instanceof DfaBoxedValue) { + getVariableState(var).setNullable(false); + } } if (getVariableState(var).isNotNull()) { diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/BoxingImpliesNotNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/BoxingImpliesNotNull.java new file mode 100644 index 000000000000..c19581fdbf23 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/BoxingImpliesNotNull.java @@ -0,0 +1,14 @@ +import org.jetbrains.annotations.Nullable; + +class Baz { + Integer bar() { return 2; } + + void g() { + @Nullable Integer foo = bar(); + if (foo == null) { + foo = 0; + } + System.out.println(foo.intValue()); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index 17e36c335553..bbf49761727c 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -278,4 +278,5 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { } public void testContractAnnotation() { doTest(); } + public void testBoxingImpliesNotNull() { doTest(); } }