Skip to content

Commit 47dff10

Browse files
timtebeekLaurens-W
andauthored
DefaultComesLast should work on Java 21 Object switch (#462)
* DefaultComesLast should work on Java 21 Object switch * Add Java 21 to classpath * Similar replacements in other cases * Apply suggestions from code review * Remove unused imports in CombineSemanticallyEqualCatchBlocks * Remove unused import --------- Co-authored-by: Laurens Westerlaken <[email protected]>
1 parent 8daa3ac commit 47dff10

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,12 @@ dependencies {
3838
testImplementation("com.google.code.gson:gson:latest.release")
3939

4040
testRuntimeOnly("org.openrewrite:rewrite-java-17")
41+
testRuntimeOnly("org.openrewrite:rewrite-java-21")
4142
testRuntimeOnly("com.google.code.findbugs:jsr305:latest.release")
4243
}
44+
45+
java {
46+
toolchain {
47+
languageVersion.set(JavaLanguageVersion.of(21))
48+
}
49+
}

src/main/java/org/openrewrite/staticanalysis/CombineSemanticallyEqualCatchBlocks.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ public J.Case visitCase(J.Case _case, J j) {
603603
return _case;
604604
}
605605

606-
this.visit(_case.getExpressions().get(0), compareTo.getExpressions().get(0));
606+
this.visit(_case.getCaseLabels().get(0), compareTo.getCaseLabels().get(0));
607607
for (int i = 0; i < _case.getStatements().size(); i++) {
608608
this.visit(_case.getStatements().get(i), compareTo.getStatements().get(i));
609609
}

src/main/java/org/openrewrite/staticanalysis/DefaultComesLastVisitor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.openrewrite.internal.ListUtils;
2222
import org.openrewrite.java.JavaIsoVisitor;
2323
import org.openrewrite.java.style.DefaultComesLastStyle;
24-
import org.openrewrite.java.tree.Expression;
2524
import org.openrewrite.java.tree.J;
2625
import org.openrewrite.java.tree.Space;
2726
import org.openrewrite.java.tree.Statement;
@@ -186,7 +185,7 @@ private boolean isDefaultCaseLastOrNotPresent(J.Switch switch_) {
186185
}
187186

188187
private boolean isDefaultCase(J.Case case_) {
189-
Expression elem = case_.getExpressions().get(0);
188+
J elem = case_.getCaseLabels().get(0);
190189
return elem instanceof J.Identifier && ((J.Identifier) elem).getSimpleName().equals("default");
191190
}
192191

src/main/java/org/openrewrite/staticanalysis/MinimumSwitchCases.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public J visitSwitch(J.Switch switch_, ExecutionContext ctx) {
123123
if (statement instanceof J.Case) {
124124
J.Case aCase = (J.Case) statement;
125125
if (aCase.getType() == J.Case.Type.Rule) {
126-
if (aCase.getExpressions().size() > 1 || !(aCase.getBody() instanceof Statement)) {
126+
if (aCase.getCaseLabels().size() > 1 || !(aCase.getBody() instanceof Statement)) {
127127
return super.visitSwitch(switch_, ctx);
128128
}
129129
} else {
@@ -224,7 +224,7 @@ private boolean doRewrite(J.Switch switch_) {
224224
return false;
225225
}
226226
return switch_.getCases().getStatements().stream()
227-
.reduce(0, (a, b) -> a + ((J.Case) b).getExpressions().size(), Integer::sum) < 3;
227+
.reduce(0, (a, b) -> a + ((J.Case) b).getCaseLabels().size(), Integer::sum) < 3;
228228
}
229229

230230
private List<Statement> getStatements(J.Case aCase) {

src/test/java/org/openrewrite/staticanalysis/DefaultComesLastTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
package org.openrewrite.staticanalysis;
1717

1818
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.api.condition.EnabledForJreRange;
20+
import org.junit.jupiter.api.condition.JRE;
1921
import org.openrewrite.DocumentExample;
22+
import org.openrewrite.Issue;
2023
import org.openrewrite.Tree;
2124
import org.openrewrite.java.JavaParser;
2225
import org.openrewrite.java.style.DefaultComesLastStyle;
@@ -295,4 +298,26 @@ int bar(Product product) {
295298
)
296299
);
297300
}
301+
302+
@EnabledForJreRange(min = JRE.JAVA_21)
303+
@Issue("https://github.com/openrewrite/rewrite-static-analysis/issues/461")
304+
@Test
305+
void exhaustiveSwitch(){
306+
//language=java
307+
rewriteRun(
308+
java(
309+
"""
310+
public class ExhaustiveSwitch {
311+
static int coverage(Object obj) {
312+
return switch (obj) {
313+
case String s -> s.length();
314+
case Integer i -> i;
315+
default -> 0;
316+
};
317+
}
318+
}
319+
"""
320+
)
321+
);
322+
}
298323
}

src/test/java/org/openrewrite/staticanalysis/EqualsAvoidsNullTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.openrewrite.Issue;
2323
import org.openrewrite.test.RecipeSpec;
2424
import org.openrewrite.test.RewriteTest;
25-
import org.openrewrite.test.SourceSpec;
2625

2726
import static org.openrewrite.java.Assertions.java;
2827

0 commit comments

Comments
 (0)