[
https://issues.apache.org/jira/browse/GROOVY-10668?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17560932#comment-17560932
]
Alexsey Konstantinov commented on GROOVY-10668:
-----------------------------------------------
[~emilles] thanks.
Is it generally correct to implicitly cast a variable to a type in Groovy in an
if block with instanceof if the CompileStatic annotation is enabled? The
developer expects the compiler to behave unambiguously.
Therefore, in my code with CompileStatic, I always explicitly cast types
everywhere. It seems to me that implicit conversion to a type during static
compilation will always be sources of bugs.
> 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
> Fix For: 3.0.12
>
>
> 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.10#820010)