You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/06/27 17:23:00 UTC

[jira] [Commented] (GROOVY-10668) Reference to method is ambiguous if block in "if" with "instanceof"

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

Eric Milles commented on GROOVY-10668:
--------------------------------------

You can add a typecast under the dual {{instanceof}} to resolve the ambiguity:
{code:groovy}
...
else if (value instanceof String || value instanceof GString)
    res = ((CharSequence)value).toString().split(',')
...
{code}

Otherwise, there are 2 competing PRs to solve this issue:
https://github.com/apache/groovy/pull/1269
https://github.com/apache/groovy/pull/1293

> 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)