home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.javap;
-
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.lang.reflect.Modifier;
- import java.util.Vector;
- import sun.tools.java.BinaryClass;
- import sun.tools.java.BinaryConstantPool;
- import sun.tools.java.BinaryField;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.Constants;
- import sun.tools.java.FieldDefinition;
-
- class JavaPClassPrinter implements Constants {
- private BinaryClass cdef;
- private JavaPEnvironment env;
- private PrintWriter output;
- private Vector codesVec;
-
- JavaPClassPrinter(BinaryClass var1, JavaPEnvironment var2) {
- this.cdef = var1;
- this.env = var2;
- this.output = var2.output;
- }
-
- JavaPBinaryCode codeFor(FieldDefinition var1) {
- byte[] var2 = ((BinaryField)var1).getAttribute(Constants.idCode);
- if (var2 != null) {
- BinaryConstantPool var3 = this.cdef.getConstants();
- return new JavaPBinaryCode(var2, var3, this.env, var1);
- } else {
- return null;
- }
- }
-
- public void printClassHeader() {
- String var1 = Modifier.toString(this.cdef.getModifiers());
- if (var1.length() > 0) {
- this.output.print(var1 + " ");
- }
-
- if (this.cdef.isInterface()) {
- this.output.print("interface ");
- } else {
- this.output.print("class ");
- }
-
- this.output.print(this.cdef.getName() + " ");
- if (this.cdef.getSuperClass() != null) {
- this.output.print("extends " + this.cdef.getSuperClass().getName() + " ");
- }
-
- ClassDeclaration[] var2 = this.cdef.getInterfaces();
- if (var2.length > 0) {
- this.output.print("implements ");
-
- for(int var3 = 0; var3 < var2.length; ++var3) {
- if (var3 > 0) {
- this.output.print(", ");
- }
-
- this.output.print(var2[var3].getName());
- this.output.print(" ");
- }
- }
-
- if ((this.cdef.getModifiers() & 32) != 0) {
- this.output.println();
- this.output.println(" /* ACC_SUPER bit set */");
- }
-
- }
-
- public void printFieldDefinition(FieldDefinition var1) {
- String var2 = Modifier.toString(var1.getModifiers());
- if (var2.length() > 0) {
- this.output.print(var2 + " ");
- }
-
- this.output.println(var1.toString() + ";");
- }
-
- public void printFields() throws IOException {
- for(FieldDefinition var1 = this.cdef.getFirstField(); var1 != null; var1 = var1.getNextField()) {
- if (this.env.showAccess.checkField(var1)) {
- this.output.print(" ");
- if (var1.isInnerClass()) {
- BinaryClass var2 = (BinaryClass)var1.getInnerClass();
- JavaPClassPrinter var3 = new JavaPClassPrinter(var2, this.env);
- var3.print();
- } else {
- this.printFieldDefinition(var1);
- if (this.env.showInternalSigs) {
- this.output.println("\t/* " + var1.getType().getTypeSignature() + " */");
- }
-
- if (this.env.showVerbose) {
- JavaPBinaryCode var4 = this.codeFor(var1);
- if (var4 != null) {
- var4.printVerboseHeader();
- }
- }
- }
- }
- }
-
- }
-
- public void print() throws IOException {
- Object var1 = this.cdef.getSource();
- if (var1 == null) {
- this.output.print("No source");
- } else {
- this.output.print("Compiled from ");
- this.output.println((String)var1);
- }
-
- this.printClassHeader();
- this.output.println("{");
- this.printFields();
- if (this.env.showBackwardCompatible) {
- if (this.env.showDisassembled) {
- Codes var8 = new Codes(this);
-
- JavaPBinaryCode var5;
- while((var5 = var8.next()) != null) {
- var5.printCodeSequence();
- var5.printExceptionTable();
- }
- }
-
- if (this.env.showLineAndLocal) {
- this.output.println();
- Codes var9 = new Codes(this);
-
- JavaPBinaryCode var6;
- while((var6 = var9.next()) != null) {
- var6.printLineNumberTable();
- }
-
- this.output.println();
- Codes var4 = new Codes(this);
-
- while((var6 = var4.next()) != null) {
- var6.printLocalVariableTable();
- }
- }
-
- this.output.println();
- this.output.println("}");
- } else {
- this.output.println("}");
- if (this.env.showDisassembled || this.env.showLineAndLocal) {
- Codes var3 = new Codes(this);
-
- JavaPBinaryCode var2;
- while((var2 = var3.next()) != null) {
- if (this.env.showDisassembled) {
- var2.printCodeSequence();
- var2.printExceptionTable();
- }
-
- if (this.env.showLineAndLocal) {
- var2.printLineNumberTable();
- var2.printLocalVariableTable();
- }
- }
- }
-
- }
- }
- }
-