1.1 --- a/src/share/classes/com/sun/tools/javap/ConstantWriter.java Fri Jan 14 13:59:18 2011 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javap/ConstantWriter.java Tue Jan 18 08:37:05 2011 -0800 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -97,6 +97,13 @@ 1.11 return 1; 1.12 } 1.13 1.14 + public Integer visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Void p) { 1.15 + print("#" + info.bootstrap_method_attr_index + ":#" + info.name_and_type_index); 1.16 + tab(); 1.17 + println("// " + stringValue(info)); 1.18 + return 1; 1.19 + } 1.20 + 1.21 public Integer visitLong(CONSTANT_Long_info info, Void p) { 1.22 println(stringValue(info)); 1.23 return 2; 1.24 @@ -116,6 +123,20 @@ 1.25 return 1; 1.26 } 1.27 1.28 + public Integer visitMethodHandle(CONSTANT_MethodHandle_info info, Void p) { 1.29 + print("#" + info.reference_kind.tag + ":#" + info.reference_index); 1.30 + tab(); 1.31 + println("// " + stringValue(info)); 1.32 + return 1; 1.33 + } 1.34 + 1.35 + public Integer visitMethodType(CONSTANT_MethodType_info info, Void p) { 1.36 + print("#" + info.descriptor_index); 1.37 + tab(); 1.38 + println("// " + stringValue(info)); 1.39 + return 1; 1.40 + } 1.41 + 1.42 public Integer visitString(CONSTANT_String_info info, Void p) { 1.43 print("#" + info.string_index); 1.44 tab(); 1.45 @@ -201,14 +222,20 @@ 1.46 return "String"; 1.47 case CONSTANT_Fieldref: 1.48 return "Field"; 1.49 + case CONSTANT_MethodHandle: 1.50 + return "MethodHandle"; 1.51 + case CONSTANT_MethodType: 1.52 + return "MethodType"; 1.53 case CONSTANT_Methodref: 1.54 return "Method"; 1.55 case CONSTANT_InterfaceMethodref: 1.56 return "InterfaceMethod"; 1.57 + case CONSTANT_InvokeDynamic: 1.58 + return "InvokeDynamic"; 1.59 case CONSTANT_NameAndType: 1.60 return "NameAndType"; 1.61 default: 1.62 - return "(unknown tag)"; 1.63 + return "(unknown tag " + tag + ")"; 1.64 } 1.65 } 1.66 1.67 @@ -264,6 +291,15 @@ 1.68 return visitRef(info, p); 1.69 } 1.70 1.71 + public String visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Void p) { 1.72 + try { 1.73 + String callee = stringValue(info.getNameAndTypeInfo()); 1.74 + return "#" + info.bootstrap_method_attr_index + ":" + callee; 1.75 + } catch (ConstantPoolException e) { 1.76 + return report(e); 1.77 + } 1.78 + } 1.79 + 1.80 public String visitLong(CONSTANT_Long_info info, Void p) { 1.81 return info.value + "l"; 1.82 } 1.83 @@ -288,6 +324,22 @@ 1.84 } 1.85 } 1.86 1.87 + public String visitMethodHandle(CONSTANT_MethodHandle_info info, Void p) { 1.88 + try { 1.89 + return info.reference_kind.name + " " + stringValue(info.getCPRefInfo()); 1.90 + } catch (ConstantPoolException e) { 1.91 + return report(e); 1.92 + } 1.93 + } 1.94 + 1.95 + public String visitMethodType(CONSTANT_MethodType_info info, Void p) { 1.96 + try { 1.97 + return info.getType(); 1.98 + } catch (ConstantPoolException e) { 1.99 + return report(e); 1.100 + } 1.101 + } 1.102 + 1.103 public String visitMethodref(CONSTANT_Methodref_info info, Void p) { 1.104 return visitRef(info, p); 1.105 } 1.106 @@ -347,7 +399,6 @@ 1.107 } 1.108 } 1.109 1.110 - 1.111 /* If name is a valid binary name, return it; otherwise quote it. */ 1.112 private static String checkName(String name) { 1.113 if (name == null)