1.1 --- a/javap/src/main/java/sun/tools/javap/ClassData.java Sat Nov 10 19:01:28 2012 +0100
1.2 +++ b/javap/src/main/java/sun/tools/javap/ClassData.java Sun Nov 11 13:23:52 2012 +0100
1.3 @@ -26,7 +26,6 @@
1.4
1.5 package sun.tools.javap;
1.6
1.7 -import java.util.*;
1.8 import java.io.*;
1.9
1.10 /**
1.11 @@ -35,7 +34,7 @@
1.12 *
1.13 * @author Sucheta Dambalkar (Adopted code from jdis)
1.14 */
1.15 -public class ClassData implements RuntimeConstants {
1.16 +public final class ClassData implements RuntimeConstants {
1.17
1.18 private int magic;
1.19 private int minor_version;
1.20 @@ -220,7 +219,11 @@
1.21 * get a string
1.22 */
1.23 public String getString(int n) {
1.24 - return (n == 0) ? null : (String)cpool[n];
1.25 + if (n == 0) {
1.26 + return null;
1.27 + } else {
1.28 + return (String)cpool[n];
1.29 + }
1.30 }
1.31
1.32 /**
1.33 @@ -481,6 +484,9 @@
1.34 * Returns string at that index.
1.35 */
1.36 public String StringValue(int cpx) {
1.37 + return stringValue(cpx, false);
1.38 + }
1.39 + public String stringValue(int cpx, boolean textual) {
1.40 if (cpx==0) return "#0";
1.41 int tag;
1.42 Object x;
1.43 @@ -512,15 +518,24 @@
1.44 case CONSTANT_DOUBLE: {
1.45 Double d=(Double)x;
1.46 String sd=d.toString();
1.47 + if (textual) {
1.48 + return sd;
1.49 + }
1.50 return sd+"d";
1.51 }
1.52 case CONSTANT_FLOAT: {
1.53 Float f=(Float)x;
1.54 String sf=(f).toString();
1.55 + if (textual) {
1.56 + return sf;
1.57 + }
1.58 return sf+"f";
1.59 }
1.60 case CONSTANT_LONG: {
1.61 Long ln = (Long)x;
1.62 + if (textual) {
1.63 + return ln.toString();
1.64 + }
1.65 return ln.toString()+'l';
1.66 }
1.67 case CONSTANT_INTEGER: {
1.68 @@ -528,9 +543,17 @@
1.69 return in.toString();
1.70 }
1.71 case CONSTANT_CLASS:
1.72 + if (textual) {
1.73 + return "new java_lang_Class"; // XXX temporary JS
1.74 + }
1.75 return javaName(getClassName(cpx));
1.76 case CONSTANT_STRING:
1.77 - return StringValue(((CPX)x).cpx);
1.78 + String sv = StringValue(((CPX)x).cpx);
1.79 + if (textual) {
1.80 + return '"' + sv + '"';
1.81 + } else {
1.82 + return sv;
1.83 + }
1.84 case CONSTANT_FIELD:
1.85 case CONSTANT_METHOD:
1.86 case CONSTANT_INTERFACEMETHOD:
1.87 @@ -654,4 +677,22 @@
1.88 private boolean isJavaIdentifierPart(int cp) {
1.89 return isJavaIdentifierStart(cp) || ('0' <= cp && cp <= '9');
1.90 }
1.91 +
1.92 + public String[] getNameAndType(int indx) {
1.93 + return getNameAndType(indx, 0, new String[2]);
1.94 + }
1.95 +
1.96 + private String[] getNameAndType(int indx, int at, String[] arr) {
1.97 + CPX2 c2 = getCpoolEntry(indx);
1.98 + arr[at] = StringValue(c2.cpx1);
1.99 + arr[at + 1] = StringValue(c2.cpx2);
1.100 + return arr;
1.101 + }
1.102 +
1.103 + public String[] getFieldInfoName(int indx) {
1.104 + CPX2 c2 = getCpoolEntry(indx);
1.105 + String[] arr = new String[3];
1.106 + arr[0] = getClassName(c2.cpx1);
1.107 + return getNameAndType(c2.cpx2, 1, arr);
1.108 + }
1.109 }