[
https://issues.apache.org/jira/browse/GROOVY-9554?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17125272#comment-17125272
]
Eric Milles commented on GROOVY-9554:
-------------------------------------
{{{{groovy.lang.Script#setProperty}} could check for a field before adding a
property to the binding. You could experiment with this in your script by
overriding setProperty(String,Object).}}
> @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
> Priority: Major
>
>
> {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)