in modules/jdktools/src/main/java/org/apache/harmony/tools/javap/Clazz.java [390:598]
private String printExtra(int indent) {
StringBuffer result = new StringBuffer();
StringBuffer l = new StringBuffer();
StringBuffer r = new StringBuffer();
// Create the indentation string.
String indentStr = indentString(indent);
// Append a source file name.
result.append(indentStr);
result.append("SourceFile: ");
result.append('\"');
result.append(wrappedClass.getSourceFileName());
result.append('\"');
result.append(n);
// Append inner classes.
if (innerClasses != null && innerClasses.getLength() > 0) {
result.append(indentStr);
result.append("InnerClass:");
result.append(n);
InnerClass inners[] = innerClasses.getInnerClasses();
for (int i = 0; i < inners.length; i++) {
InnerClass ic = inners[i];
int innerAccessFlags = ic.getInnerAccessFlags();
int innerNameIndex = ic.getInnerNameIndex();
int innerClassIndex = ic.getInnerClassIndex();
int outerClassIndex = ic.getOuterClassIndex();
// Append the indentation.
result.append(indentStr);
result.append(indentStr);
// Append an access string.
String access = Utility.accessToString(innerAccessFlags, true);
if (access.length() > 0) {
result.append(access);
result.append(' ');
}
// Construct a string like this:
// #?= #? of #?; //?=class ? of class ?
// Every number or string represented as '?' may be empty.
// So we try to eliminate strings like this:
// #0= #0 of #0; //=class of class
l.setLength(0);
r.setLength(0);
if (innerClassIndex > 0) {
if (innerNameIndex > 0) {
l.append('#');
l.append(innerNameIndex);
l.append("= ");
r.append(constPool.constantToString(
constPool.getConstant(innerNameIndex)));
r.append("=");
}
l.append("#");
l.append(innerClassIndex);
r.append("class ");
r.append(constPool.constantToString(
constPool.getConstant(innerClassIndex)));
if (outerClassIndex > 0) {
l.append(" of #");
l.append(outerClassIndex);
r.append(" of class ");
r.append(constPool.constantToString(
constPool.getConstant(outerClassIndex)));
}
if (l.length() > 0) {
result.append(l);
result.append(";");
if (r.length() > 0) {
result.append(" //");
result.append(r);
}
}
result.append(n);
}
}
}
// Append a version number.
result.append(indentStr);
result.append("minor version: ");
result.append(wrappedClass.getMinor());
result.append(n);
result.append(indentStr);
result.append("major version: ");
result.append(wrappedClass.getMajor());
result.append(n);
// Append a constant pool.
if (constPool.getLength() > 0) {
result.append(indentStr);
result.append("Constant pool:");
result.append(n);
Constant pool[] = constPool.getConstantPool();
for (int i = 0; i < pool.length; i++) {
Constant constant = pool[i];
// pool[i] may be null, so we skip such elements.
if (constant == null) {
continue;
}
result.append(indentStr);
result.append(indentStr);
result.append("const #");
result.append(i);
result.append(" = ");
// Append a constant specific string.
if (constant instanceof ConstantUtf8) {
ConstantUtf8 c = (ConstantUtf8) constant;
result.append("Asciz\t");
result.append(constPool.constantToString(c));
result.append(';');
} else if (constant instanceof ConstantFieldref) {
ConstantFieldref c = (ConstantFieldref) constant;
result.append("Field\t#");
result.append(c.getClassIndex());
result.append(".#");
result.append(c.getNameAndTypeIndex());
result.append(";\t// ");
result.append(Utility.replace(
constPool.constantToString(c), " ", ":"));
} else if (constant instanceof ConstantNameAndType) {
ConstantNameAndType c = (ConstantNameAndType) constant;
result.append("NameAndType\t#");
result.append(c.getNameIndex());
result.append(":#");
result.append(c.getSignatureIndex());
result.append(";\t// ");
result.append(Utility.replace(
constPool.constantToString(c), " ", ":"));
} else if (constant instanceof ConstantMethodref) {
ConstantMethodref c = (ConstantMethodref) constant;
result.append("Method\t#");
result.append(c.getClassIndex());
result.append(".#");
result.append(c.getNameAndTypeIndex());
result.append(";\t// ");
result.append(Utility.replace(
constPool.constantToString(c), " ", ":"));
} else if (constant instanceof ConstantInterfaceMethodref) {
ConstantInterfaceMethodref c = (ConstantInterfaceMethodref) constant;
result.append("InterfaceMethod\t#");
result.append(c.getClassIndex());
result.append(".#");
result.append(c.getNameAndTypeIndex());
result.append(";\t// ");
result.append(Utility.replace(
constPool.constantToString(c), " ", ":"));
} else if (constant instanceof ConstantDouble) {
ConstantDouble c = (ConstantDouble) constant;
result.append("double\t");
result.append(constPool.constantToString(c));
result.append(';');
} else if (constant instanceof ConstantFloat) {
ConstantFloat c = (ConstantFloat) constant;
result.append("float\t");
result.append(constPool.constantToString(c));
result.append(';');
} else if (constant instanceof ConstantInteger) {
ConstantInteger c = (ConstantInteger) constant;
result.append("int\t");
result.append(constPool.constantToString(c));
result.append(';');
} else if (constant instanceof ConstantLong) {
ConstantLong c = (ConstantLong) constant;
result.append("long\t");
result.append(constPool.constantToString(c));
result.append(';');
} else if (constant instanceof ConstantClass) {
ConstantClass c = (ConstantClass) constant;
result.append("class\t#");
result.append(c.getNameIndex());
result.append(";\t// ");
result.append(constPool.constantToString(c));
} else if (constant instanceof ConstantString) {
ConstantString c = (ConstantString) constant;
result.append("String\t#");
result.append(c.getStringIndex());
result.append(";\t// ");
result.append(constPool.constantToString(c));
}
result.append(n);
}
}
result.append(n);
return result.toString();
}