private String printExtra()

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