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/11/22 19:57:00 UTC

[jira] [Comment Edited] (GROOVY-7950) AST transforms referencing properties on a class not detecting Trait-mixed in properties

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

Eric Milles edited comment on GROOVY-7950 at 11/22/22 7:56 PM:
---------------------------------------------------------------

The getter, setter and field are added by the time {{@TupleConstructor}} is applied, as noted above.  You can include the "pseudo" property like this:
{code:groovy}
trait T {
    String s1
}
@groovy.transform.TupleConstructor(includes='s1,s2', allProperties=true)
class C implements T {
    String s2
}
def obj = new C('x','y')
assert obj.s1 == 'x'
assert obj.s2 == 'y'
{code}


was (Author: emilles):
The getter, setter and field are added by the time {{@TupleConstructor}} is applied, as noted above.  You can include the "pseudo properties" like this:
{code:groovy}
trait T {
    String s1
}
@groovy.transform.TupleConstructor(includes='s1,s2', allProperties=true)
class C implements T {
    String s2
}
def obj = new C('x','y')
assert obj.s1 == 'x'
assert obj.s2 == 'y'
{code}

> AST transforms referencing properties on a class not detecting Trait-mixed in properties
> ----------------------------------------------------------------------------------------
>
>                 Key: GROOVY-7950
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7950
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.7
>            Reporter: Kamal Advani
>            Priority: Major
>              Labels: trait, traits
>
> I can't find anything about this in http://docs.groovy-lang.org/next/html/documentation/core-traits.html -- apologies if I missed it elsewhere. Also could not find a similar issue.
> I am applying a transform that references properties in a class, the transformed class also implements a trait with properties. It seems that the trait transform is applied last, such that the annotation-driven AST transforms don't see 'inherited/mixed in' trait properties.
> {code}
> import groovy.transform.*
> trait T {
>     String s1
> }
> @TupleConstructor(includes='s1, s2') // only a constructor for s2 created, same applies to @EqualsAndHashCode for example.
> // @Sortable(includes='s1, s2') //  Error during @Sortable processing: tried to include unknown property 's1'
> class Bar implements T {
>     String s2
> }
> {code}
> This http://docs.groovy-lang.org/next/html/documentation/core-traits.html#_compatibility_with_ast_transformations talks about applying transforms on a trait itself, but as per above, this isn't what I'm doing.
> Is this behaviour by design, or am I missing something obvious? 
> Thanks for your help.



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