From 4a9f1b4fee2fee9666c5b0ed365162760a026f07 Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Thu, 1 Aug 2024 10:41:42 +0200 Subject: [PATCH] [java-inspections] IDEA-356945 'insert default branch' suggests uncompilable code GitOrigin-RevId: 44f277da31601775e3ce75021155bf7c37a6311c --- .../PatternsInSwitchBlockHighlightingModel.java | 1 + .../TrueFalsePatterns.java | 10 ++++++++++ .../SwitchStatementsWithPatternsInspectionTest.java | 10 ++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/ig/com/siyeh/igtest/controlflow/switch_statements_with_patterns/TrueFalsePatterns.java 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 a55665e51c81..4cb16ab1216d 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 @@ -951,6 +951,7 @@ public class PatternsInSwitchBlockHighlightingModel extends SwitchBlockHighlight AtomicBoolean reported = new AtomicBoolean(); if (switchModel instanceof PatternsInSwitchBlockHighlightingModel patternsInSwitchModel) { if (findUnconditionalPatternForType(labelElements, switchModel.mySelectorType) != null) return COMPLETE_WITH_UNCONDITIONAL; + if (switchModel.getSwitchSelectorKind() == SelectorKind.BOOLEAN && hasTrueAndFalse(labelElements)) return COMPLETE_WITH_UNCONDITIONAL; if (!needToCheckCompleteness && !isEnumSelector) return INCOMPLETE; //it is necessary, // because deconstruction patterns don't cover cases when some of their components are null and deconstructionPattern too diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/switch_statements_with_patterns/TrueFalsePatterns.java b/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/switch_statements_with_patterns/TrueFalsePatterns.java new file mode 100644 index 000000000000..f14179053d21 --- /dev/null +++ b/java/java-tests/testData/ig/com/siyeh/igtest/controlflow/switch_statements_with_patterns/TrueFalsePatterns.java @@ -0,0 +1,10 @@ +package com.siyeh.igtest.controlflow.switch_statements_without_default; + +class TrueFalsePatterns { + static void foo(Boolean b) { + switch (b) { + case true -> System.out.println("It's true"); + case false -> System.out.println("It's false"); + } + } +} diff --git a/java/java-tests/testSrc/com/siyeh/ig/controlflow/SwitchStatementsWithPatternsInspectionTest.java b/java/java-tests/testSrc/com/siyeh/ig/controlflow/SwitchStatementsWithPatternsInspectionTest.java index dfdd5720f2f7..8a089e661862 100644 --- a/java/java-tests/testSrc/com/siyeh/ig/controlflow/SwitchStatementsWithPatternsInspectionTest.java +++ b/java/java-tests/testSrc/com/siyeh/ig/controlflow/SwitchStatementsWithPatternsInspectionTest.java @@ -24,7 +24,13 @@ public class SwitchStatementsWithPatternsInspectionTest extends LightJavaInspect myInspection.m_ignoreFullyCoveredEnums = false; doTest(); } - + + public void testTrueFalsePatterns() { + String name = getTestName(false); + myFixture.configureByFile(name + ".java"); + myFixture.testHighlighting(true, true, true); + } + @Nullable @Override protected InspectionProfileEntry getInspection() { @@ -33,6 +39,6 @@ public class SwitchStatementsWithPatternsInspectionTest extends LightJavaInspect @Override protected @NotNull LightProjectDescriptor getProjectDescriptor() { - return JAVA_21; + return JAVA_23; } } \ No newline at end of file