ayoube-ait opened a new pull request, #2362:
URL: https://github.com/apache/groovy/pull/2362
## GROOVY-11831: Fix TYPE_USE annotation crash on void method return type
### Summary
Fixes a compiler crash when an annotation without explicit `@Target`
(which defaults to all targets including `TYPE_USE`) is added to a void method
by an AST transformation.
### Error Message
BUG! exception in phase 'class generation' in source unit '...'
Adding type annotation @MyAnnotation to non-redirect node: void
### Root Cause
In `ExtendedVerifier.extractTypeUseAnnotations()`, when processing
TYPE_USE annotations on a void method, the code attempts to call
`addTypeAnnotations()` on the void return type. Since `void` is a non-redirect
node, this crashes.
### Fix
Added a guard to skip `addTypeAnnotations()` for void methods only:
```java
boolean isVoidMethod = (keepTarget == METHOD_TARGET &&
isPrimitiveVoid(targetType));
if (!isVoidMethod) {
// ... add type annotations
}
The fix specifically targets void methods, not constructors (which also
have void return type internally but are handled differently via GROOVY-10937).
```
### Testing
A unit test is not included because the bug only triggers when:
1. The annotation is pre-compiled in a separate JAR (not defined inline)
2. An AST transformation adds that annotation to a void method
Groovy's test framework compiles everything in one stage, making it
impossible to reproduce this scenario in a single test.
Manual verification: The fix is verified with a standalone reproduction
project:
https://github.com/ayoube-ait/groovy-bug-repro
### Impact
This bug affects Micronaut Framework's Groovy support. The @Internal
annotation in micronaut-core has no explicit @Target and is used in AST
transformations that generate void methods, preventing Groovy scripts from
compiling with Micronaut 5 and Groovy 5.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]