home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.util;
-
- import java.io.PrintWriter;
- import sun.tools.java.BinaryConstantPool;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.Constants;
-
- public final class ConstantPrinter implements Constants {
- BinaryConstantPool cpool;
- private LoadEnvironment env;
- private PrintWriter output;
- private boolean decodeTypeSignatures;
-
- public ConstantPrinter(BinaryConstantPool var1, LoadEnvironment var2, boolean var3) {
- this.cpool = var1;
- this.env = var2;
- this.output = var2.output;
- this.decodeTypeSignatures = var3;
- }
-
- public String getString(int var1) {
- return this.cpool.getString(var1);
- }
-
- private void printNameAndType(int var1, String var2, boolean var3) {
- int var4 = var1 >> 16;
- int var5 = var1 & '\uffff';
- this.output.print(this.cpool.getString(var4) + var2);
- if (var3) {
- this.output.print(this.cpool.getType(var5));
- } else {
- this.output.print(this.cpool.getString(var5));
- }
- }
-
- private void printNameAndTypeFromIndex(int var1, String var2) {
- int var3 = this.cpool.getInteger(var1);
- this.printNameAndType(var3, var2, this.decodeTypeSignatures);
- }
-
- private void printRef(int var1, String var2) {
- if (this.decodeTypeSignatures) {
- this.output.print(this.cpool.getConstant(var1, this.env));
- } else {
- int var3 = this.cpool.getInteger(var1);
- int var4 = var3 >> 16;
- int var5 = var3 & '\uffff';
- this.output.print(this.cpool.getDeclaration(this.env, var4).getName());
- this.output.print(".");
- this.printNameAndTypeFromIndex(var5, var2);
- }
- }
-
- public void printClassDeclaration(ClassDeclaration var1) {
- ClassDefinition var2 = var1.getClassDefinition();
- if (var2 != null && var2.isInterface()) {
- this.output.print("<Interface ");
- } else {
- this.output.print("<Class ");
- }
-
- this.output.print(var1.getName());
- this.output.print(">");
- }
-
- public void printConstant(int var1) {
- int var2 = this.cpool.getConstantType(var1);
- switch (var2) {
- case 1:
- this.output.print("<\"" + this.cpool.getString(var1) + "\"");
- break;
- case 2:
- default:
- this.output.print("<Unknown " + var2);
- break;
- case 3:
- this.output.print("<Integer " + this.cpool.getInteger(var1));
- break;
- case 4:
- this.output.print("<Real " + this.cpool.getValue(var1));
- break;
- case 5:
- this.output.print("<Long " + this.cpool.getValue(var1));
- break;
- case 6:
- this.output.print("<Double " + this.cpool.getValue(var1));
- break;
- case 7:
- this.printClassDeclaration(this.cpool.getDeclaration(this.env, var1));
- return;
- case 8:
- this.output.print("<String \"" + this.cpool.getConstant(var1, this.env) + "\"");
- break;
- case 9:
- this.output.print("<Field ");
- this.printRef(var1, " ");
- break;
- case 10:
- this.output.print("<Method ");
- this.printRef(var1, "");
- break;
- case 11:
- this.output.print("<InterfaceMethod ");
- this.printRef(var1, "");
- break;
- case 12:
- this.output.print("<NameAndType");
- this.printNameAndTypeFromIndex(var1, " ");
- }
-
- this.output.print('>');
- }
- }
-