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

Christopher Smith updated GROOVY-11265:
---------------------------------------
           Component/s: Static compilation
    External issue URL: https://github.com/chrylis/GROOVY-11265
     Affects Version/s: 4.0.13
           Description: 
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.

  was:
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}

I am attempting simplified replication and opening this ticket for an ID.


> 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
>            Priority: Critical
>
> 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)

Reply via email to