Skip to content

Commit 6daaa19

Browse files
Groovy: fix parsing of generics class literal (#7505)
1 parent 20a886e commit 6daaa19

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,16 @@ public void visitClassExpression(ClassExpression clazz) {
11681168
emptyList(),
11691169
name,
11701170
typeMapping.type(type), null);
1171-
queue.add(new J.ParameterizedType(randomId(), prefix, Markers.EMPTY, ident, visitTypeParameterizations(generics), typeMapping.type(type)));
1171+
J.ParameterizedType parameterizedType = new J.ParameterizedType(randomId(), prefix, Markers.EMPTY, ident, visitTypeParameterizations(generics), typeMapping.type(type));
1172+
if (sourceStartsWith(".class")) {
1173+
Space beforeDot = sourceBefore(".");
1174+
Space classPrefix = whitespace();
1175+
skip("class");
1176+
J.Identifier classIdent = new J.Identifier(randomId(), classPrefix, Markers.EMPTY, emptyList(), "class", null, null);
1177+
queue.add(new J.FieldAccess(randomId(), EMPTY, Markers.EMPTY, parameterizedType, padLeft(beforeDot, classIdent), typeMapping.type(type)));
1178+
return;
1179+
}
1180+
queue.add(parameterizedType);
11721181
return;
11731182
}
11741183
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,15 @@ void setUp() {
9696
)
9797
);
9898
}
99+
100+
@Test
101+
void parameterizedClassLiteral() {
102+
rewriteRun(
103+
groovy(
104+
"""
105+
def x = ArrayList<String>.class
106+
"""
107+
)
108+
);
109+
}
99110
}

0 commit comments

Comments
 (0)