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

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

Thanks for looking into this. You are right using `@Delegate(excludes = 
['reversed'])` it can be compiled on Java 21 and run on Java 11. 

 

> Having said that, I am not sure whether copying over a synthetic bridge 
> method is a bug or feature

 

Interesting point. But I'm not getting why you say "If the bridge method wasn't 
copied, .. you'd still get NoSuchMethodError" 

It would not be same as using an explicit `excludes = 'reversed'` as above? 

> 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