From 611466b979304099094226fa59a1ce11e89bb850 Mon Sep 17 00:00:00 2001 From: Jonathan Schneider Date: Sat, 3 Oct 2026 11:56:31 +0100 Subject: [PATCH] switch-loses-branch-comment: keep commented single-statement blocks --- .../lang/IfElseIfConstructToSwitch.java | 5 ++- .../lang/IfElseIfConstructToSwitchTest.java | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitch.java b/src/main/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitch.java index 70d10748e1..c3c5fc8f6d 100644 --- a/src/main/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitch.java +++ b/src/main/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitch.java @@ -345,7 +345,10 @@ private String getPattern(J.InstanceOf statement) { private Statement getStatement(Statement statement) { if (statement instanceof J.Block && ((J.Block) statement).getStatements().size() == 1) { Statement firstStatement = ((J.Block) statement).getStatements().get(0); - if (firstStatement instanceof Expression || firstStatement instanceof J.Throw) { + if ((firstStatement instanceof Expression || firstStatement instanceof J.Throw) && + firstStatement.getComments().isEmpty() && + statement.getComments().isEmpty() && + ((J.Block) statement).getEnd().getComments().isEmpty()) { return firstStatement; } } diff --git a/src/test/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitchTest.java b/src/test/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitchTest.java index b1bae30106..a830f6fc48 100644 --- a/src/test/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitchTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitchTest.java @@ -35,6 +35,42 @@ public void defaults(RecipeSpec spec) { .allSources(source -> version(source, 21)); } + @Test + void preserveSingleStatementBranchComment() { + rewriteRun( + java( + """ + class Test { + void use(Object value) {} + void test(Object value) { + if (value instanceof String s) { + use(s); + } else if (value instanceof Integer i) { // integers need special handling + use(i); + } else { + use(value); + } + } + } + """, + """ + class Test { + void use(Object value) {} + void test(Object value) { + switch (value) { + case String s -> use(s); + case Integer i -> { // integers need special handling + use(i); + } + case null, default -> use(value); + } + } + } + """ + ) + ); + } + @DocumentExample @Test void defaultSwitchBlockWithNullCheckAndFinalElseStatement() {