You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2016/06/19 07:29:05 UTC

[jira] [Commented] (GROOVY-7868) Calling super constructor with in-line casted Closure param does not compile: unexpected "constructor call must be first statement" error

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

Paul King commented on GROOVY-7868:
-----------------------------------

Looks like the {{argList}} production in the grammar isn't quite right. It is probably getting the '>>' confused as a shiftRight operator. Workarounds are to add a space between the two greater than signs (ugly I know), e.g.:
{code}
{ } as BiConsumer<String, Collection<String> >,
...
{code}
or place the whole argument within braces:
{code}
({ } as BiConsumer<String, Collection<String>>),
...
{code}


> Calling super constructor with in-line casted Closure param does not compile: unexpected "constructor call must be first statement" error
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-7868
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7868
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 2.4.6
>         Environment: Linux Mint 17.3
>            Reporter: Jordan Martinez
>            Priority: Minor
>
> Running the following code in Groovy Console should result "successfully" with "Could not find matching constructor for 'SomeObject'"
> Instead, code fails with issue "Constructor call must be the first statement in a constructor," which is weird because it is...
> Code only runs correctly (e.g. fails in the expected way) in 5 cases:
> * "{} as BiConsumer" line in the super constructor is commented out
> * all arguments past Closure-cast line must be commented out 
> * Closure is cast to a different object (say String)
> * the second "Collections.emptyList()" is changed to a different type (say String) but the third remains the same
> * The BiConsumer's second generic type (Collection<String>) is changed to a different type (say String)
> {code}
> import java.util.function.BiConsumer
> public class ProblematicObject extends SomeObject {
>     public ProblematicObject() {
>         super(
>             { } as BiConsumer<String, Collection<String>>, 
>             
>             Collections.emptyList(),
>             Collections.emptyList()
>         )
>     }
>     
> }
> new ProblematicObject()
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)