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

Alexsey Konstantinov commented on GROOVY-10668:
-----------------------------------------------

Thanks to Eric Milles for the workaround, but there are dozens of places in my 
projects using the same logic for converting different types of objects that 
worked previously on all versions of Groovy. This is bad news for me.

P.S. It is not clear to me why it is necessary to cast the "value" variable to 
"CharSequence" if I initially set it in a parameter with a Java Object type and 
this class has a "toString()" method. It turns out that when using "instanceof" 
in the "if" block, the compiler tries to immediately cast the variable to the 
specified type. But I didn’t need such behavior, and at the level of 
compatibility of the logic code with Java, in this case it should compile 
correctly. Isn't it true?

> Reference to method is ambiguous if block in "if" with "instanceof"
> -------------------------------------------------------------------
>
>                 Key: GROOVY-10668
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10668
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 3.0.11
>            Reporter: Alexsey Konstantinov
>            Assignee: Eric Milles
>            Priority: Blocker
>
> In version 3.0.10 normally the following code worked fine:
> {noformat}
> import groovy.transform.CompileStatic
> @CompileStatic
> class Test {
>   def toArray(Object value) {
>     def res
>     if (value instanceof List)
>       res = (value as List).toArray()
>     else if (value instanceof String || value instanceof GString)
>       res = value.toString().split(',')
>     else
>       throw new Exception("Not support!")
>     return res
>   }
> }
> println new Test().toArray([1,2,3])
> println new Test().toArray('1,2,3'){noformat}
> {{In version 3.0.11, the code does not compile with the following error:}}
>  
> {noformat}
> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
> failed:
> ideaGroovyConsole.groovy: 10: [Static type checking] - Reference to method is 
> ambiguous. Cannot choose between [java.lang.String 
> java.lang.String#toString(), java.lang.String groovy.lang.GString#toString()]
>  @ line 10, column 33.
>                res = value.toString().split(',')
>                                    ^
> ideaGroovyConsole.groovy: 10: [Static type checking] - Cannot find matching 
> method java.lang.Object#split(java.lang.String). Please check if the declared 
> type is correct and if the method exists.
>  @ line 10, column 19.
>                res = value.toString().split(',')
>                      ^
> {noformat}
> If you remove _value instanceof GString_ from "if", then the code compiles 
> and runs.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to