agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
*** old/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java Wed Feb 4 15:27:02 2015
--- new/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java Wed Feb 4 15:27:02 2015
*** 421,436 ****
--- 421,455 ----
dos.writeInt(0);
}
protected void writeMethods() throws IOException {
MethodArray methods = klass.getMethods();
! final int len = methods.length();
! ArrayList<Method> valid_methods = new ArrayList<Method>();
+ for (int i = 0; i < methods.length(); i++) {
+ Method m = methods.at(i);
+ long accessFlags = m.getAccessFlags();
+ // overpass method
+ if (accessFlags == (JVM_ACC_PUBLIC | JVM_ACC_SYNTHETIC | JVM_ACC_BRIDGE)) {
+ continue;
+ }
+ final boolean isNative = ((accessFlags & JVM_ACC_NATIVE) != 0);
+ final boolean isAbstract = ((accessFlags & JVM_ACC_ABSTRACT) != 0);
+ final boolean isCodeAvailable = (!isNative) && (!isAbstract);
+ // If _codeIndex == 0 but code exists we're in an
+ // interface and we're dealing with a default method. Skip
+ // it.
+ if (isCodeAvailable && _codeIndex == 0) {
+ continue;
+ }
+ valid_methods.add(m);
+ }
+ final int len = valid_methods.size();
// write number of methods
dos.writeShort((short) len);
if (DEBUG) debugMessage("number of methods = " + len);
for (int m = 0; m < len; m++) {
! writeMethod(methods.at(m));
! writeMethod(valid_methods.get(m));
}
}
protected void writeMethod(Method m) throws IOException {
long accessFlags = m.getAccessFlags();
agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File