From fbd8b70ca6253e021c14373e365966eadd6f150e Mon Sep 17 00:00:00 2001 From: Mikhail Pyltsin Date: Tue, 19 Sep 2023 16:20:50 +0200 Subject: [PATCH] [java-inspections] IDEA-332812 Convert to old-style switch: produce incorrect code for null, default GitOrigin-RevId: f0de0aee91d2b41e1ebb6e7a815851cbbf5b8447 --- .../EnhancedSwitchBackwardMigrationInspection.java | 6 +++++- .../afterCaseNullDefault.java | 12 ++++++++++++ .../afterReturnCaseNullDefault.java | 11 +++++++++++ .../beforeCaseNullDefault.java | 9 +++++++++ .../beforeReturnCaseNullDefault.java | 9 +++++++++ 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterCaseNullDefault.java create mode 100644 java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterReturnCaseNullDefault.java create mode 100644 java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeCaseNullDefault.java create mode 100644 java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeReturnCaseNullDefault.java diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/EnhancedSwitchBackwardMigrationInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/EnhancedSwitchBackwardMigrationInspection.java index ed491a010f02..d08299005e95 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/EnhancedSwitchBackwardMigrationInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/EnhancedSwitchBackwardMigrationInspection.java @@ -286,7 +286,11 @@ public final class EnhancedSwitchBackwardMigrationInspection extends AbstractBas } else { PsiCaseLabelElement[] labelElements = labelElementList.getElements(); - caseExpressionsText = StreamEx.of(labelElements).map(e -> "case " + ct.text(e) + ":").joining("\n"); + caseExpressionsText = StreamEx.of(labelElements) + .map(e -> e instanceof PsiDefaultCaseLabelElement ? + (ct.text(e) + ":") : + ("case " + ct.text(e) + ":")) + .joining("\n"); } PsiStatement body = rule.getBody(); String finalBody; diff --git a/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterCaseNullDefault.java b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterCaseNullDefault.java new file mode 100644 index 000000000000..e2f50b74d329 --- /dev/null +++ b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterCaseNullDefault.java @@ -0,0 +1,12 @@ +// "Replace with old style 'switch' statement" "true" + +class CaseNullDefault { + void bar(Object o) { + switch (o) { + case null: + default: + System.out.println("1"); + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterReturnCaseNullDefault.java b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterReturnCaseNullDefault.java new file mode 100644 index 000000000000..062d22f72a3c --- /dev/null +++ b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/afterReturnCaseNullDefault.java @@ -0,0 +1,11 @@ +// "Replace with old style 'switch' statement" "true" + +class ReturnCaseNullDefault { + int bar(Object o) { + switch (o) { + case null: + default: + return 1; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeCaseNullDefault.java b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeCaseNullDefault.java new file mode 100644 index 000000000000..137e16780739 --- /dev/null +++ b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeCaseNullDefault.java @@ -0,0 +1,9 @@ +// "Replace with old style 'switch' statement" "true" + +class CaseNullDefault { + void bar(Object o) { + switch (o) { + case null, default -> System.out.println("1"); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeReturnCaseNullDefault.java b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeReturnCaseNullDefault.java new file mode 100644 index 000000000000..fdea31bd3e66 --- /dev/null +++ b/java/java-tests/testData/inspection/switchExpressionBackwardMigration/beforeReturnCaseNullDefault.java @@ -0,0 +1,9 @@ +// "Replace with old style 'switch' statement" "true" + +class ReturnCaseNullDefault { + int bar(Object o) { + return switch (o) { + case null, default -> 1; + } + } +} \ No newline at end of file