You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2014/12/19 17:20:06 UTC

svn commit: r1646789 - in /commons/proper/bcel/trunk/src/main/java/org/apache/bcel: Constants.java classfile/ConstantPool.java

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