diff --git a/src/main/java/org/openrewrite/java/migrate/lang/UseTextBlocks.java b/src/main/java/org/openrewrite/java/migrate/lang/UseTextBlocks.java index ddbb3f9b57..843aa5e72b 100644 --- a/src/main/java/org/openrewrite/java/migrate/lang/UseTextBlocks.java +++ b/src/main/java/org/openrewrite/java/migrate/lang/UseTextBlocks.java @@ -100,6 +100,10 @@ public J visitBinary(J.Binary binary, ExecutionContext ctx) { return binary; // Not super.visitBinary(binary, ctx) because we don't want to visit the children } + if (containsComments(binary)) { + return binary; + } + boolean flattenable = flatAdditiveStringLiterals(binary, stringLiterals, contentSb, concatenationSb); if (!flattenable) { return super.visitBinary(binary, ctx); @@ -195,6 +199,18 @@ private boolean isEndsWithSpecialCharacters(String content) { }); } + private static boolean containsComments(Expression expression) { + if (expression instanceof J.Binary) { + J.Binary b = (J.Binary) expression; + if (!b.getPrefix().getComments().isEmpty() || + !b.getPadding().getOperator().getBefore().getComments().isEmpty()) { + return true; + } + return containsComments(b.getLeft()) || containsComments(b.getRight()); + } + return expression instanceof J.Literal && !expression.getPrefix().getComments().isEmpty(); + } + private static boolean allLiterals(Expression exp) { return isRegularStringLiteral(exp) || exp instanceof J.Binary && ((J.Binary) exp).getOperator() == J.Binary.Type.Addition && diff --git a/src/test/java/org/openrewrite/java/migrate/lang/UseTextBlocksTest.java b/src/test/java/org/openrewrite/java/migrate/lang/UseTextBlocksTest.java index 787baee40e..a5f856a724 100644 --- a/src/test/java/org/openrewrite/java/migrate/lang/UseTextBlocksTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lang/UseTextBlocksTest.java @@ -256,6 +256,37 @@ class Test { ); } + @Test + void doNotDropLineComments() { + rewriteRun( + //language=java + java( + """ + class Test { + String query = "SELECT * FROM\\n" + // table query + "my_table\\n" + + "WHERE something = 1;"; + } + """ + ) + ); + } + + @Test + void doNotDropBlockComments() { + rewriteRun( + //language=java + java( + """ + class Test { + String query = "SELECT * FROM\\n" + /* table name */ "my_table\\n" + + "WHERE something = 1;"; + } + """ + ) + ); + } + @Test void preferNoChangeIfCarriageReturnInContent() { rewriteRun(