Vladimir Sitnikov created GROOVY-11105:
------------------------------------------

             Summary: Support jdk-release option for configuring the target JDK 
release when doing the compilation
                 Key: GROOVY-11105
                 URL: https://issues.apache.org/jira/browse/GROOVY-11105
             Project: Groovy
          Issue Type: New Feature
          Components: Compiler
    Affects Versions: 4.0.12
            Reporter: Vladimir Sitnikov


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}
import java.nio.ByteBuffer;

ByteBuffer bb = new ByteBuffer();
// 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();
{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)

Reply via email to