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 1102b1348b13..58e8414cbe0e 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 @@ -1305,6 +1305,9 @@ public class DfaMemoryStateImpl implements DfaMemoryState { } void doFlush(@NotNull DfaVariableValue varPlain, boolean markUnknown) { + if(isNull(varPlain)) { + myStack.replaceAll(val -> val == varPlain ? myFactory.getConstFactory().getNull() : val); + } DfaVariableValue varNegated = varPlain.getNegatedValue(); removeEquivalenceRelations(varPlain); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/UnknownOnStack.java b/java/java-tests/testData/inspection/dataFlow/fixture/UnknownOnStack.java new file mode 100644 index 000000000000..cf13344c5bea --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/UnknownOnStack.java @@ -0,0 +1,13 @@ +import java.util.*; +import java.util.concurrent.atomic.*; + +// IDEA-183217 +class Test { + private AtomicLong timeStamp; + + private void method() { + if (timeStamp == null) { + timeStamp.set(Calendar.getInstance().getTimeInMillis()); // not reported + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java index 28390c1ae223..be8fddcf4bab 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java @@ -218,4 +218,5 @@ public class DataFlowInspection8Test extends DataFlowInspectionTestCase { } public void testPrimitiveGetters() { doTest(); } + public void testUnknownOnStack() { doTest(); } } \ No newline at end of file