javap/src/main/java/sun/tools/javap/ClassData.java
branchjavap
changeset 151 40f95fe90cdc
parent 149 32653a09f0db
child 152 2cda429aeb49
     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  }