You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2024/03/05 01:54:00 UTC

[jira] [Closed] (GROOVY-11265) Runtime rehydrate error for closure in interface default method

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

Paul King closed GROOVY-11265.
------------------------------

> Runtime rehydrate error for closure in interface default method
> ---------------------------------------------------------------
>
>                 Key: GROOVY-11265
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11265
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler, Static compilation
>    Affects Versions: 4.0.13, 4.0.17
>            Reporter: Christopher Smith
>            Assignee: Eric Milles
>            Priority: Critical
>              Labels: traits
>             Fix For: 4.0.18, 5.0.0-alpha-5
>
>
> When using an interface default method (implemented in Groovy 4 as a trait) that returns an instance of a functional interface defined by a lambda, compilation succeeds but runtime invocation produces
> {code}
> groovy.lang.MissingMethodException: No signature of method: com.example.MyInterface$Trait$Helper$$Lambda$2132/0x0000000800e24c40.rehydrate() is applicable for argument types: (com.example.MyImplementation...) values: [com.example.MyImplementation@2a7087a8, ...]
>         at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)
>         at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:184)
>         at com.example.MyInterface$Trait$Helper.curry(MyInterface.groovy:19)
>         at com.example.MyImplementation.curry(MyImplementation.groovy)
> {code}
> Update: This appears to be a problem introduced between 4.0.12 and 4.0.13 and shows up only when _the interface_ is defined as {{@CompileStatic}}. While I understand that the party line is that traits and ASTTs aren't guaranteed to be compatible, (1) this was working perfectly previously and (2) the compiler's implementation of interface default methods as traits is an implementation detail and should have as limited a blast radius as practical.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)