From 2cb3713b7ed77087180f155e693d169b08ca4b47 Mon Sep 17 00:00:00 2001 From: martinfrancois Date: Tue, 11 Aug 2026 20:25:36 +0200 Subject: [PATCH] Preserve comments before unwrapped else blocks --- .../staticanalysis/UnwrapElseAfterReturn.java | 11 +++- .../UnwrapElseAfterReturnTest.java | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturn.java b/src/main/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturn.java index 322819ab7..56fc7184f 100644 --- a/src/main/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturn.java +++ b/src/main/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturn.java @@ -93,10 +93,17 @@ private List flatten(J.If tailIf, Statement tailElse, AtomicReference J.Block elseBlock = (J.Block) tailElse; endWhitespace.set(elseBlock.getEnd()); return ListUtils.concat(ifWithoutElse, ListUtils.mapFirst(elseBlock.getStatements(), elseStmt -> { + List elsePartComments = tailIf.getElsePart().getPrefix().getComments(); List elseComments = elseBlock.getPrefix().getComments(); List stmtComments = elseStmt.getPrefix().getComments(); - if (!elseComments.isEmpty() || !stmtComments.isEmpty()) { - return elseStmt.withComments(ListUtils.concatAll(elseComments, stmtComments)); + if (!elsePartComments.isEmpty() || !elseComments.isEmpty() || !stmtComments.isEmpty()) { + return elseStmt.withPrefix(elseStmt.getPrefix() + .withWhitespace(elsePartComments.isEmpty() ? + elseStmt.getPrefix().getWhitespace() : + tailIf.getElsePart().getPrefix().getWhitespace()) + .withComments(ListUtils.concatAll( + elsePartComments, + ListUtils.concatAll(elseComments, stmtComments)))); } String whitespace = tailIf.getElsePart().getPrefix().getWhitespace(); return elseStmt.withPrefix(elseStmt.getPrefix().withWhitespace(whitespace)); diff --git a/src/test/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturnTest.java b/src/test/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturnTest.java index 909d75139..e3d88d5d3 100644 --- a/src/test/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturnTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/UnwrapElseAfterReturnTest.java @@ -266,6 +266,64 @@ int foo(boolean condition) { ); } + @Test + void preserveCommentBeforeElseKeyword() { + rewriteRun( + //language=java + java( + """ + class MultilineElseTest { + int foo(boolean condition) { + if (condition) { + return 1; + } + // Handle false condition + else { + return 2; + } + } + } + """, + """ + class MultilineElseTest { + int foo(boolean condition) { + if (condition) { + return 1; + } + // Handle false condition + return 2; + } + } + """ + ), + //language=java + java( + """ + class InlineElseTest { + int foo(boolean condition) { + if (condition) { + return 1; + } + // Handle false condition + else { return 2; } + } + } + """, + """ + class InlineElseTest { + int foo(boolean condition) { + if (condition) { + return 1; + } + // Handle false condition + return 2; + } + } + """ + ) + ); + } + @Test void complexElseBlock() { rewriteRun(