I've filed:

https://bugs.openjdk.java.net/browse/JDK-8216324

for the JVM TI bug.

David
-----

On 8/01/2019 11:38 am, David Holmes wrote:
On 7/01/2019 11:35 pm, Michael Rasmussen wrote:
On 7/01/2019 8:46 pm, Michael Rasmussen wrote:
Hi,

We recently discovered something similar, although with the native counterparts of getDeclaredMethods: the JVM-TI function GetClassMethods and the JDI method ReferenceType.methods(). The documentation for which states "Only directly declared methods are returned (not inherited methods)" or "(...) declared directly in this type. Inherited methods are not included."

When running the code pasted below with HotSpot (tried OpenJDK8 and 11), I get the following output:
[public abstract java.lang.String app1.Test$Child.method2()]
[public default java.lang.String app1.Test$Child.method(), public abstract java.lang.String app1.Test$Child.method2()]

This would appear to be a bug with JVM TI in how default methods are
accounted for. GetClassMethods simply looks at the methods defined in
the instanceKlass, but for interfaces default methods are included. I'll
look into this in more detail and file a hotspot bug.

An interesting thing is that it's not the default method "def" that is listed, but the abstract method "method" (with incorrect modifier?)

Sorry yes I misread the original code and just looked at the extra "default method" in the output. Definitely something not right there.

Thanks,
David

/Michael

Reply via email to