8027920: SA: Add default methods to InstanceKlass
Summary: Add default methods to InstanceKlass to enable SA to inspect default methods
Reviewed-by: dsamersoff, iklam
Contributed-by: jini.george@oracle.com
--- a/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Wed Sep 14 11:53:20 2016 -0700
+++ b/hotspot/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Thu Sep 15 10:19:11 2016 +0300
@@ -68,6 +68,7 @@
Type type = db.lookupType("InstanceKlass");
arrayKlasses = new MetadataField(type.getAddressField("_array_klasses"), 0);
methods = type.getAddressField("_methods");
+ defaultMethods = type.getAddressField("_default_methods");
methodOrdering = type.getAddressField("_method_ordering");
localInterfaces = type.getAddressField("_local_interfaces");
transitiveInterfaces = type.getAddressField("_transitive_interfaces");
@@ -128,6 +129,7 @@
private static MetadataField arrayKlasses;
private static AddressField methods;
+ private static AddressField defaultMethods;
private static AddressField methodOrdering;
private static AddressField localInterfaces;
private static AddressField transitiveInterfaces;
@@ -335,6 +337,20 @@
// Accessors for declared fields
public Klass getArrayKlasses() { return (Klass) arrayKlasses.getValue(this); }
public MethodArray getMethods() { return new MethodArray(methods.getValue(getAddress())); }
+
+ public MethodArray getDefaultMethods() {
+ if (defaultMethods != null) {
+ Address addr = defaultMethods.getValue(getAddress());
+ if ((addr != null) && (addr.getAddressAt(0) != null)) {
+ return new MethodArray(addr);
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
public KlassArray getLocalInterfaces() { return new KlassArray(localInterfaces.getValue(getAddress())); }
public KlassArray getTransitiveInterfaces() { return new KlassArray(transitiveInterfaces.getValue(getAddress())); }
public int getJavaFieldsCount() { return (int) javaFieldsCount.getValue(this); }