[ https://issues.apache.org/jira/browse/GROOVY-10758?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17606646#comment-17606646 ]
Christopher Smith commented on GROOVY-10758: -------------------------------------------- {{Resource}} is a Java class in a precompiled dependency jar. I was assembling {{FooResource}} "by hand", approximately this (I've been tweaking as I go along): {code} ClassHelper.makeWithoutCaching(fqcn).tap { modifiers |= PUBLIC | FINAL superClass = makeWithoutCaching(resourceBaseClass).tap { genericsTypes = [attr] as GenericsType } // add annotations and methods } {code} As the Javadoc on {{ClassNode}} says "A ClassNode should be created using the methods in ClassHelper", I had naively expected that "make without caching" (because that's what we do for {{Map}}) meant "get a new instance so I can customize the generics on it". I eventually found the methods in {{GenericsUtils}} after your tips on Stack Overflow, but {{makeClassSafeWithGenerics}} is a rather unenlightening method name and carries no Javadoc. > 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)