[ 
https://issues.apache.org/jira/browse/GROOVY-9530?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17945865#comment-17945865
 ] 

Eric Milles edited comment on GROOVY-9530 at 4/19/25 2:27 PM:
--------------------------------------------------------------

This is the line in question: 
https://github.com/apache/groovy/blob/ed6ee9bc203f236f437af71bea34d8e6f22665b9/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java#L282

The loaded class has its static field read at compile time.

If removed then items like this (Closure.DELEGATE_FIRST) fail to compile: 
https://github.com/apache/groovy/blob/ed6ee9bc203f236f437af71bea34d8e6f22665b9/src/main/groovy/groovy/util/FileTreeBuilder.groovy#L124


was (Author: emilles):
This is the line in question: 
https://github.com/apache/groovy/blob/ed6ee9bc203f236f437af71bea34d8e6f22665b9/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java#L282

The loaded class has its static field read at compile time.

> Groovy compiler inlines constants from precompiled classes when it's not safe 
> to do so
> --------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9530
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9530
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 3.0.3, 2.5.11
>            Reporter: Marcin Erdmann
>            Assignee: Eric Milles
>            Priority: Major
>
> When a constant (a {{static final}} field) from a precompiled class (a class 
> which is on compilation classpath) is referenced from a declaration of a 
> {{static final}} field in a class which is being compiled the compiler will 
> load and initialise the precompiled class during compilation and inline the 
> value of the referenced constant even if it is not safe to do so, like for 
> example if the value of the constant depends on the contents of the classpath 
> at runtime.
> The issue does not happen in Groovy 2.4.19 but happens in 2.5.11 and 3.0.3
> The following project exposes the issue: 
> https://github.com/erdi/groovy-constant-inlining-bug. If you run {{./gradlew 
> :test}} which uses Groovy 2.4.19 it will pass but it will fail if you run 
> {{./gradlew :testGroovy2_5}} or {{./gradlew testGroovy3_0}}.
> I believe the problem lies in 
> {{org.apache.groovy.ast.tools.ExpressionUtils#transformInlineConstants(org.codehaus.groovy.ast.expr.Expression,
>  org.codehaus.groovy.ast.ClassNode)}} when handling property expressions on 
> non primary class nodes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to