[
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)