diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaExpressionFactory.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaExpressionFactory.java index 5ce447376c36..8dc98e00b417 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaExpressionFactory.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaExpressionFactory.java @@ -120,7 +120,12 @@ public class DfaExpressionFactory { } DfaValue qualifier = getQualifierOrThisValue(refExpr); - return var.createValue(myFactory, qualifier, true); + DfaValue result = var.createValue(myFactory, qualifier, true); + if (var instanceof SpecialField) { + PsiType wantedType = refExpr.getType(); + result = DfaUtil.boxUnbox(result, wantedType); + } + return result; } /** diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/OptionalIntSwitch.java b/java/java-tests/testData/inspection/dataFlow/fixture/OptionalIntSwitch.java new file mode 100644 index 000000000000..5263993b4d62 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/OptionalIntSwitch.java @@ -0,0 +1,21 @@ +import java.util.OptionalInt; +import java.util.Random; + +class OptionalIntSwitch { + // IDEA-240631 + public static void main(String[] args) { + OptionalInt opt = OptionalInt.of(new Random().nextInt() % 2); + + switch (opt.getAsInt()) { + case 0: + System.out.println("zero"); + break; + case 1: + System.out.println("one"); + break; + case 2: + System.out.println("two"); + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java index 4f4e266e6136..8b96e8a84b8d 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/DataFlowInspection8Test.java @@ -42,6 +42,7 @@ public class DataFlowInspection8Test extends DataFlowInspectionTestCase { public void testOptionalOfNullable() { doTest(); } public void testPrimitiveOptional() { doTest(); } public void testOptionalOrElse() { doTest(); } + public void testOptionalIntSwitch() { doTest(); } public void testOptionalIsPresent() { myFixture.addClass("package org.junit;" + "public class Assert {" +