[
https://issues.apache.org/jira/browse/GROOVY-11105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles updated GROOVY-11105:
---------------------------------
Language: groovy
> Support jdk-release option for configuring the target JDK release for
> @CompileStatic compilations
> -------------------------------------------------------------------------------------------------
>
> Key: GROOVY-11105
> URL: https://issues.apache.org/jira/browse/GROOVY-11105
> Project: Groovy
> Issue Type: New Feature
> Components: Compiler
> Reporter: Vladimir Sitnikov
> Priority: Major
>
> See the motivation and description in Kotlin:
> [https://youtrack.jetbrains.com/issue/KT-29974/Add-a-compiler-option-Xjdk-release-similar-to-javacs-release-to-control-the-target-JDK-version]
>
> Sample code that requires {{jdk-release}} option for a proper compilation,
> and it could not be solved with "target bytecode version" alone.
> {code:java}
> @groovy.transform.CompileStatic test() {
> def bb = java.nio.ByteBuffer.wrap(new byte[8])
> // it should compile to invokevirtual Buffer.flip()Ljava.nio.Buffer;
> // when compiling for Java 1.8 since Java 1.8 does not have ByteBuffer
> flip() override in ByteBuffer
> // However, if the build uses JDK17 for execution, then it contains
> ByteBuffer flip() override,
> // and Groovy would compile it to invokevirtual
> ByteBuffer.flip()Ljava.nio.ByteBuffer
> // which would fail to execute in Java 1.8
> bb.flip()
> }
> test()
> {code}
> See https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/
> See https://stackoverflow.com/a/61267496/1261287
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)