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 / javap / JavaPClassPrinter.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  4.6 KB  |  173 lines

  1. package sun.tools.javap;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.lang.reflect.Modifier;
  6. import java.util.Vector;
  7. import sun.tools.java.BinaryClass;
  8. import sun.tools.java.BinaryConstantPool;
  9. import sun.tools.java.BinaryField;
  10. import sun.tools.java.ClassDeclaration;
  11. import sun.tools.java.Constants;
  12. import sun.tools.java.FieldDefinition;
  13.  
  14. class JavaPClassPrinter implements Constants {
  15.    private BinaryClass cdef;
  16.    private JavaPEnvironment env;
  17.    private PrintWriter output;
  18.    private Vector codesVec;
  19.  
  20.    JavaPClassPrinter(BinaryClass var1, JavaPEnvironment var2) {
  21.       this.cdef = var1;
  22.       this.env = var2;
  23.       this.output = var2.output;
  24.    }
  25.  
  26.    JavaPBinaryCode codeFor(FieldDefinition var1) {
  27.       byte[] var2 = ((BinaryField)var1).getAttribute(Constants.idCode);
  28.       if (var2 != null) {
  29.          BinaryConstantPool var3 = this.cdef.getConstants();
  30.          return new JavaPBinaryCode(var2, var3, this.env, var1);
  31.       } else {
  32.          return null;
  33.       }
  34.    }
  35.  
  36.    public void printClassHeader() {
  37.       String var1 = Modifier.toString(this.cdef.getModifiers());
  38.       if (var1.length() > 0) {
  39.          this.output.print(var1 + " ");
  40.       }
  41.  
  42.       if (this.cdef.isInterface()) {
  43.          this.output.print("interface ");
  44.       } else {
  45.          this.output.print("class ");
  46.       }
  47.  
  48.       this.output.print(this.cdef.getName() + " ");
  49.       if (this.cdef.getSuperClass() != null) {
  50.          this.output.print("extends " + this.cdef.getSuperClass().getName() + " ");
  51.       }
  52.  
  53.       ClassDeclaration[] var2 = this.cdef.getInterfaces();
  54.       if (var2.length > 0) {
  55.          this.output.print("implements ");
  56.  
  57.          for(int var3 = 0; var3 < var2.length; ++var3) {
  58.             if (var3 > 0) {
  59.                this.output.print(", ");
  60.             }
  61.  
  62.             this.output.print(var2[var3].getName());
  63.             this.output.print(" ");
  64.          }
  65.       }
  66.  
  67.       if ((this.cdef.getModifiers() & 32) != 0) {
  68.          this.output.println();
  69.          this.output.println("    /* ACC_SUPER bit set */");
  70.       }
  71.  
  72.    }
  73.  
  74.    public void printFieldDefinition(FieldDefinition var1) {
  75.       String var2 = Modifier.toString(var1.getModifiers());
  76.       if (var2.length() > 0) {
  77.          this.output.print(var2 + " ");
  78.       }
  79.  
  80.       this.output.println(var1.toString() + ";");
  81.    }
  82.  
  83.    public void printFields() throws IOException {
  84.       for(FieldDefinition var1 = this.cdef.getFirstField(); var1 != null; var1 = var1.getNextField()) {
  85.          if (this.env.showAccess.checkField(var1)) {
  86.             this.output.print("    ");
  87.             if (var1.isInnerClass()) {
  88.                BinaryClass var2 = (BinaryClass)var1.getInnerClass();
  89.                JavaPClassPrinter var3 = new JavaPClassPrinter(var2, this.env);
  90.                var3.print();
  91.             } else {
  92.                this.printFieldDefinition(var1);
  93.                if (this.env.showInternalSigs) {
  94.                   this.output.println("\t/*   " + var1.getType().getTypeSignature() + "   */");
  95.                }
  96.  
  97.                if (this.env.showVerbose) {
  98.                   JavaPBinaryCode var4 = this.codeFor(var1);
  99.                   if (var4 != null) {
  100.                      var4.printVerboseHeader();
  101.                   }
  102.                }
  103.             }
  104.          }
  105.       }
  106.  
  107.    }
  108.  
  109.    public void print() throws IOException {
  110.       Object var1 = this.cdef.getSource();
  111.       if (var1 == null) {
  112.          this.output.print("No source");
  113.       } else {
  114.          this.output.print("Compiled from ");
  115.          this.output.println((String)var1);
  116.       }
  117.  
  118.       this.printClassHeader();
  119.       this.output.println("{");
  120.       this.printFields();
  121.       if (this.env.showBackwardCompatible) {
  122.          if (this.env.showDisassembled) {
  123.             Codes var8 = new Codes(this);
  124.  
  125.             JavaPBinaryCode var5;
  126.             while((var5 = var8.next()) != null) {
  127.                var5.printCodeSequence();
  128.                var5.printExceptionTable();
  129.             }
  130.          }
  131.  
  132.          if (this.env.showLineAndLocal) {
  133.             this.output.println();
  134.             Codes var9 = new Codes(this);
  135.  
  136.             JavaPBinaryCode var6;
  137.             while((var6 = var9.next()) != null) {
  138.                var6.printLineNumberTable();
  139.             }
  140.  
  141.             this.output.println();
  142.             Codes var4 = new Codes(this);
  143.  
  144.             while((var6 = var4.next()) != null) {
  145.                var6.printLocalVariableTable();
  146.             }
  147.          }
  148.  
  149.          this.output.println();
  150.          this.output.println("}");
  151.       } else {
  152.          this.output.println("}");
  153.          if (this.env.showDisassembled || this.env.showLineAndLocal) {
  154.             Codes var3 = new Codes(this);
  155.  
  156.             JavaPBinaryCode var2;
  157.             while((var2 = var3.next()) != null) {
  158.                if (this.env.showDisassembled) {
  159.                   var2.printCodeSequence();
  160.                   var2.printExceptionTable();
  161.                }
  162.  
  163.                if (this.env.showLineAndLocal) {
  164.                   var2.printLineNumberTable();
  165.                   var2.printLocalVariableTable();
  166.                }
  167.             }
  168.          }
  169.  
  170.       }
  171.    }
  172. }
  173.