private String printMethods()

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();
    }