Skip to content

Commit 8ad8d92

Browse files
authored
Remove parentheses from single unnamed lambda parameters (#1054)
When `ReplaceUnusedVariablesWithUnderscore` renames a single parenthesized lambda parameter to `_`, also strip the parentheses so `(_) -> ...` becomes `_ -> ...`.
1 parent 2388f91 commit 8ad8d92

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

src/main/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscore.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,22 +70,31 @@ public J.Try.Catch visitCatch(J.Try.Catch _catch, ExecutionContext ctx) {
7070
@Override
7171
public J.Lambda visitLambda(J.Lambda lambda, ExecutionContext ctx) {
7272
J.Lambda l = super.visitLambda(lambda, ctx);
73+
boolean willRename = false;
7374
for (J param : l.getParameters().getParameters()) {
7475
if (param instanceof J.VariableDeclarations) {
7576
for (J.VariableDeclarations.NamedVariable namedVariable : ((J.VariableDeclarations) param).getVariables()) {
76-
renameVariableIfUnusedInContext(namedVariable, l.getBody());
77+
if (renameVariableIfUnusedInContext(namedVariable, l.getBody())) {
78+
willRename = true;
79+
}
7780
}
7881
}
7982
}
83+
if (willRename && l.getParameters().isParenthesized() &&
84+
l.getParameters().getParameters().size() == 1) {
85+
l = l.withParameters(l.getParameters().withParenthesized(false));
86+
}
8087
return l;
8188
}
8289

83-
private void renameVariableIfUnusedInContext(J.VariableDeclarations.NamedVariable variable, J context) {
90+
private boolean renameVariableIfUnusedInContext(J.VariableDeclarations.NamedVariable variable, J context) {
8491
if (!UNDERSCORE.equals(variable.getName().getSimpleName()) &&
8592
VariableReferences.findRhsReferences(context, variable.getName()).isEmpty() &&
8693
!usedInModifyingUnary(variable.getName(), context)) {
8794
doAfterVisit(new RenameVariable<>(variable, UNDERSCORE));
95+
return true;
8896
}
97+
return false;
8998
}
9099

91100
private boolean usedInModifyingUnary(J.Identifier identifier, J context) {

src/test/java/org/openrewrite/java/migrate/lang/ReplaceUnusedVariablesWithUnderscoreTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,37 @@ void example() {
174174
);
175175
}
176176

177+
@Test
178+
void replaceUnusedParenthesizedLambdaParameter() {
179+
rewriteRun(
180+
//language=java
181+
java(
182+
"""
183+
import java.util.stream.Stream;
184+
import java.util.stream.Collectors;
185+
186+
class Test {
187+
void example() {
188+
Stream.of("a", "b", "c")
189+
.collect(Collectors.toMap(String::toUpperCase, (item) -> "NODATA"));
190+
}
191+
}
192+
""",
193+
"""
194+
import java.util.stream.Stream;
195+
import java.util.stream.Collectors;
196+
197+
class Test {
198+
void example() {
199+
Stream.of("a", "b", "c")
200+
.collect(Collectors.toMap(String::toUpperCase, _ -> "NODATA"));
201+
}
202+
}
203+
"""
204+
)
205+
);
206+
}
207+
177208
@Test
178209
void doNotReplaceUsedLambdaParameter() {
179210
rewriteRun(

0 commit comments

Comments
 (0)