Onni Koskinen created GROOVY-10902:
--------------------------------------
Summary: Dynamic constants for primitive types get default value
in Java
Key: GROOVY-10902
URL: https://issues.apache.org/jira/browse/GROOVY-10902
Project: Groovy
Issue Type: Bug
Components: Stub generator / Joint compiler
Affects Versions: 4.0.7, 3.0.14
Reporter: Onni Koskinen
If we define a constant that is resolved during runtime in a Groovy class and
reference it in a Java class, it's value gets a static default value in the
Java class. This seems to be a regression in Groovy 3.0.10 as earlier versions
don't have the problem. Also affects all 4.0.x versions that I tested.
Example:
{code:groovy}
// G.groovy
class G {
public static final int DYNAMIC_CONSTANT = (9.9).intValue()
} {code}
{code:java}
// J.java
public class J {
public static void main(String[] args) {
System.out.println(G.DYNAMIC_CONSTANT);
}
} {code}
*Groovy 4.0.7*
Prints 0 with the following bytecode for J#main
{code:java}
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: iconst_0
4: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
7: return{code}
*Groovy 3.0.9*
Correctly prints 9 with the following bytecode:
{code:java}
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: getstatic #3 // Field G.DYNAMIC_CONSTANT:I
6: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
9: return {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)