From 9680531a04b43f781afaf15f0fd080569fa73305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kev=C4=B1n=20Carpenter=E2=84=A2=EF=B8=8F?= <910168+kmccarp@users.noreply.github.com> Date: Wed, 4 Nov 2026 20:49:54 +0000 Subject: [PATCH] Only add `AddMissingMethodImplementation` templates to Java sources The template printed Java into Kotlin classes, such as 'public unwrap( iface: Class): T {', which does not compile, including where Kotlin delegation already supplies the method. --- .../migrate/AddMissingMethodImplementation.java | 6 +++++- .../AddMissingMethodImplementationTest.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/migrate/AddMissingMethodImplementation.java b/src/main/java/org/openrewrite/java/migrate/AddMissingMethodImplementation.java index 9152b33e2e..e144d9f684 100644 --- a/src/main/java/org/openrewrite/java/migrate/AddMissingMethodImplementation.java +++ b/src/main/java/org/openrewrite/java/migrate/AddMissingMethodImplementation.java @@ -27,6 +27,7 @@ import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; import org.openrewrite.java.tree.TypeUtils; +import org.openrewrite.staticanalysis.java.JavaFileChecker; import java.util.Iterator; @@ -57,7 +58,10 @@ public class AddMissingMethodImplementation extends Recipe { @Override public TreeVisitor getVisitor() { - return Preconditions.check(new UsesType<>(fullyQualifiedClassName, true), new ClassImplementationVisitor()); + // The method template is Java, so printing it into a Kotlin or Groovy class would not compile. + return Preconditions.check( + Preconditions.and(new JavaFileChecker<>(), new UsesType<>(fullyQualifiedClassName, true)), + new ClassImplementationVisitor()); } public class ClassImplementationVisitor extends JavaIsoVisitor { diff --git a/src/test/java/org/openrewrite/java/migrate/AddMissingMethodImplementationTest.java b/src/test/java/org/openrewrite/java/migrate/AddMissingMethodImplementationTest.java index 7d5931efe2..807d30c87b 100644 --- a/src/test/java/org/openrewrite/java/migrate/AddMissingMethodImplementationTest.java +++ b/src/test/java/org/openrewrite/java/migrate/AddMissingMethodImplementationTest.java @@ -23,6 +23,7 @@ import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.Assertions.javaVersion; +import static org.openrewrite.kotlin.Assertions.kotlin; class AddMissingMethodImplementationTest implements RewriteTest { @@ -234,4 +235,18 @@ class C2 { ) ); } + + @Test + void leaveKotlinAlone() { + rewriteRun( + spec -> spec.recipe(new AddMissingMethodImplementation("java.lang.Runnable", "java.lang.Runnable run()", + "public void run() { }")), + //language=kotlin + kotlin( + """ + class Delegating(runnable: Runnable) : Runnable by runnable + """ + ) + ); + } }