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

Paul King closed GROOVY-8202.
-----------------------------

> 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
>             Fix For: 2.5.15, 4.0.0-beta-1, 3.0.9
>
>
> Consider this piece of code:
> {code:groovy}
> void f() {
> }
> @CompileStatic
> String test1() {
>       Closure<String> x = {
>               if (true) {
>                       "asd"
>               } else {
>                       f()
>                       null
>               }
>       }
>       x.call()
> }
> @CompileStatic
> String test2() {
>       Closure<String> x = { // Cannot assign Closure<Object> to 
> Closure<String>
>               if (true) {
>                       "asd"
>               } else {
>                       f()
>               }
>       }
>       x.call()
> }
> @CompileStatic
> String test3() {
>       if (true) {
>               "asd"
>       } else {
>               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.20.1#820001)

Reply via email to