groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jordan Martinez (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (GROOVY-7868) Calling super constructor with in-line casted Closure param does not compile: unexpected "constructor call must be first statement" error
Date Sun, 19 Jun 2016 23:10:06 GMT

     [ https://issues.apache.org/jira/browse/GROOVY-7868?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jordan Martinez updated GROOVY-7868:
------------------------------------
    Description: 
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 first "Collections.emptyList()" is changed to a different type (say String) but the
second 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}


  was:
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}



> 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 first "Collections.emptyList()" is changed to a different type (say String) but
the second 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)

Mime
View raw message