From 26a09a1c53aeeaf31c92e36394db95142e53bd28 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Mon, 3 Feb 2025 20:16:38 +0100 Subject: [PATCH] [java-highlighting] IDEA-366905 'Label is dominated by a preceding case label' error highlighting appears in a case when there is no compilation error GitOrigin-RevId: a6cb61a29153fbd0524b15995427cd2dc285c653 --- .../PatternsInSwitchBlockHighlightingModel.java | 8 -------- .../UnconditionalForSelectTypeAndDominated.java | 2 +- .../SwitchPrimitivePatternDominated.java | 14 ++++++++++++++ .../SwitchPrimitivePatternList.java | 4 ++-- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PatternsInSwitchBlockHighlightingModel.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PatternsInSwitchBlockHighlightingModel.java index 7931b6ae92fa..a89edc8453b8 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PatternsInSwitchBlockHighlightingModel.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/PatternsInSwitchBlockHighlightingModel.java @@ -375,8 +375,6 @@ public class PatternsInSwitchBlockHighlightingModel extends SwitchBlockHighlight @NotNull PsiElement who, @NotNull PsiType selectorType) { boolean isOverWhomUnconditionalForSelector = JavaPsiPatternUtil.isUnconditionalForType(overWhom, selectorType); - boolean isWhoUnconditionalForSelector = who instanceof PsiCaseLabelElement whoCase && - JavaPsiPatternUtil.isUnconditionalForType(whoCase, selectorType); if (!isOverWhomUnconditionalForSelector && ((!(overWhom instanceof PsiExpression expression) || ExpressionUtils.isNullLiteral(expression)) && who instanceof PsiKeyword && @@ -387,12 +385,6 @@ public class PatternsInSwitchBlockHighlightingModel extends SwitchBlockHighlight // A 'case null, default' label dominates all other switch labels. return true; } - if (isWhoUnconditionalForSelector && !isOverWhomUnconditionalForSelector && - !(isInCaseNullDefaultLabel(overWhom) || - (overWhom instanceof PsiKeyword && PsiKeyword.DEFAULT.equals(overWhom.getText())) || - (overWhom instanceof PsiExpression expression && ExpressionUtils.isNullLiteral(expression)))) { - return true; - } if (who instanceof PsiCaseLabelElement currentElement) { if (JavaPsiPatternUtil.isGuarded(currentElement)) return false; if (isConstantLabelElement(overWhom)) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/UnconditionalForSelectTypeAndDominated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/UnconditionalForSelectTypeAndDominated.java index b38c9300171d..29fd8ea27c13 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/UnconditionalForSelectTypeAndDominated.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsInSwitch/UnconditionalForSelectTypeAndDominated.java @@ -8,7 +8,7 @@ public class UnconditionalForSelectTypeAndDominated { private static void testAA(AA aa){ switch (aa) { case AA1 aa1 -> System.out.println(1); - case B aa1 -> System.out.println(1); + case B aa1 -> System.out.println(1); } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternDominated.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternDominated.java index dc3eafdb14af..1caebf10d982 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternDominated.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternDominated.java @@ -1202,4 +1202,18 @@ public class SwitchPrimitivePatternDominated { case boolean b -> System.out.println("2");//error } } + + static void switchInteger(Integer i) { + switch (i) { + case Integer i2 -> System.out.println("int" + i2); + case long l1 -> System.out.println("long" + l1); + } + } + + static void switchDouble(double i) { + switch (i) { + case double i2 -> System.out.println("double" + i2); + case long l1 -> System.out.println("long" + l1); + } + } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternList.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternList.java index 858d5019d875..08d80609b671 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternList.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlightingPatternsWithPrimitives/SwitchPrimitivePatternList.java @@ -172,8 +172,8 @@ public class SwitchPrimitivePatternList { case short d -> System.out.println("1"); case int d -> System.out.println("1"); case long d -> System.out.println("1"); - case float d -> System.out.println("1"); - case double d -> System.out.println("1"); + case float d -> System.out.println("1"); + case double d -> System.out.println("1"); } }