From 2c2194ac1f410c6fbab96f088c7136e7f7cda4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Merlin=20B=C3=B6gershausen?= Date: Thu, 28 May 2026 18:24:09 +0200 Subject: [PATCH] Skip `RenameUnderscoreIdentifier` on Kotlin and Groovy sources Mirror the precondition gate already used by the sibling `ReplaceUnusedVariablesWithUnderscore` so the recipe no longer rewrites legal `_` placeholders in Kotlin lambdas to `__`, which is reserved in Kotlin 2.0+. --- .../lang/RenameUnderscoreIdentifier.java | 8 +++++++- .../lang/RenameUnderscoreIdentifierTest.java | 20 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifier.java b/src/main/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifier.java index 6b0b86a602..be45a4b38e 100644 --- a/src/main/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifier.java +++ b/src/main/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifier.java @@ -26,6 +26,8 @@ import org.openrewrite.java.search.UsesJavaVersion; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; +import org.openrewrite.staticanalysis.groovy.GroovyFileChecker; +import org.openrewrite.staticanalysis.kotlin.KotlinFileChecker; @EqualsAndHashCode(callSuper = false) @Value @@ -40,7 +42,11 @@ public class RenameUnderscoreIdentifier extends Recipe { @Override public TreeVisitor getVisitor() { return Preconditions.check( - new UsesJavaVersion<>(1, 8), + Preconditions.and( + new UsesJavaVersion<>(1, 8), + Preconditions.not(new KotlinFileChecker<>()), + Preconditions.not(new GroovyFileChecker<>()) + ), new RenameIdentifierVisitor("_", "__") ); } diff --git a/src/test/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifierTest.java b/src/test/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifierTest.java index 44e15b4566..d29ad4f73b 100644 --- a/src/test/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifierTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lang/RenameUnderscoreIdentifierTest.java @@ -25,6 +25,7 @@ import static org.openrewrite.java.Assertions.java; import static org.openrewrite.java.Assertions.javaVersion; +import static org.openrewrite.kotlin.Assertions.kotlin; class RenameUnderscoreIdentifierTest implements RewriteTest { @@ -273,6 +274,25 @@ void test() { ); } + @Test + void kotlinFileNotChanged() { + rewriteRun( + spec -> spec.recipe(new RenameUnderscoreIdentifier()) + .allSources(s -> s.markers(javaVersion(8))), + //language=kotlin + kotlin( + """ + class Test { + fun test() { + val pairs = listOf(1 to "a", 2 to "b") + pairs.forEach { _, _ -> println("ignored") } + } + } + """ + ) + ); + } + @Test void forEachLoopVariable() { rewriteRun(