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

Paul King resolved GROOVY-12454.
--------------------------------
    Fix Version/s: 4.0.34
                   7.0.0-alpha-1
                   5.1.4
                   6.0.1
         Assignee: Paul King
       Resolution: Fixed

> "Target constructor for constructor call expression hasn't been set" when 
> using map-constructor-call with method-returned map under static compilation
> ------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-12454
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12454
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.5.23, 3.0.25, 5.0.3, 4.0.33, 5.1.3, 6.0.0
>            Reporter: Björn Kautler
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 4.0.34, 7.0.0-alpha-1, 5.1.4, 6.0.1
>
>
> Given the snippet
> {code:groovy}
> class Person2 {
>   def name
>   def age
> }
> def <T> T record(T value) {
>   value
> }
> Map recordMap(Map value) {
>   value
> }
> @groovy.transform.CompileStatic
> def foo() {
>   [
>     new Person2(record([name: 'fred', age: 25])),
>     new Person2([name: 'fred', age: 25]),
>     new Person2(recordMap([name: 'fred', age: 25]))
>   ]
> }
> foo() {code}
>  
> With the {{CompileStatic}} line commented out, all versions mentioned as 
> affected compile fine and run fine, returning a list with three identical 
> person instances with the properties set.
> With the snippet as given, none of the versions can compile the snippet due 
> to the first and last constructor lines.
> Except of 3.0.25 all versions tell for both lines "Target constructor for 
> constructor call expression hasn't been set".
> 3.0.25 shows the same for the first one, and "Cannot find matching method 
> Person2#<init>(java.util.Map). Please check if the declared type is correct 
> and if the method exists." for the last one.
> With {{TypeChecked}} instead of {{CompileStatic}} it also works fine in all 
> versions except 3.0.25. 3.0.25 with only type-checke can compile the first 
> line but still has the same error for the last line.z
>  
> So it seems the SC does not properly use the "map-constructor-call" semantics 
> if a normal or generic method call returned type {{{}Map{}}}, plus 3.0.25 
> having some additional problem.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to