Author: ebourg Date: Fri Dec 19 16:20:06 2014 New Revision: 1646789 URL: http://svn.apache.org/r1646789 Log: Implement constantToString for MethodHandle, MethodType and InvokeDynamic
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/ConstantPool.java Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java?rev=1646789&r1=1646788&r2=1646789&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java Fri Dec 19 16:20:06 2014 @@ -1511,4 +1511,23 @@ public static final byte ATTR_RUNTIMEINV public static final int SAME_LOCALS_1_STACK_ITEM_FRAME_MAX = 127; public static final int CHOP_FRAME_MAX = 250; public static final int APPEND_FRAME_MAX = 254; + + + // Constants defining the behavior of the Method Handles (JVMS ยง5.4.3.5) + + public static final byte REF_getField = 1; + public static final byte REF_getStatic = 2; + public static final byte REF_putField = 3; + public static final byte REF_putStatic = 4; + public static final byte REF_invokeVirtual = 5; + public static final byte REF_invokeStatic = 6; + public static final byte REF_invokeSpecial = 7; + public static final byte REF_newInvokeSpecial = 8; + public static final byte REF_invokeInterface = 9; + + public static final String[] REF_NAMES = { + "getfield", "getstatic", "putfield", + "putstatic", "invokevirtual", "invokestatic", + "invokespecial", "new dup invokespecial", "invokeinterface" + }; } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/ConstantPool.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/ConstantPool.java?rev=1646789&r1=1646788&r2=1646789&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/ConstantPool.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/ConstantPool.java Fri Dec 19 16:20:06 2014 @@ -143,6 +143,18 @@ public class ConstantPool implements Clo + "." + constantToString(((ConstantCP) c).getNameAndTypeIndex(), Constants.CONSTANT_NameAndType)); break; + case Constants.CONSTANT_MethodHandle: + ConstantMethodHandle cmh = (ConstantMethodHandle) c; + str = Constants.REF_NAMES[cmh.getReferenceKind()] + " " + constantToString(constant_pool[cmh.getReferenceIndex()]); + break; + case Constants.CONSTANT_MethodType: + ConstantMethodType cmt = (ConstantMethodType) c; + str = constantToString(cmt.getDescriptorIndex(), Constants.CONSTANT_Utf8); + break; + case Constants.CONSTANT_InvokeDynamic: + ConstantInvokeDynamic cid = ((ConstantInvokeDynamic) c); + str = cid.getBootstrapMethodAttrIndex() + ": " + constantToString(cid.getNameAndTypeIndex(), Constants.CONSTANT_NameAndType); + break; default: // Never reached throw new RuntimeException("Unknown constant type " + tag); }