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);
         }


Reply via email to