[
https://issues.apache.org/jira/browse/GROOVY-11973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18077210#comment-18077210
]
ASF GitHub Bot commented on GROOVY-11973:
-----------------------------------------
paulk-asert merged PR #2501:
URL: https://github.com/apache/groovy/pull/2501
> Allow ASTTransformationCustomizer to support annotations with multiple AST
> transforms (e.g. @Sealed, @RecordBase) and @AnnotationCollector aliases (e.g.
> @AutoExternalize) via a new forAnnotation factory method
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: GROOVY-11973
> URL: https://issues.apache.org/jira/browse/GROOVY-11973
> Project: Groovy
> Issue Type: New Feature
> Reporter: Paul King
> Assignee: Paul King
> Priority: Major
>
> ASTTransformationCustomizer currently throws "AST transformation customizer
> doesn't support AST transforms with multiple classes" when given an
> annotation whose @GroovyASTTransformationClass lists more than one transform
> (e.g. @Sealed, @RecordBase). It also rejects @AnnotationCollector aliases
> such as @AutoExternalize with "Provided class doesn't look like an AST
> @interface", since those annotations carry @AnnotationCollector rather than
> @GroovyASTTransformationClass.
> This enhancement adds a static factory method,
> ASTTransformationCustomizer.forAnnotation(...), that returns a list of
> customizer instances - one per resolved transform class - so each runs at its
> own declared compile phase. The factory also recognises @AnnotationCollector
> and recursively expands it to the underlying annotations, flattening nested
> collectors.
> Typical usage:
> {code:groovy}
> config.addCompilationCustomizers(*ASTTransformationCustomizer.forAnnotation(Sealed))
> config.addCompilationCustomizers(*ASTTransformationCustomizer.forAnnotation(AutoExternalize))
> {code}
> Overloads accept an optional annotation-parameters map and a custom
> ClassLoader, mirroring the existing constructors. The legacy single-class
> constructors are unchanged for backward compatibility; their error message
> now points users at forAnnotation.
> A small companion fix in SealedCompletionASTTransformation makes it usable
> from the customizer: it now uses the AnnotationNode passed in via nodes[0]
> rather than re-fetching it from the class node (which the customizer does not
> attach), and skips emitting an empty permittedSubclasses member when no
> subclasses are detected.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)