From f37fa018a751c6d4762b566cc23887f3faa2674f Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Oct 2026 20:48:45 +0200 Subject: [PATCH 1/3] Limit DanglingDocCommentToBlockComment to Java sources --- .../DanglingDocCommentToBlockComment.java | 9 +++++ .../DanglingDocCommentToBlockCommentTest.java | 34 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java index e999b4219d..0938f27456 100644 --- a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java +++ b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java @@ -18,10 +18,12 @@ import lombok.Getter; import org.openrewrite.ExecutionContext; import org.openrewrite.Recipe; +import org.openrewrite.SourceFile; import org.openrewrite.TreeVisitor; import org.openrewrite.internal.ListUtils; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.tree.Comment; +import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.Space; import org.openrewrite.java.tree.TextComment; @@ -39,6 +41,13 @@ public class DanglingDocCommentToBlockComment extends Recipe { @Override public TreeVisitor getVisitor() { return new JavaIsoVisitor() { + @Override + public boolean isAcceptable(SourceFile sourceFile, ExecutionContext ctx) { + // Kotlin, Groovy and JavaScript parse every comment, KDoc and JSDoc included, to a TextComment, + // so they would all look dangling. The javac lint only concerns Java sources anyway. + return sourceFile instanceof J.CompilationUnit; + } + @Override public Space visitSpace(Space space, Space.Location loc, ExecutionContext ctx) { // A leading comment is conventionally the license header, and javac does not flag it. diff --git a/src/test/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockCommentTest.java b/src/test/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockCommentTest.java index a85d374a4d..cf54c876d2 100644 --- a/src/test/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockCommentTest.java +++ b/src/test/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockCommentTest.java @@ -20,7 +20,9 @@ import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; +import static org.openrewrite.groovy.Assertions.groovy; import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.kotlin.Assertions.kotlin; class DanglingDocCommentToBlockCommentTest implements RewriteTest { @@ -199,4 +201,36 @@ void a() { ) ); } + + @Test + void leaveKotlinAlone() { + rewriteRun( + kotlin( + """ + import java.util.UUID + + /******************************************************************* + * KDoc is parsed as a plain comment, so it would otherwise look dangling. + */ + val id = UUID.randomUUID() + """ + ) + ); + } + + @Test + void leaveGroovyAlone() { + rewriteRun( + groovy( + """ + import java.util.UUID + + /******************************************************************* + * Groovydoc is parsed as a plain comment, so it would otherwise look dangling. + */ + def id = UUID.randomUUID() + """ + ) + ); + } } From 1e91bc7c1da0d6510948c1a81626d8786d54a89c Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Oct 2026 20:50:50 +0200 Subject: [PATCH 2/3] Use a FindSourceFiles precondition for Java sources --- .../DanglingDocCommentToBlockComment.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java index 0938f27456..a96103f981 100644 --- a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java +++ b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java @@ -17,13 +17,13 @@ import lombok.Getter; import org.openrewrite.ExecutionContext; +import org.openrewrite.FindSourceFiles; +import org.openrewrite.Preconditions; import org.openrewrite.Recipe; -import org.openrewrite.SourceFile; import org.openrewrite.TreeVisitor; import org.openrewrite.internal.ListUtils; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.tree.Comment; -import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.Space; import org.openrewrite.java.tree.TextComment; @@ -40,14 +40,9 @@ public class DanglingDocCommentToBlockComment extends Recipe { @Override public TreeVisitor getVisitor() { - return new JavaIsoVisitor() { - @Override - public boolean isAcceptable(SourceFile sourceFile, ExecutionContext ctx) { - // Kotlin, Groovy and JavaScript parse every comment, KDoc and JSDoc included, to a TextComment, - // so they would all look dangling. The javac lint only concerns Java sources anyway. - return sourceFile instanceof J.CompilationUnit; - } - + // Kotlin, Groovy and JavaScript parse every comment, KDoc and JSDoc included, to a TextComment, + // so they would all look dangling. The javac lint only concerns Java sources anyway. + return Preconditions.check(new FindSourceFiles("**/*.java"), new JavaIsoVisitor() { @Override public Space visitSpace(Space space, Space.Location loc, ExecutionContext ctx) { // A leading comment is conventionally the license header, and javac does not flag it. @@ -56,7 +51,7 @@ public Space visitSpace(Space space, Space.Location loc, ExecutionContext ctx) { } return space.withComments(ListUtils.map(space.getComments(), DanglingDocCommentToBlockComment::toBlockComment)); } - }; + }); } /** From 02ed9b2607926a98dfa031b5451e22173f032146 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 9 Oct 2026 20:54:55 +0200 Subject: [PATCH 3/3] Use JavaFileChecker as the Java source precondition --- .../java/migrate/DanglingDocCommentToBlockComment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java index a96103f981..c6744be023 100644 --- a/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java +++ b/src/main/java/org/openrewrite/java/migrate/DanglingDocCommentToBlockComment.java @@ -17,7 +17,6 @@ import lombok.Getter; import org.openrewrite.ExecutionContext; -import org.openrewrite.FindSourceFiles; import org.openrewrite.Preconditions; import org.openrewrite.Recipe; import org.openrewrite.TreeVisitor; @@ -26,6 +25,7 @@ import org.openrewrite.java.tree.Comment; import org.openrewrite.java.tree.Space; import org.openrewrite.java.tree.TextComment; +import org.openrewrite.staticanalysis.java.JavaFileChecker; public class DanglingDocCommentToBlockComment extends Recipe { @@ -42,7 +42,7 @@ public class DanglingDocCommentToBlockComment extends Recipe { public TreeVisitor getVisitor() { // Kotlin, Groovy and JavaScript parse every comment, KDoc and JSDoc included, to a TextComment, // so they would all look dangling. The javac lint only concerns Java sources anyway. - return Preconditions.check(new FindSourceFiles("**/*.java"), new JavaIsoVisitor() { + return Preconditions.check(new JavaFileChecker<>(), new JavaIsoVisitor() { @Override public Space visitSpace(Space space, Space.Location loc, ExecutionContext ctx) { // A leading comment is conventionally the license header, and javac does not flag it.