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)