Skip to content

Commit 9cb3df0

Browse files
authored
Add support for diamond operator in Groovy Parser (#5783)
1 parent b7aef26 commit 9cb3df0

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2516,15 +2516,10 @@ private <T extends TypeTree & Expression> T typeTree(@Nullable ClassNode classNo
25162516
&& classNode.getUnresolvedSuperClass().isUsingGenerics()
25172517
&& !classNode.getUnresolvedSuperClass().isGenericsPlaceHolder()
25182518
&& classNode.getGenericsTypes() == null;
2519-
if (isAnonymousClassWithGenericSuper) {
2519+
if (isAnonymousClassWithGenericSuper || (classNode.isUsingGenerics() && !classNode.isGenericsPlaceHolder())) {
25202520
JContainer<Expression> typeParameters = inferredType ?
25212521
JContainer.build(sourceBefore("<"), singletonList(padRight(new J.Empty(randomId(), EMPTY, Markers.EMPTY), sourceBefore(">"))), Markers.EMPTY) :
2522-
visitTypeParameterizations(classNode.getUnresolvedSuperClass().getGenericsTypes());
2523-
expr = new J.ParameterizedType(randomId(), EMPTY, Markers.EMPTY, (NameTree) expr, typeParameters, typeMapping.type(classNode));
2524-
} else if (classNode.isUsingGenerics() && !classNode.isGenericsPlaceHolder()) {
2525-
JContainer<Expression> typeParameters = inferredType ?
2526-
JContainer.build(sourceBefore("<"), singletonList(padRight(new J.Empty(randomId(), EMPTY, Markers.EMPTY), sourceBefore(">"))), Markers.EMPTY) :
2527-
visitTypeParameterizations(classNode.getGenericsTypes());
2522+
visitTypeParameterizations(isAnonymousClassWithGenericSuper ? classNode.getUnresolvedSuperClass().getGenericsTypes() : classNode.getGenericsTypes());
25282523
expr = new J.ParameterizedType(randomId(), EMPTY, Markers.EMPTY, (NameTree) expr, typeParameters, typeMapping.type(classNode));
25292524
}
25302525
}
@@ -3100,7 +3095,7 @@ private boolean isInferred(ConstructorCallExpression ctor) {
31003095

31013096
ClassNode innerClass = ctor.getType();
31023097
if (!(innerClass instanceof InnerClassNode)) {
3103-
return false;
3098+
return innerClass.getGenericsTypes() != null && innerClass.getGenericsTypes().length == 0;
31043099
}
31053100

31063101
ClassNode superClass = innerClass.getUnresolvedSuperClass();

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,28 @@ void inParens() {
3434
);
3535
}
3636

37+
@Test
38+
void withGenerics() {
39+
rewriteRun(
40+
groovy(
41+
"""
42+
new ArrayList<String>()
43+
"""
44+
)
45+
);
46+
}
47+
48+
@Test
49+
void withDiamondOperator() {
50+
rewriteRun(
51+
groovy(
52+
"""
53+
new ArrayList<>()
54+
"""
55+
)
56+
);
57+
}
58+
3759
@Test
3860
void declaration() {
3961
rewriteRun(

0 commit comments

Comments
 (0)