From ed7f52f85b31448a1ead14f3f01a5701dcabcd4f Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 24 Jul 2019 15:00:11 +0700 Subject: [PATCH] IDEA-218805 NullPointerException when find cause quick fix applied GitOrigin-RevId: fcac9cd13e2f714bb6bfb0699e825bc5a190d68a --- .../codeInspection/dataFlow/TrackingRunner.java | 7 ++++--- .../inspection/dataFlow/tracker/EnumCompare.java | 15 +++++++++++++++ .../DataFlowInspectionTrackerTest.java | 1 + 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/tracker/EnumCompare.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/TrackingRunner.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/TrackingRunner.java index f1b27ab63b21..a76d7cd97474 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/TrackingRunner.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/TrackingRunner.java @@ -927,9 +927,10 @@ public class TrackingRunner extends StandardDataFlowRunner { else { continue; } - return Arrays.asList(getFactory().getRelationFactory().createRelation(left, type, right), - getFactory().getRelationFactory() - .createRelation(actualVar, actualRelation.myRelationType, actualRelation.myCounterpart)); + DfaRelationValue.Factory factory = getFactory().getRelationFactory(); + DfaRelationValue rel1 = factory.createRelation(left, type, right); + DfaRelationValue rel2 = factory.createRelation(actualVar, actualRelation.myRelationType, actualRelation.myCounterpart); + return StreamEx.of(rel1, rel2).nonNull().toImmutableList(); } } } diff --git a/java/java-tests/testData/inspection/dataFlow/tracker/EnumCompare.java b/java/java-tests/testData/inspection/dataFlow/tracker/EnumCompare.java new file mode 100644 index 000000000000..fc6b2ce4a946 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/tracker/EnumCompare.java @@ -0,0 +1,15 @@ +/* +Value is always false (code == ReturnStatus.NOT_FOUND; line#8) + It's known that 'code != ReturnStatus.NOT_FOUND' from line #7 (code != ReturnStatus.SUCCESS; line#7) + */ +class SampleClazz { + public void foo(ReturnStatus code) { + if (code != ReturnStatus.SUCCESS) { + } else if (code == ReturnStatus.NOT_FOUND) { + } + } + + enum ReturnStatus { + SUCCESS, NOT_FOUND + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTrackerTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTrackerTest.java index 473f62dd2118..031585432770 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTrackerTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTrackerTest.java @@ -178,4 +178,5 @@ public class DataFlowInspectionTrackerTest extends LightJavaCodeInsightFixtureTe public void testFinalFieldInitialized() { doTest(); } public void testFinalFieldInitializedCtor() { doTest(); } public void testEqualsNull() { doTest(); } + public void testEnumCompare() { doTest(); } }