[
https://issues.apache.org/jira/browse/GROOVY-12417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King updated GROOVY-12417:
-------------------------------
Fix Version/s: 7.x
> Support Flexible Constructor Bodies (JEP-513) Delivered in Java 25+
> -------------------------------------------------------------------
>
> Key: GROOVY-12417
> URL: https://issues.apache.org/jira/browse/GROOVY-12417
> Project: Groovy
> Issue Type: Improvement
> Components: Compiler
> Reporter: Matt Micheletti
> Priority: Major
> Fix For: 7.x
>
>
> h1. Summary
> Relatively recently, Java added support for allowing code before the
> obligatory `this(...)`/`super(...)` statements in constructors. Essentially,
> the JEP loosens the decades long restriction of _always_ forcing one of those
> aforementioned statements to be the mandatory very first statement. There may
> now be early constructor code that appears _before_ `this(...)`/`super(...)`
> albeit with some practical JLS limitations. This feature was fully accepted,
> delivered, and shipped as finalized in JDK 25.
> Groovy should continue aligning with supporting as much of Java syntax and
> semantics as possible. Subsequently, Groovy's internal handling of
> constructors should be enhanced to allow supporting JEP-513 rather than
> maintaining the previously held restriction.
> h1. Expected Behavior
> The following code should successfully compile and work as expected,
> intended, and/or desired as if it was written in Java.
> {code:java}
> class Child extends Parent
> {
> public Child(int age)
> {
> if (age <= 0)
> {
> throw new IllegalArgumentException(...);
> }
> super(age);
> //...
> }
> }{code}
>
> h1. Actual Behavior
> Currently, the Groovy compiler hard bakes in compliance checks to verify
> against the long standing restriction of enforcing constructors' special
> semantics around `this(...)`/`super(...)`.
> {code:java}
> class Child extends Parent
> {
> public Child(int age)
> {
> if (age <= 0) // Compiler error: "super (age) should be the first
> statement in the constructor[Child] @ line X, column Y."
> {
> throw new IllegalArgumentException(...);
> }
> super(age);
> //...
> }
> } {code}
> h6. Source/Attribution Credits:
> - [JEP-513 (Flexible Constructor Bodies)|https://openjdk.org/jeps/513]
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)