[ https://issues.apache.org/jira/browse/GROOVY-5502?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-5502: -------------------------------- Description: Suppose we have the following code: {code} class A { void m() { } } class B extends A { } class C extends A { } @groovy.transform.TypeChecked class Test { void m() { def var = new Object() //If instead I put just "def var" it works as spected if (true) { var = new B() } else { var = new C() } var.m() //fails here } } {code} In this case, after the if/else structure we can infer that var is instanceOf A. But, the initialization seems to confuse the type inference. [Static type checking] - Cannot find matching method java.lang.Object#mA() at line: 23, column: 7 If instead of {code}def var = new Object(){code} we put just {code}def var{code}, then the inference works fine. was: Suppose we have the following code: {code} class A { void mA() { } } class B extends A { } class C extends A { } @groovy.transform.CompileStatic class Test { void m() { def var = new Object() //If instead I put just "def var" it works as spected if (true) { var = new B() } else { var = new C() } var.mA() //fails here } } {code} In this case, after the if/else structure we can infer that var is instanceOf A. But, the initialization seems to confuse the type inference. [Static type checking] - Cannot find matching method java.lang.Object#mA() at line: 23, column: 7 If instead of {code}def var = new Object(){code} we put just {code}def var{code}, then the inference works fine. > If/else branch does not always infer the variable type > ------------------------------------------------------ > > Key: GROOVY-5502 > URL: https://issues.apache.org/jira/browse/GROOVY-5502 > Project: Groovy > Issue Type: Improvement > Components: Static Type Checker > Reporter: Ariel Morelli Andres > Priority: Minor > > Suppose we have the following code: > {code} > class A { > void m() { > } > } > class B extends A { > } > class C extends A { > } > @groovy.transform.TypeChecked > class Test { > void m() { > def var = new Object() //If instead I put just "def var" it works as > spected > if (true) { > var = new B() > } > else { > var = new C() > } > var.m() //fails here > } > } > {code} > In this case, after the if/else structure we can infer that var is instanceOf > A. > But, the initialization seems to confuse the type inference. > [Static type checking] - Cannot find matching method java.lang.Object#mA() > at line: 23, column: 7 > If instead of {code}def var = new Object(){code} we put just {code}def > var{code}, then the inference works fine. -- This message was sent by Atlassian Jira (v8.3.4#803005)