[
https://issues.apache.org/jira/browse/GROOVY-8123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15973851#comment-15973851
]
Paul King commented on GROOVY-8123:
-----------------------------------
Just for completeness, here is an example to trigger the error with Guava:
{code}
@Grab('com.google.guava:guava:17.0')
import com.google.common.collect.ImmutableSortedSet
println ImmutableSortedSet.naturalOrder().build().dump() // OK
println ImmutableSortedSet.of().dump() // ERROR
{code}
It runs fine under JDK8 but you get the following error when running on JDK9
but using Groovy built using JDK8:
{noformat}
java.lang.IncompatibleClassChangeError: Method
java.util.Set.of()Ljava/util/Set; must be InterfaceMethodref constant
{noformat}
I ran it with:
{noformat}
_JAVA_OPTIONS=--permit-illegal-access --add-modules=java.xml.bind
{noformat}
> 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)