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]

Reply via email to