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

Christopher Smith commented on GROOVY-10000:
--------------------------------------------

I'm not sure I'm understanding your comment as you intended.

> 9.3.1 The initializer need not be a constant expression (ยง15.28).

> Traits should be able to hold constants
> ---------------------------------------
>
>                 Key: GROOVY-10000
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10000
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Compiler
>            Reporter: Christopher Smith
>            Priority: Major
>              Labels: trait, traits
>
> I can define constants on plain old interfaces; since they're implicitly 
> {{public static final}}, just {{String PREFIX = 'asdf_'}} will get the job 
> done.
> However, in a trait, while I can declare a constant and use it within the 
> trait, I can't access that constant from outside the trait. Instead, I get 
> this error (in static mode for better message; dynamic mode generates 
> bytecode demonstrating the same semantic error):
> {code:groovy}
> trait MyTrait {
>   public static final String PREFIX = 'foo'
> }
> {code}
> {code:groovy}
> // in another class
> doStuff(MyTrait.PREFIX, data)
> {code}
> {code}
> [Static type checking] - No such property: PREFIX for class: java.lang.Class 
> <com.example.MyTrait>
> {code}
> The compiler seems to be treating what should be a distinct symbol 
> {{MyTrait.PREFIX}} as a property access on the class {{MyTrait}}. I expected 
> the {{PREFIX}} constant to be copied to the generated interface {{.class}} 
> file and available as it would be on an interface. Instead, it appears that 
> it's being put into the {{$Trait$Helper.class}} file. Perhaps the trait AST 
> needs a special rule to recognize constants and route them suitably?



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

Reply via email to