src/share/classes/com/sun/tools/javap/ConstantWriter.java

changeset 826
5cf6c432ef2f
parent 581
f2fdd52e4e87
child 2288
4267f38a1706
     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)

mercurial