Skip to content

Commit 2e73374

Browse files
Groovy: fix parsing of variables typed as generics class parameter (#7519)
1 parent d49a26b commit 2e73374

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2743,7 +2743,7 @@ public TypeTree visitVariableExpressionType(@Nullable VariableExpression express
27432743
emptyList(),
27442744
typeName,
27452745
type, null);
2746-
if (expression.getOriginType().getGenericsTypes() != null) {
2746+
if (expression.getOriginType().getGenericsTypes() != null && !expression.getOriginType().isGenericsPlaceHolder() && sourceStartsWith("<")) {
27472747
return new J.ParameterizedType(randomId(), prefix, Markers.EMPTY, ident, visitTypeParameterizations(
27482748
staticType((org.codehaus.groovy.ast.expr.Expression) expression).getGenericsTypes()), type);
27492749
}

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,4 +233,35 @@ void defVariableStartsWithDef() {
233233
)
234234
);
235235
}
236+
237+
@Test
238+
void typeParameterAsLocalVariableType() {
239+
rewriteRun(
240+
groovy(
241+
"""
242+
class TaskRunner<E> {
243+
void run() {
244+
E task = null
245+
}
246+
}
247+
"""
248+
)
249+
);
250+
}
251+
252+
@Test
253+
void typeParameterAsLocalVariableTypeFromMethodCall() {
254+
rewriteRun(
255+
groovy(
256+
"""
257+
class TaskRunner<E> {
258+
java.util.concurrent.BlockingQueue<E> queue
259+
void run() {
260+
E task = queue.take()
261+
}
262+
}
263+
"""
264+
)
265+
);
266+
}
236267
}

0 commit comments

Comments
 (0)