diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 635ab87ea5f4..9e51cfb6a91d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -943,12 +943,16 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { if (values != null) { for (PsiExpression caseValue : values.getExpressions()) { + boolean enumConstant = false; if (enumValues != null && caseValue instanceof PsiReferenceExpression) { - //noinspection SuspiciousMethodCalls - enumValues.remove(((PsiReferenceExpression)caseValue).resolve()); + PsiEnumConstant target = ObjectUtils.tryCast(((PsiReferenceExpression)caseValue).resolve(), PsiEnumConstant.class); + if (target != null) { + enumValues.remove(target); + enumConstant = true; + } } - if (caseValue != null && expressionValue != null) { + if (caseValue != null && expressionValue != null && (enumConstant || PsiUtil.isConstantExpression(caseValue))) { addInstruction(new PushInstruction(expressionValue, null)); caseValue.accept(this); addInstruction(new BinopInstruction( diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SwitchLabelNull.java b/java/java-tests/testData/inspection/dataFlow/fixture/SwitchLabelNull.java new file mode 100644 index 000000000000..37ce968b516e --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/SwitchLabelNull.java @@ -0,0 +1,10 @@ +import org.jetbrains.annotations.*; + +class Test { + void test(int x) { + Integer y = null; + switch (x) { + case y: + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java index 4a21448cbc4f..65e03c07b288 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspectionTest.java @@ -668,4 +668,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase { public void testNullabilityAfterCastAndInstanceOf() { doTest(); } public void testInstanceOfTernary() { doTest(); } public void testStringContains() { doTest(); } + public void testSwitchLabelNull() { doTest(); } }