[
https://issues.apache.org/jira/browse/GROOVY-12309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18110281#comment-18110281
]
ASF GitHub Bot commented on GROOVY-12309:
-----------------------------------------
blackdrag opened a new pull request, #2851:
URL: https://github.com/apache/groovy/pull/2851
Avoid generating a direct call(Object[]) override for a statically compiled
closure with an Object[] parameter. The override collides with
Closure.call(Object...) and allows Closure.call(Object) to wrap the argument
array before dispatch.
Add a regression test for calling such a closure with an Object[] argument.
Assisted-by: Hermes Agent (Nous Research)
> Closure calls with Object[] parameter under static compilation get the wrong
> argument
> -------------------------------------------------------------------------------------
>
> Key: GROOVY-12309
> URL: https://issues.apache.org/jira/browse/GROOVY-12309
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 6.0.0-alpha-1, 5.0.3, 4.0.31
> Reporter: Björn Kautler
> Priority: Major
>
> With
> {code:java}
> class Foo {
> def foo() {
> { Object[] foo -> println(foo) }.call(new Object[] { 'foo' })
> }
> }
> new Foo().foo() {code}
> you get {{[foo]}} printed.
> Adding {{@groovy.transform.CompileStatic}} it prints {{{}[[foo]]{}}}.
> Removing the {{Object[]}} with added static-compilation it again prints
> {{{}[foo]{}}}.
> The closure under static compilation should get the same parameter and not
> wrapped in another {{{}Object[]{}}}.
> This is caused by the {{call}} / {{doCall}} methods generated for the closure.
> The {{call}} call where it happens in production is a precompiled Java code
> that gives the same argument in either case.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)