diff --git a/src/main/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscore.java b/src/main/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscore.java index b665006d86..059bbccbb3 100644 --- a/src/main/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscore.java +++ b/src/main/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscore.java @@ -70,22 +70,31 @@ public J.Try.Catch visitCatch(J.Try.Catch _catch, ExecutionContext ctx) { @Override public J.Lambda visitLambda(J.Lambda lambda, ExecutionContext ctx) { J.Lambda l = super.visitLambda(lambda, ctx); + boolean willRename = false; for (J param : l.getParameters().getParameters()) { if (param instanceof J.VariableDeclarations) { for (J.VariableDeclarations.NamedVariable namedVariable : ((J.VariableDeclarations) param).getVariables()) { - renameVariableIfUnusedInContext(namedVariable, l.getBody()); + if (renameVariableIfUnusedInContext(namedVariable, l.getBody())) { + willRename = true; + } } } } + if (willRename && l.getParameters().isParenthesized() && + l.getParameters().getParameters().size() == 1) { + l = l.withParameters(l.getParameters().withParenthesized(false)); + } return l; } - private void renameVariableIfUnusedInContext(J.VariableDeclarations.NamedVariable variable, J context) { + private boolean renameVariableIfUnusedInContext(J.VariableDeclarations.NamedVariable variable, J context) { if (!UNDERSCORE.equals(variable.getName().getSimpleName()) && VariableReferences.findRhsReferences(context, variable.getName()).isEmpty() && !usedInModifyingUnary(variable.getName(), context)) { doAfterVisit(new RenameVariable<>(variable, UNDERSCORE)); + return true; } + return false; } private boolean usedInModifyingUnary(J.Identifier identifier, J context) { diff --git a/src/test/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscoreTest.java b/src/test/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscoreTest.java index 070802055c..f45ec71cba 100644 --- a/src/test/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscoreTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscoreTest.java @@ -174,6 +174,37 @@ void example() { ); } + @Test + void replaceUnusedParenthesizedLambdaParameter() { + rewriteRun( + //language=java + java( + """ + import java.util.stream.Stream; + import java.util.stream.Collectors; + + class Test { + void example() { + Stream.of("a", "b", "c") + .collect(Collectors.toMap(String::toUpperCase, (item) -> "NODATA")); + } + } + """, + """ + import java.util.stream.Stream; + import java.util.stream.Collectors; + + class Test { + void example() { + Stream.of("a", "b", "c") + .collect(Collectors.toMap(String::toUpperCase, _ -> "NODATA")); + } + } + """ + ) + ); + } + @Test void doNotReplaceUsedLambdaParameter() { rewriteRun(