[ 
https://issues.apache.org/jira/browse/GROOVY-9692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17180114#comment-17180114
 ] 

Paul King edited comment on GROOVY-9692 at 8/18/20, 9:46 PM:
-------------------------------------------------------------

Yes, this is a regression. I haven't looked into the grammar yet to see if this 
was done for a reason.

Looking at the AST tree for 2.5 we see the list being the receiver and the 
method being "call":

!image-2020-08-19-07-38-38-768.png!

I checked 2.5.10, 2.5.12, 2.5.13.

Looking at the same tree for 3 we see {{this}} being the receiver and the list 
expression has been assigned to the method which seems a little strange:

!image-2020-08-19-07-40-33-584.png!

I checked back to 3.0.0-beta-1.

I was using the following as my test case:
{code:java}
class CustomExtension {
    static String call(ArrayList header, Closure code) {
        header.join(":") + " " + code()
    }
}

use(CustomExtension) {
    assert [1, 2, 3] { "world" } == '1:2:3 world'
}
{code}


was (Author: paulk):
Yes, this is a regression. I haven't looked into the grammar yet to see if this 
was done for a reason.

Looking at the AST tree for 2.5 we see the list being the receiver and the 
method being "call":

!image-2020-08-19-07-38-38-768.png!

I checked 2.5.10, 2.5.12, 2.5.13.

Looking at the same tree for 3 we see {{this}} being the receiver and the list 
expression has been assigned to the method which seems a little strange:

!image-2020-08-19-07-40-33-584.png!

I checked back to 3.0.0-beta-1.

> Adding extension method 'call' on ArrayList with Closure as a parameter 
> stopped working in 3.0.x
> ------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9692
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9692
>             Project: Groovy
>          Issue Type: Bug
>          Components: parser
>    Affects Versions: 3.0.5
>            Reporter: Mykola Golubyev
>            Priority: Major
>         Attachments: groovy3-call-regression.zip, 
> image-2020-08-19-07-38-38-768.png, image-2020-08-19-07-40-33-584.png
>
>
> Custom extension like this
> {code:java}
> class CustomExtension {
>     static MyData call(ArrayList header, Closure code) {
>         new MyData(data: header.join(":") + " " + code())
>     }
>     static MyData test(ArrayList header, Closure code) {
>         new MyData(data: header.join(":") + " " + code())
>     }
> }
> {code}
> used to work with Groovy 2.5.12
> {code:java}
> class CustomExtensionTest {
>     @Test
>     void "implicit call on array with closure used to work"() {
>         def result = [1, 2, 3] {
>             "world"
>         }
>         assert result.data == '1:2:3 world'
>     }
>     @Test
>     void "explicit call on array with closure still works"() {
>         def result = [1, 2, 3].test {
>             "world"
>         }
>         assert result.data == '1:2:3 world'
>     }
> }
> {code}
> with Groovy 3.0.x I get this error instead 
> {code:java}
> groovy.lang.MissingMethodException: No signature of method: 
> regression.CustomExtensionTest.[1, 2, 3]() is applicable for argument types: 
> (regression.CustomExtensionTest$_call_on_array_with_closure_used_to_work_closure1)
>  values: 
> [regression.CustomExtensionTest$_call_on_array_with_closure_used_to_work_closure1@8b87145]
> {code}
> Is this intentional?
> I have attached a maven project to reproduce.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to