You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/07/23 16:32:00 UTC

[jira] [Updated] (GROOVY-10654) Cannot pass enum literal to ASTTransformationCustomizer

     [ https://issues.apache.org/jira/browse/GROOVY-10654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles updated GROOVY-10654:
---------------------------------
    Fix Version/s:     (was: 5.0.0-alpha-1)

> Cannot pass enum literal to ASTTransformationCustomizer
> -------------------------------------------------------
>
>                 Key: GROOVY-10654
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10654
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.3
>            Reporter: Martin Häusler
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: compilerconfiguration, scripting
>             Fix For: 2.5.18, 3.0.12, 4.0.4
>
>
> Please consider the following compiler configuration:
> {code:java}
> var config = new CompilerConfiguration();
> var extensions = new ArrayList<String>()
> var timedInterruptParams = new HashMap<String, Object>()
> // this works (value is a constant):
> timedInterruptParams.put("value", 100);
> // this does not work (value is an enum literal):
> timedInterruptParams.put("unit", TimeUnit.MILLISECONDS);
> config.addCompilationCustomizers(
>     new ASTTransformationCustomizer(timedInterruptParams, TimedInterrupt.class)
> );
> {code}
>  According to the documentation of ASTTransformationCustomizer, it should be possible to override any property from the annotation (TimedInterrupt in this case) by storing it into the parameters map (with the name of the annotation field as key). While this works nicely for numbers and strings, it currently doesn't seem to work for enum literals. When this configuration is used to compile a script, the compiler will throw a runtime exception where it claims that "TimeUnit.MILLISECONDS is not a valid constant". This should be adressed, as enum literals are perceived as constants by most developers.
>  
> The following line is a valid workaround for the time being:
> {code:java}
> timedInterruptParams.put("unit", propX(classX(TimeUnit.class), TimeUnit.MILLISECONDS.toString()), {code}
>  



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