[
https://issues.apache.org/jira/browse/GROOVY-12655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18139937#comment-18139937
]
ASF GitHub Bot commented on GROOVY-12655:
-----------------------------------------
testlens-app[bot] commented on PR #3176:
URL: https://github.com/apache/groovy/pull/3176#issuecomment-6695965744
## ✅ All tests passed ✅
🏷️ Commit: b44d836ccca570d13587983ca7f243f3dc5618ba
▶️ Tests: 71998 executed
⚪️ Checks: 26/26 completed
---
_Learn more about TestLens at
[testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
> Closure packing packs a closure stored to a script binding variable or
> dynamic property, which then rejects a delegate
> ----------------------------------------------------------------------------------------------------------------------
>
> Key: GROOVY-12655
> URL: https://issues.apache.org/jira/browse/GROOVY-12655
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 6.0.0
> Reporter: Scott Murphy Heiberg
> Priority: Major
>
> {code:groovy}
> @groovy.transform.PackedClosures
> def install() { handler = { x -> x + 1 } }
> install()
> handler.delegate = 'd'
> handler(1)
> {code}
> *Actual:* {{java.lang.UnsupportedOperationException: Cannot set a delegate on
> a @PackedClosures closure (hoisted method '$packed$closure$0') ...}}
> *Expected:* the closure is not packed, because it escapes into the script
> binding, and the script returns 2 as it does without the annotation.
> The same happens when a method of an annotated class stores to an undeclared
> name (a dynamic property, e.g. one taken by {{propertyMissing}}) and when a
> script method stores to an {{@Field}}. With
> {{-Dgroovy.target.closure.pack=true}}, a binding store in a script's run
> method is packed too, and so is one in {{@CompileStatic}} code whose type
> checking extension makes the variable dynamic.
> Cause: the escape gate in {{ClosureWriter}} ({{isLocalTarget}}) treats any
> assignment target that is not a field or property node as a local, including
> a {{DynamicVariable}}, which is stored through the MOP where code outside the
> method can read it.
> Verified on 6.0.0 and master.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)