home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / util / ConstantPrinter.class (.txt) next >
Encoding:
Java Class File  |  1997-07-08  |  3.3 KB  |  115 lines

  1. package sun.tools.util;
  2.  
  3. import java.io.PrintWriter;
  4. import sun.tools.java.BinaryConstantPool;
  5. import sun.tools.java.ClassDeclaration;
  6. import sun.tools.java.ClassDefinition;
  7. import sun.tools.java.Constants;
  8.  
  9. public final class ConstantPrinter implements Constants {
  10.    BinaryConstantPool cpool;
  11.    private LoadEnvironment env;
  12.    private PrintWriter output;
  13.    private boolean decodeTypeSignatures;
  14.  
  15.    public ConstantPrinter(BinaryConstantPool var1, LoadEnvironment var2, boolean var3) {
  16.       this.cpool = var1;
  17.       this.env = var2;
  18.       this.output = var2.output;
  19.       this.decodeTypeSignatures = var3;
  20.    }
  21.  
  22.    public String getString(int var1) {
  23.       return this.cpool.getString(var1);
  24.    }
  25.  
  26.    private void printNameAndType(int var1, String var2, boolean var3) {
  27.       int var4 = var1 >> 16;
  28.       int var5 = var1 & '\uffff';
  29.       this.output.print(this.cpool.getString(var4) + var2);
  30.       if (var3) {
  31.          this.output.print(this.cpool.getType(var5));
  32.       } else {
  33.          this.output.print(this.cpool.getString(var5));
  34.       }
  35.    }
  36.  
  37.    private void printNameAndTypeFromIndex(int var1, String var2) {
  38.       int var3 = this.cpool.getInteger(var1);
  39.       this.printNameAndType(var3, var2, this.decodeTypeSignatures);
  40.    }
  41.  
  42.    private void printRef(int var1, String var2) {
  43.       if (this.decodeTypeSignatures) {
  44.          this.output.print(this.cpool.getConstant(var1, this.env));
  45.       } else {
  46.          int var3 = this.cpool.getInteger(var1);
  47.          int var4 = var3 >> 16;
  48.          int var5 = var3 & '\uffff';
  49.          this.output.print(this.cpool.getDeclaration(this.env, var4).getName());
  50.          this.output.print(".");
  51.          this.printNameAndTypeFromIndex(var5, var2);
  52.       }
  53.    }
  54.  
  55.    public void printClassDeclaration(ClassDeclaration var1) {
  56.       ClassDefinition var2 = var1.getClassDefinition();
  57.       if (var2 != null && var2.isInterface()) {
  58.          this.output.print("<Interface ");
  59.       } else {
  60.          this.output.print("<Class ");
  61.       }
  62.  
  63.       this.output.print(var1.getName());
  64.       this.output.print(">");
  65.    }
  66.  
  67.    public void printConstant(int var1) {
  68.       int var2 = this.cpool.getConstantType(var1);
  69.       switch (var2) {
  70.          case 1:
  71.             this.output.print("<\"" + this.cpool.getString(var1) + "\"");
  72.             break;
  73.          case 2:
  74.          default:
  75.             this.output.print("<Unknown " + var2);
  76.             break;
  77.          case 3:
  78.             this.output.print("<Integer " + this.cpool.getInteger(var1));
  79.             break;
  80.          case 4:
  81.             this.output.print("<Real " + this.cpool.getValue(var1));
  82.             break;
  83.          case 5:
  84.             this.output.print("<Long " + this.cpool.getValue(var1));
  85.             break;
  86.          case 6:
  87.             this.output.print("<Double " + this.cpool.getValue(var1));
  88.             break;
  89.          case 7:
  90.             this.printClassDeclaration(this.cpool.getDeclaration(this.env, var1));
  91.             return;
  92.          case 8:
  93.             this.output.print("<String \"" + this.cpool.getConstant(var1, this.env) + "\"");
  94.             break;
  95.          case 9:
  96.             this.output.print("<Field ");
  97.             this.printRef(var1, " ");
  98.             break;
  99.          case 10:
  100.             this.output.print("<Method ");
  101.             this.printRef(var1, "");
  102.             break;
  103.          case 11:
  104.             this.output.print("<InterfaceMethod ");
  105.             this.printRef(var1, "");
  106.             break;
  107.          case 12:
  108.             this.output.print("<NameAndType");
  109.             this.printNameAndTypeFromIndex(var1, " ");
  110.       }
  111.  
  112.       this.output.print('>');
  113.    }
  114. }
  115.