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)

Reply via email to