You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Daniel Sun (Jira)" <ji...@apache.org> on 2020/01/22 17:08:00 UTC

[jira] [Resolved] (GROOVY-9370) Type inference regression with anonymous class and nested closure type coersion to SAM

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

Daniel Sun resolved GROOVY-9370.
--------------------------------
    Fix Version/s: 3.0.0-rc-4
       Resolution: Fixed

> Type inference regression with anonymous class and nested closure type coersion to SAM
> --------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9370
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9370
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>    Affects Versions: 2.5.9, 3.0.0-rc-3
>            Reporter: Bjørn Mølgård Vester
>            Assignee: Eric Milles
>            Priority: Minor
>             Fix For: 3.0.0-rc-4
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> The following code works in Groovy 2.5.8 but fails in 2.5.9 (and 3.0.0-rc-3):
> {code:java}
> @groovy.transform.CompileStatic
> @FunctionalInterface
> interface Invoker {
>     void invoke()
> }
> @groovy.transform.CompileStatic
> class Library {
>     void something(Invoker invoker) {
>         invoker.invoke()
>     }
>     void somethingElse() {
>     }
> }
> @groovy.transform.CompileStatic
> class Main {
>     final Library lib = new Library()
>     void main() {
>         new Invoker() { // Anonymous class
>             void invoke() {
>                 lib.something { // Coerce to SAM
>                     lib.somethingElse() // This fails
>                 }
>             }
>         }
>     }
> }
> {code}
> Compiler error:
> {noformat}
> > Task :compileGroovy
> startup failed:
> C:\Work\Groovy-STC-bug\src\main\groovy\groovy\Main.groovy: 25: [Static type checking] - Cannot find matching method java.lang.Object#somethingElse(). Please check if the declared type is correct and if the method exists.
>  @ line 25, column 21.
>                        lib.somethingElse() // This fails
>                        ^
> 1 error
> > Task :compileGroovy FAILED
> {noformat}
> The problem occurs only with the combination of an anonymous class with a nested closure that is type coerced to a SAM interface. It works fine the other way around, or if both are using anonymous classes or both are using type coercions. For the same reason, it is easy to work around. But it is an annoying bug nevertheless.
> At this time, there are a few other type checking issues open that describes problems that manifests themselves with "Cannot find matching method java.lang.Object". But I think this is a different root cause than those.



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