diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java index a2e77b1ec866..c01dc8e760b1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/java/ControlFlowAnalyzer.java @@ -1076,6 +1076,7 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { addInstruction(new GotoInstruction(endGuardOffset)); ((DeferredOffset)targetOffset).setOffset(getInstructionCount()); guard.accept(this); + generateBoxingUnboxingInstructionFor(guard, PsiTypes.booleanType()); addInstruction(new ResultOfInstruction(new JavaSwitchLabelTakenAnchor(guard))); addInstruction(new ConditionalGotoInstruction(offset, DfTypes.TRUE)); endGuardOffset.setOffset(getInstructionCount()); diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/SwitchBooleanWhen.java b/java/java-tests/testData/inspection/dataFlow/fixture/SwitchBooleanWhen.java new file mode 100644 index 000000000000..0b8e77422913 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/SwitchBooleanWhen.java @@ -0,0 +1,13 @@ +import org.jetbrains.annotations.Nullable; + +// IDEA-363270 +public class SwitchBooleanWhen { + private String testBooleanValue(Object value) { + return switch (value) { + case Boolean booleanValue when booleanValue -> "true"; + case Boolean booleanValue when !booleanValue -> "false"; + case null -> "null"; + default -> "unknown"; + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java index d3d134ea0249..76b7d37beede 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection21Test.java @@ -135,6 +135,8 @@ public class DataFlowInspection21Test extends DataFlowInspectionTestCase { public void testInstanceOfPatternAffectNullity() { doTest(); } public void testNullabilityInEnumSwitch() { doTest(); } + + public void testSwitchBooleanWhen() { doTest(); } public void testJetBrainsNotNullByDefault() { addJetBrainsNotNullByDefault(myFixture);