Selection of a method to invoke via invokeinterface involves a search for "an instance method with the same name and descriptor as the resolved method" (per JVMS). Yet this search is matching the private static method Object.registerNatives.
Test:
interface I { public void registerNatives(); }
class C implements I {} // compiled separately
class Test {
public static void main(String... args) {
I i = new C(); i.registerNatives();
}
}
Expected: AME (or, if I.registerNatives is a default method, invoke that method)
Actual: IAE (prior toJDK-8024804, a crash)
This is related toJDK-8024804, but note that that bug is about _resolution_, not _selection_.
Test:
interface I { public void registerNatives(); }
class C implements I {} // compiled separately
class Test {
public static void main(String... args) {
I i = new C(); i.registerNatives();
}
}
Expected: AME (or, if I.registerNatives is a default method, invoke that method)
Actual: IAE (prior to
This is related to
- relates to
-
JDK-8028741 Interface Method Resolution should skip static and non-public methods in j.l.Object
-
- Closed
-
-
JDK-8024804 Crash when InterfaceMethodref resolves to Object.registerNatives
-
- Closed
-