You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Martin Häusler (Jira)" <ji...@apache.org> on 2022/06/09 17:11:00 UTC

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

Martin Häusler created GROOVY-10654:
---------------------------------------

             Summary: 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


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.7#820007)