[jira] [Commented] (GROOVY-8123) Wrong invokation target of static method

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Commented] (GROOVY-8123) Wrong invokation target of static method

JIRA jira@apache.org

    [ https://issues.apache.org/jira/browse/GROOVY-8123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15973565#comment-15973565 ]

Paul King commented on GROOVY-8123:
-----------------------------------

Busy for the next couple of days. PRs welcome. :-) Otherwise, I'll try to free up some time shortly.
I wouldn't see this as a blocker for 2.4.11 since I believe it will only affect JDK9 users of Guava and we have numerous things to still fix for jdk9 but it would certainly be nice to fix as soon as we can.

> Wrong invokation target of static method
> ----------------------------------------
>
>                 Key: GROOVY-8123
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8123
>             Project: Groovy
>          Issue Type: Bug
>          Components: groovy-runtime
>    Affects Versions: 2.4.9
>            Reporter: Jędrzej Dąbrowa
>
> Given following set of java classes:
> {code:title=Interface.java|borderStyle=solid}
> public interface Interface {
>     class ExternalInterface implements Interface {}
>     static Interface provide() {
>         new Throwable().printStackTrace();
>         return new ExternalInterface();
>     }
> }
> {code}
> {code:title=MyInterface.java|borderStyle=solid}
> public abstract class MyInterface implements Interface {
>     private static class MyInterfaceImpl extends MyInterface {}
>     public static MyInterface provide() {
>         return new MyInterfaceImpl();
>     }
> }
> {code}
> And below Groovy code:
> {code:title=Test.groovy|borderStyle=solid}
> class Test {
>     static void main(String[] args) {
>         MyInterface myInterface = MyInterface.provide()
>     }
> }
> {code}
> It yields following result:
> {noformat}
> Exception in thread "main" org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'Interface$ExternalInterface@24a35978' with class 'Interface$ExternalInterface' to class 'MyInterface'
> at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:405)
> at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319)
> at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232)
> at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603)
> at Test.main(Test.groovy:9)
> {noformat}
> Stacktrace during creating object of invalid type is:
> {noformat}
> at Interface.provide(Interface.java:7)
> at Interface$provide.call(Unknown Source)
> at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
> at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
> at Test.main(Test.groovy:9)
> {noformat}
> To me this seems to be a bug. Or is this expected behavior?



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
Loading...