Skip to content

Commit cea00fb

Browse files
Groovy: fix parsing of inner constructor calls
1 parent 3964f44 commit cea00fb

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

rewrite-groovy/src/main/java/org/openrewrite/groovy/GroovyParserVisitor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2516,6 +2516,11 @@ public void visitTupleExpression(TupleExpression tuple) {
25162516

25172517
List<JRightPadded<Expression>> args = new ArrayList<>(tuple.getExpressions().size());
25182518
for (org.codehaus.groovy.ast.expr.Expression expression : tuple.getExpressions()) {
2519+
// Skip synthetic args (e.g. the implicit outer-`this` Groovy adds when
2520+
// constructing a non-static inner class from within the enclosing class)
2521+
if (!appearsInSource(expression)) {
2522+
continue;
2523+
}
25192524
NamedArgumentListExpression namedArgList = (NamedArgumentListExpression) expression;
25202525
List<MapEntryExpression> mapEntryExpressions = namedArgList.getMapEntryExpressions();
25212526
for (int i = 0; i < mapEntryExpressions.size(); i++) {

rewrite-groovy/src/test/java/org/openrewrite/groovy/tree/ConstructorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,20 @@ class T {
151151
);
152152
}
153153

154+
@Test
155+
void nonStaticInnerClassNamedArgs() {
156+
rewriteRun(
157+
groovy(
158+
"""
159+
class T {
160+
class Reader { }
161+
def m() { new Reader(a: 1) }
162+
}
163+
"""
164+
)
165+
);
166+
}
167+
154168
@Test
155169
void innerClassConstructorWithOnlySuperCall() {
156170
rewriteRun(

0 commit comments

Comments
 (0)