From f0d7a0d5a6b60248346be5ed71dff7120881f659 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 23 Apr 2012 15:58:21 +0200 Subject: [PATCH] IDEA-85035 Wrong "possible NPE" warning --- .../dataFlow/DfaMemoryStateImpl.java | 10 ------- ...paringToNotNullShouldNotAffectNullity.java | 26 +++++++++++++++++++ .../DataFlowInspectionFixtureTest.java | 1 + 3 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java 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 2a255d292d31..af8ccfdd5b82 100644 --- a/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/dataFlow/DfaMemoryStateImpl.java @@ -595,16 +595,6 @@ public class DfaMemoryStateImpl implements DfaMemoryState { } if (dfaRight instanceof DfaNotNullValue) { - if (dfaLeft instanceof DfaVariableValue) { - DfaVariableState varState = getVariableState((DfaVariableValue)dfaLeft); - DfaVariableValue dfaVar = (DfaVariableValue)dfaLeft; - DfaTypeValue type = myFactory.getTypeFactory().create(((DfaNotNullValue)dfaRight).getType()); - if (isNegated) { - return applyCondition(myFactory.getRelationFactory().create(dfaVar, DfaUnknownValue.getInstance(), JavaTokenType.EQEQ, false)); - } - return applyCondition(compareToNull(dfaVar, false)) && varState.setInstanceofValue(type); - - } return true; } diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java new file mode 100644 index 000000000000..b44b6f862e82 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ComparingToNotNullShouldNotAffectNullity.java @@ -0,0 +1,26 @@ +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +public class Bar3 { + + @NotNull + Object getObj() { + return new Object(); + } + + void foo(Collection collection) { + if (!collection.isEmpty()) { + Object first = collection.iterator().next(); + if (first != getObj() || collection.size() > 0) { + System.out.println(first.hashCode()); + } + if (first == getObj() || collection.size() > 0) { + System.out.println(first.hashCode()); + } + if (first == null) { + System.out.println(first.hashCode()); + } + } + } +} \ 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 77bd8e03e1f0..b8c5012f562e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionFixtureTest.java @@ -61,5 +61,6 @@ public class DataFlowInspectionFixtureTest extends JavaCodeInsightFixtureTestCas public void testGeneratedEquals() throws Throwable { doTest(); } public void testIDEA84489() throws Throwable { doTest(); } + public void testComparingToNotNullShouldNotAffectNullity() throws Throwable { doTest(); } }