in modules/jdktools/src/main/java/org/apache/harmony/tools/javap/Clazz.java [682:835]
private String printMethods(int indent) {
StringBuffer result = new StringBuffer();
// Create the indentation string.
String indentStr = indentString(indent);
Method methods[] = wrappedClass.getMethods();
for (int i = 0; i < methods.length; i++) {
Method m = methods[i];
// Skip a method, if we should not print an information about it.
if (!isPrintable(m)) {
continue;
}
result.append(n);
result.append(indentStr);
// The default values.
String methodName = m.getName();
String signature = m.getSignature();
if (methodName.equals("<clinit>")) {
// The "static" block of a class.
result.append("static {}");
} else {
boolean ctor = false;
if (methodName.equals("<init>")) {
// It's a constructor.
ctor = true;
}
// Create a method string.
String methodStr = Utility.methodSignatureToString(
signature,
ctor ? wrappedClass.getClassName() : methodName,
Utility.accessToString(m.getAccessFlags()),
true,
m.getLocalVariableTable());
if (ctor) {
// Remove the "void" word, if this is a constructor.
methodStr = skipTokens(methodStr, new String[] {"void"});
}
// Append the method string.
result.append(methodStr);
// Append an exception table.
ExceptionTable e = m.getExceptionTable();
if (e != null) {
String exceptions = e.toString();
if (exceptions.length() > 0) {
result.append(n);
result.append(indentString(indent * 3, "throws "));
result.append(exceptions);
}
}
}
result.append(';');
result.append(n);
// Append a signature.
if (printTypeSignatures) {
result.append(indentString(indent * 2, "Signature: "));
result.append(signature);
result.append(n);
}
// Append a code.
if (printCode) {
Code code = m.getCode();
// If the method is not abstract.
if (code != null) {
result.append(indentString(indent * 2, "Code: "));
result.append(n);
if (verbose) {
result.append(indentString(indent * 3, "Max stack="));
result.append(code.getMaxStack());
result.append(", Max locals=");
result.append(code.getMaxLocals());
result.append(n);
}
// Append the code string.
result.append(indentString(
indent * 3,
Utility.codeToString(
code.getCode(), constPool, 0, -1, verbose
))
);
}
}
// Append a table of the line numbers.
if (printLineNumbers) {
LineNumberTable lt = m.getLineNumberTable();
if (lt != null) {
LineNumber nums[] = lt.getLineNumberTable();
if (nums.length > 0) {
String indentStr3 = indentString(indent * 3);
result.append(indentString(
indent * 2, "LineNumberTable:"));
result.append(n);
for (int j = 0; j < nums.length; j++) {
LineNumber ln = nums[j];
result.append(indentStr3);
result.append("line ");
result.append(ln.getLineNumber());
result.append(": ");
result.append(ln.getStartPC());
result.append(n);
}
}
}
}
// Append the local variables table.
if (printLocalVariables) {
LocalVariableTable vt = m.getLocalVariableTable();
if (vt != null) {
LocalVariable vars[] = vt.getLocalVariableTable();
if (vars.length > 0) {
String indentStr3 = indentString(indent * 3);
result.append(indentString(
indent * 2, "LocalVariableTable:"));
result.append(n);
result.append(indentStr3);
result.append("Start\tLength\tSlot\tName\tSignature");
result.append(n);
for (int j = 0; j < vars.length; j++) {
LocalVariable lv = vars[j];
result.append(indentStr3);
result.append(lv.getStartPC());
result.append("\t\t");
result.append(lv.getLength());
result.append("\t");
result.append(lv.getIndex());
result.append("\t");
result.append(lv.getName());
result.append("\t");
result.append(lv.getSignature());
result.append("\t");
result.append(n);
}
}
}
}
}
return result.toString();
}