[ 
https://issues.apache.org/jira/browse/GROOVY-11389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17850947#comment-17850947
 ] 

paolo di tommaso commented on GROOVY-11389:
-------------------------------------------

If I'm fully understanding the problem comes by the fact the Delegate 
annotation provides an implementation for any method declared by the 
interface(s), then when running on a Java runtime prior to Java 21, the error 
is reported because the bridge method try to reference the interface "default" 
implementation that's not available. 

 

Maybe the Delegate annotation should not create a bridge method when the 
interface provides a "default" implementation by itself. This would keep the 
behaviour more consistent. 

> Groovy @Delegate issue with Java 21
> -----------------------------------
>
>                 Key: GROOVY-11389
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11389
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.21
>            Reporter: paolo di tommaso
>            Priority: Major
>
> Context: Java 21 introduces a new interface SequencedCollection
> as super-interface for `List` and other interfaces.
> This causes an issue in Groovy when the following conditions are met:
> 1. Using a `@Delegate List someAttribute` in a class
> 2. Compile with Java 21
> 3. Run with Java 20 or earlier the resulting app.
> *Replicate the issue*
>  
> 0. Clone this repository 
>    [https://github.com/pditommaso/groovy-java21-poc]
>  
> 1. Compile and run
>  
> {code:java}
> ./gradlew run {code}
> Output:
> {code:java}
> Runtime: Groovy 4.0.21 on OpenJDK 64-Bit Server VM 21.0.3+9-LTS
> Plain list sub-class: [1, 2, 3]
> Delegate list class : [1, 2, 3] {code}
> 2. Setup Java 11
> {code:java}
> sdk use java 11.0.14-zulu {code}
> 3. Run the app with Java 11
> {code:java}
> bash run.sh {code}
> Output:
> {code:java}
> Runtime: Groovy 4.0.21 on OpenJDK 64-Bit Server VM 11.0.14+9-LTS
> Plain list sub-class: [1, 2, 3]
> Exception in thread "main" java.lang.NoClassDefFoundError: 
> java/util/SequencedCollection
> at org.example.App.run(App.groovy:18)
> at org.example.App.main(App.groovy:22)
> Caused by: java.lang.ClassNotFoundException: java.util.SequencedCollection
> at 
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
> at 
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
> ... 2 more {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to