[ 
https://issues.apache.org/jira/browse/GROOVY-9554?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul King resolved GROOVY-9554.
-------------------------------
    Fix Version/s: 2.5.13
                   3.0.5
                   4.0.0-alpha-1
       Resolution: Fixed

Proposed PR merged. Thanks everyone!

At the moment, for 2.4.x you need to rely on the workarounds Eric mentioned. We 
don't have plans for another 2.4 release unless an urgent security fix is 
required or a very bad bug is discovered.

> @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
>             Fix For: 4.0.0-alpha-1, 3.0.5, 2.5.13
>
>          Time Spent: 40m
>  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)

Reply via email to