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)

Reply via email to