--- old/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java 2015-02-04 15:27:02.945991766 +0100 +++ new/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java 2015-02-04 15:27:02.787790073 +0100 @@ -423,12 +423,31 @@ protected void writeMethods() throws IOException { MethodArray methods = klass.getMethods(); - final int len = methods.length(); + ArrayList valid_methods = new ArrayList(); + 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)); } }