Description
I've noticed difference in how maps behave when used as delegates between 2.5.12 (and earlier versions) and 2.5.13. Consider this code snippet:
class MapAsDelegateProblem { static void main(String[] args) { new MapAsDelegateProblem().problematicCode() } def problematicCode() { def map = [:] callForAProblem(map) { assert "abc" == BAR } } def <U> void callForAProblem(U target, Closure<?> closure) { closure.setDelegate(target) closure.setResolveStrategy(Closure.DELEGATE_FIRST) closure.call(target) } private static final BAR = "abc" }
In 2.5.x (up to 2.5.12) this code works just fine. Static field BAR is accessed from closure in line 10. But this breaks in 2.5.13. This affects also tests written in Spock. Utility method spock.lang.Specification::with works in the same way as callForAProblem.
Attachments
Issue Links
- is cloned by
-
GROOVY-9768 Changed behavior of delegates in 4.0.0
- Closed
- relates to
-
GROOVY-11056 modified behavior of variable resolution within Closure
- Closed