[
https://issues.apache.org/jira/browse/GROOVY-9554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17135266#comment-17135266
]
Eric Milles commented on GROOVY-9554:
-------------------------------------
A bit of info that may help you right away: {{@Field}} does generate a public
setter for non-final fields. So you can call "setAbc(...)" within your
closure. You could also use "this.@abc" in your closure to target the
"attribute", which often resolves to a field.
Also, if the PR is accepted and you want to bypass a script field and read or
write from binding, you can add the "binding." qualifier to any variable.
> @Field variable access within closures broken
> ---------------------------------------------
>
> Key: GROOVY-9554
> URL: https://issues.apache.org/jira/browse/GROOVY-9554
> Project: Groovy
> Issue Type: Bug
> Components: Compiler
> Affects Versions: 2.4.15, 3.0.3
> Reporter: Jochen Eddelbuettel
> Assignee: Eric Milles
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
>
> {code:java}
> @groovy.transform.Field String abc
> binding.variables.clear()
> abc = "abc"
> println binding.hasVariable("abc")
> ["D","E","F"].each { abc += it }
> println binding.getVariable("abc")
> assert abc == "abcDEF"
> {code}
> If a variable is declared using the @Field annotation, it can be assigned to
> in the main script body, but any assignment inside a closure (here the
> closure used with each) ends up in the script binding instead. Assignments
> within regular methods work fine, too. If the variables is accessed inside
> the closure and it is not in the binding, then the value will come from the
> field. As soon as it is in the binding, the binding variable takes precedence
> over the field. In both cases the field declared with @Field needs to have
> precedence over anything that is in the binding, just like local variables do.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)