[
https://issues.apache.org/jira/browse/GROOVY-11721?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18016523#comment-18016523
]
Bartosz Popiela commented on GROOVY-11721:
------------------------------------------
Hi Guys, sorry for the delayed response.
I came up with
[this|https://gist.github.com/bartoszpop/995e3d1ab6ace7692eadcf9888d757e0] AST
transformation which adds _@Field_ to all _DeclarationExpressions_ implicitely.
I inject this transformation using
[SPI|https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/ServiceLoader.html]
and it works fine. However, IDEs complain because this is a custom
transformation. Introducing this feature natively into Groovy will also cause
IDEs to add support for it as well. I think it’s quite common for all variables
to be annotated with {_}@Field{_}, so having native support could eliminate a
lot of boilerplate.
!image-2025-08-27-14-08-33-523.png!
> @groovy.transform.Field to annotate a script class
> --------------------------------------------------
>
> Key: GROOVY-11721
> URL: https://issues.apache.org/jira/browse/GROOVY-11721
> Project: Groovy
> Issue Type: New Feature
> Affects Versions: 5.0.0-beta-2
> Reporter: Bartosz Popiela
> Priority: Major
> Attachments: image-2025-08-27-14-08-33-523.png
>
>
> We use undeclared Groovy Scripts together with JUnit for writing unit tests
> because it supports sentences as method names and doesn’t impose restrictions
> on the file name (we need the test script name to match the name of the YAML
> file being tested). This solution works very well; the only downside is that
> in order to use annotations on a field, such as [email protected]_, we
> also need to use [email protected]_, since those annotations typically
> don’t have target = LOCAL_VARIABLE. It would be convenient if _@Field_ could
> be placed on the script class (with _@Inherited_ to support a base script)
> and be automatically applied to all local variables in the script
--
This message was sent by Atlassian Jira
(v8.20.10#820010)