Daniil Ovchinnikov created GROOVY-9346:
------------------------------------------
Summary: Closure shared variable type is polluted with previous
assignment type
Key: GROOVY-9346
URL: https://issues.apache.org/jira/browse/GROOVY-9346
Project: Groovy
Issue Type: Bug
Components: Static Type Checker
Affects Versions: 2.5.8
Reporter: Daniil Ovchinnikov
{code:java}
class A { def foo() {42} }
@groovy.transform.CompileStatic
def cs() {
def var
var = "hi" // commenting this line fixes the issue
var = new A()
def c = {
var = new A()
}
c()
var.foo() // [Static type checking] - A closure shared variable [var] has
been assigned with various types and the method [foo()] does not exist in the
lowest upper bound of those types: [java.lang.Object]. In general, this is a
bad practice (variable reuse) because the compiler cannot determine safely what
is the type of the variable at the moment of the call in a multithreaded
context.
}
assert cs() == 42
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)