Skip to content

Commit 380c942

Browse files
MethodType parameter names not retained (#5923)
* MethodType parameter names not retained for Guava method * Show a possible solution with reflection by Claude * Remove special handling for int/String * Pass in `-parameters` instead * Revert formatting changes * Replicate change to other Java parser versions * Move test method and use assertj-core which is already present * Revert to `get(0)` when running on Java 8, 11 & 17 * Only enable test on Java 11+ for now * Minimize accidental changes between Java 8 and 11 parsers * Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent c308e61 commit 380c942

File tree

7 files changed

+38
-11
lines changed

7 files changed

+38
-11
lines changed

rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11Parser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ private ReloadableJava11Parser(
109109
// https://docs.oracle.com/en/java/javacard/3.1/guide/setting-java-compiler-options.html
110110
Options.instance(context).put("-g", "-g");
111111
Options.instance(context).put("-proc", "none");
112+
Options.instance(context).put("-parameters", "true");
112113

113114
// Ensure type attribution continues despite errors in individual files or nodes.
114115
// If an error occurs in a single file or node, type attribution should still proceed

rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ public J visitClass(ClassTree node, Space fmt) {
467467

468468
List<Tree> membersMultiVariablesSeparated = new ArrayList<>(node.getMembers().size());
469469
for (Tree m : node.getMembers()) {
470-
// skip lomobok generated trees
470+
// skip lombok generated trees
471471
if (isLombokGenerated(m)) {
472472
continue;
473473
}
@@ -1938,7 +1938,6 @@ private static boolean isLombokGenerated(Tree t) {
19381938
Tree tree = (t instanceof JCAnnotation) ? ((JCAnnotation) t).getAnnotationType() : t;
19391939

19401940
Symbol sym = extractSymbol(tree);
1941-
19421941
if (sym == null) {
19431942
// not a symbol we can check
19441943
return false;

rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17Parser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ private ReloadableJava17Parser(
109109
// https://docs.oracle.com/en/java/javacard/3.1/guide/setting-java-compiler-options.html
110110
Options.instance(context).put("-g", "-g");
111111
Options.instance(context).put("-proc", "none");
112+
Options.instance(context).put("-parameters", "true");
112113

113114
// Ensure type attribution continues despite errors in individual files or nodes.
114115
// If an error occurs in a single file or node, type attribution should still proceed

rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21Parser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ private ReloadableJava21Parser(
109109
// https://docs.oracle.com/en/java/javacard/3.1/guide/setting-java-compiler-options.html
110110
Options.instance(context).put("-g", "-g");
111111
Options.instance(context).put("-proc", "none");
112+
Options.instance(context).put("-parameters", "true");
112113

113114
// Ensure type attribution continues despite errors in individual files or nodes.
114115
// If an error occurs in a single file or node, type attribution should still proceed

rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8Parser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ class ReloadableJava8Parser implements JavaParser {
102102
// https://docs.oracle.com/en/java/javacard/3.1/guide/setting-java-compiler-options.html
103103
Options.instance(context).put("-g", "-g");
104104
Options.instance(context).put("-proc", "none");
105+
Options.instance(context).put("-parameters", "true");
105106

106107
// Ensure type attribution continues despite errors in individual files or nodes.
107108
// If an error occurs in a single file or node, type attribution should still proceed

rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,6 @@ public J visitCompilationUnit(CompilationUnitTree node, Space fmt) {
520520
packageDecl = new J.Package(randomId(), packagePrefix, Markers.EMPTY,
521521
convert(cu.getPackageName()), packageAnnotations);
522522
}
523-
524523
return new J.CompilationUnit(
525524
randomId(),
526525
fmt,
@@ -912,10 +911,11 @@ public J visitMethodInvocation(MethodInvocationTree node, Space fmt) {
912911
singletonList(padRight(new J.Empty(randomId(), sourceBefore(")"), Markers.EMPTY), EMPTY)) :
913912
convertAll(node.getArguments(), commaDelim, t -> sourceBefore(")")), Markers.EMPTY);
914913

915-
Symbol genericSymbol = (jcSelect instanceof JCFieldAccess) ? ((JCFieldAccess) jcSelect).sym : ((JCIdent) jcSelect).sym;
914+
Symbol methodSymbol = (jcSelect instanceof JCFieldAccess) ? ((JCFieldAccess) jcSelect).sym :
915+
((JCIdent) jcSelect).sym;
916916

917917
return new J.MethodInvocation(randomId(), fmt, Markers.EMPTY, select, typeParams, name, args,
918-
typeMapping.methodInvocationType(jcSelect.type, genericSymbol));
918+
typeMapping.methodInvocationType(jcSelect.type, methodSymbol));
919919
}
920920

921921
@Override
@@ -1701,9 +1701,6 @@ private boolean isEnum(Tree t) {
17011701
}
17021702

17031703
private <J2 extends @Nullable J> @Nullable JRightPadded<J2> convert(@Nullable Tree t, Function<Tree, Space> suffix) {
1704-
if (t == null) {
1705-
return null;
1706-
}
17071704
return convert(t, suffix, j -> Markers.EMPTY);
17081705
}
17091706

@@ -1942,9 +1939,9 @@ private static boolean isLombokGenerated(Tree t) {
19421939
}
19431940

19441941
return isLombokAnnotationType(sym.getQualifiedName().toString()) ||
1945-
sym.getDeclarationAttributes().stream()
1946-
.map(c -> c.type.toString())
1947-
.anyMatch(ReloadableJava8ParserVisitor::isLombokAnnotationType);
1942+
sym.getDeclarationAttributes().stream()
1943+
.map(a -> a.type.toString())
1944+
.anyMatch(ReloadableJava8ParserVisitor::isLombokAnnotationType);
19481945
}
19491946

19501947
private static boolean isLombokAnnotationType(String name) {

rewrite-java-tck/src/main/java/org/openrewrite/java/tree/MethodInvocationTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717

1818
import org.junit.jupiter.api.Test;
1919
import org.openrewrite.ExecutionContext;
20+
import org.openrewrite.Issue;
2021
import org.openrewrite.java.JavaIsoVisitor;
22+
import org.openrewrite.java.JavaParser;
23+
import org.openrewrite.java.MinimumJava11;
2124
import org.openrewrite.test.RewriteTest;
2225

2326
import java.util.Optional;
@@ -132,4 +135,28 @@ void m() {
132135
)
133136
);
134137
}
138+
139+
@Issue("https://github.com/openrewrite/rewrite/issues/5400") // Fails on Java 8, but passes on Java 11 and later
140+
@MinimumJava11
141+
@Test
142+
void methodParameterNamesPresent() {
143+
rewriteRun(
144+
spec -> spec.parser(JavaParser.fromJavaVersion().classpath("assertj-core")),
145+
java(
146+
"""
147+
import static org.assertj.core.api.Assertions.assertThat;
148+
class Regular {
149+
void method(String exp, String act) {
150+
assertThat(act).isEqualTo(exp);
151+
}
152+
}
153+
""",
154+
spec -> spec.beforeRecipe(cu -> {
155+
J.MethodDeclaration md = (J.MethodDeclaration) cu.getClasses().get(0).getBody().getStatements().get(0);
156+
J.MethodInvocation mi = (J.MethodInvocation) md.getBody().getStatements().get(0);
157+
assertThat(mi.getMethodType().getParameterNames()).containsExactly("expected");
158+
})
159+
)
160+
);
161+
}
135162
}

0 commit comments

Comments
 (0)