[ 
https://issues.apache.org/jira/browse/GROOVY-8202?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Milles reassigned GROOVY-8202:
-----------------------------------

    Assignee: Eric Milles

> void tail calls in closures break @CompileStatic type inference
> ---------------------------------------------------------------
>
>                 Key: GROOVY-8202
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8202
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.4.10
>            Reporter: Joan Karadimov
>            Assignee: Eric Milles
>            Priority: Minor
>
> Consider this piece of code:
> {code:java}
> class Example {
>       @CompileStatic
>       static void test1() {
>               Closure<String> x = {
>                       if (true) {
>                               "asd"
>                       } else {
>                               f()
>                               null
>                       }
>               }
>       }
>       @CompileStatic
>       static void test2() {
>               Closure<String> x = { // [Static type checking] - Incompatible 
> generic argument types. Cannot assign groovy.lang.Closure <java.lang.Object> 
> to: groovy.lang.Closure <String>
>                       if (true) {
>                               "asd"
>                       } else {
>                               f()
>                       }
>               }
>       }
>       @CompileStatic
>       static String test3() {
>               if (true) {
>                       "asd"
>               } else {
>                       f()
>               }
>       }
>       @CompileStatic
>       static void f() {
>       }
> }
> {code}
> The code in _*test1*_ compiles correctly. The type of the closure in 
> _*test2*_ is inferred as _*Closure<Object>*_ and that results in a static 
> type checking error. There is an inconsistency here - in _*test3*_ the type 
> inference yields _*String*_.
> Basically - _*null*_ s are not considered when the type is inferred. Calls to 
> void methods should not be either.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to