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

Eric Milles commented on GROOVY-10758:
--------------------------------------

You can do the long form of creating a new ClassNode and calling 
setRedirect(ClassNode) and so forth.  getPlainNodeReference handles arrays and 
primitives and ...  GenericsUtils.newClass tries to demistify the name.  I'm 
just very used to calling getPlainNodeReference() directly.  And 
GenericsUtils.makeClassSafe0 (though poorly named) combines the next logical 
step of setting the type arguments.

Not sure if there are any guides out there for this, but when you get into AST 
transforms, one tends to use AstBuilder/macros or learns to wrestle with the 
AST API which was designed with the parser in mind (more or less).

> Improve error message when using generic ClassNodes in ASTT
> -----------------------------------------------------------
>
>                 Key: GROOVY-10758
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10758
>             Project: Groovy
>          Issue Type: Improvement
>          Components: Compiler
>    Affects Versions: 4.0.5
>            Reporter: Christopher Smith
>            Priority: Minor
>
> When mistakenly using a shared instance of a {{ClassNode}} that has generics 
> applied, the compiler (helpfully!) produces this error:
> {code}
> transform used a generics containing ClassNode 
> com.example.Resource<com.example.FooAttributes> for the super class 
> com.example.FooResource directly. You are not supposed to do this. Please 
> create a new ClassNode referring to the old ClassNode and use the new 
> ClassNode instead of the old one. Otherwise the compiler will create wrong 
> descriptors and a potential NullPointerException in TypeResolver in the 
> OpenJDK. If this is not your own doing, please report this bug to the writer 
> of the transform.
> {code}
> However, there is no explanation of *how* to create the "new ClassNode", and 
> [I couldn't find anything in the API that made the error go 
> away|https://stackoverflow.com/questions/73749765/how-do-i-subclass-a-generic-base-class-in-a-groovy-ast-transformation].
>  It would be helpful to ASTT neophytes if the error message specified the 
> method call(s) suitable for this operation.



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

Reply via email to