From 2aa9ed116eae4b0f7bae1be2c823d7afe98cf2fd Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 11 Nov 2021 14:51:06 +0100 Subject: [PATCH] [java] switch expressions: allow null label with any non-primitive type (IDEA-282339) GitOrigin-RevId: d6438daeba88dc37ec34509e331394a87cf1cd8d --- .../impl/analysis/SwitchBlockHighlightingModel.java | 2 +- .../PatternMatchingInSwitch.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/SwitchBlockHighlightingModel.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/SwitchBlockHighlightingModel.java index 1a269e891ee6..66c1cc816312 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/SwitchBlockHighlightingModel.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/SwitchBlockHighlightingModel.java @@ -452,7 +452,7 @@ public class SwitchBlockHighlightingModel { private HighlightInfo checkLabelAndSelectorCompatibility(@NotNull PsiCaseLabelElement label) { if (label instanceof PsiDefaultCaseLabelElement) return null; if (isNullType(label)) { - if (!(mySelectorType instanceof PsiClassType) && !isNullType(mySelector)) { + if (mySelectorType instanceof PsiPrimitiveType && !isNullType(mySelector)) { return createError(label, JavaErrorBundle.message("incompatible.switch.null.type", "null", JavaHighlightUtil.formatType(mySelectorType))); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/PatternMatchingInSwitch.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/PatternMatchingInSwitch.java index 60c163d798f9..0a0ceeeaa7c1 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/PatternMatchingInSwitch.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/PatternMatchingInSwitch.java @@ -183,6 +183,18 @@ class Main { case ((((List l)) && Math.random() > 0.5)): break; } + + switch (list1.get(0)) { + case null: {} + default: {} + } + + switch (new int[0]) { + case null: {} + default: {} + } + + switch (list2) { case List l: break;