--- old/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java 2016-01-22 11:39:33.315006074 -0800 +++ new/src/java.base/share/classes/jdk/internal/org/objectweb/asm/ClassWriter.java 2016-01-22 11:39:33.036992128 -0800 @@ -1081,7 +1081,7 @@ } } else if (cst instanceof Handle) { Handle h = (Handle) cst; - return newHandleItem(h.tag, h.owner, h.name, h.desc); + return newHandleItem(h.tag, h.owner, h.name, h.desc, h.intfs); } else { throw new IllegalArgumentException("value " + cst); } @@ -1216,10 +1216,12 @@ * the name of the field or method. * @param desc * the descriptor of the field or method. + * @param intfs + * the indicator of interface static method * @return a new or an already existing method type reference item. */ Item newHandleItem(final int tag, final String owner, final String name, - final String desc) { + final String desc, final boolean intfs) { key4.set(HANDLE_BASE + tag, owner, name, desc); Item result = get(key4); if (result == null) { @@ -1227,9 +1229,9 @@ put112(HANDLE, tag, newField(owner, name, desc)); } else { put112(HANDLE, - tag, - newMethod(owner, name, desc, - tag == Opcodes.H_INVOKEINTERFACE)); + tag, + newMethod(owner, name, desc, + tag == Opcodes.H_INVOKEINTERFACE || intfs)); } result = new Item(index++, key4); put(result); @@ -1257,12 +1259,14 @@ * the name of the field or method. * @param desc * the descriptor of the field or method. + * @param intfs + * the indicator of interface static method * @return the index of a new or already existing method type reference * item. */ public int newHandle(final int tag, final String owner, final String name, - final String desc) { - return newHandleItem(tag, owner, name, desc).index; + final String desc, final boolean intfs) { + return newHandleItem(tag, owner, name, desc, intfs).index; } /** @@ -1294,7 +1298,7 @@ int hashCode = bsm.hashCode(); bootstrapMethods.putShort(newHandle(bsm.tag, bsm.owner, bsm.name, - bsm.desc)); + bsm.desc, bsm.intfs)); int argsLength = bsmArgs.length; bootstrapMethods.putShort(argsLength);