private void writeConstant()

in src/main/java/org/apache/bcel/util/ConstantHTML.java [94:197]


    private void writeConstant(final int index) {
        final byte tag = constants[index].getTag();
        int classIndex;
        int nameIndex;
        String ref;
        // The header is always the same
        printWriter.println("<H4> <A NAME=cp" + index + ">" + index + "</A> " + Const.getConstantName(tag) + "</H4>");
        /*
         * For every constant type get the needed parameters and print them appropriately
         */
        switch (tag) {
        case Const.CONSTANT_InterfaceMethodref:
        case Const.CONSTANT_Methodref:
            // Get class_index and name_and_type_index, depending on type
            if (tag == Const.CONSTANT_Methodref) {
                final ConstantMethodref c = constantPool.getConstant(index, Const.CONSTANT_Methodref, ConstantMethodref.class);
                classIndex = c.getClassIndex();
                nameIndex = c.getNameAndTypeIndex();
            } else {
                final ConstantInterfaceMethodref c1 = constantPool.getConstant(index, Const.CONSTANT_InterfaceMethodref, ConstantInterfaceMethodref.class);
                classIndex = c1.getClassIndex();
                nameIndex = c1.getNameAndTypeIndex();
            }
            // Get method name and its class
            final String methodName = constantPool.constantToString(nameIndex, Const.CONSTANT_NameAndType);
            final String htmlMethodName = Class2HTML.toHTML(methodName);
            // Partially compacted class name, i.e., / -> .
            final String methodClass = constantPool.constantToString(classIndex, Const.CONSTANT_Class);
            String shortMethodClass = Utility.compactClassName(methodClass); // I.e., remove java.lang.
            shortMethodClass = Utility.compactClassName(shortMethodClass, classPackage + ".", true); // Remove class package prefix
            // Get method signature
            final ConstantNameAndType c2 = constantPool.getConstant(nameIndex, Const.CONSTANT_NameAndType, ConstantNameAndType.class);
            final String signature = constantPool.constantToString(c2.getSignatureIndex(), Const.CONSTANT_Utf8);
            // Get array of strings containing the argument types
            final String[] args = Utility.methodSignatureArgumentTypes(signature, false);
            // Get return type string
            final String type = Utility.methodSignatureReturnType(signature, false);
            final String retType = Class2HTML.referenceType(type);
            final StringBuilder buf = new StringBuilder("(");
            for (int i = 0; i < args.length; i++) {
                buf.append(Class2HTML.referenceType(args[i]));
                if (i < args.length - 1) {
                    buf.append(",&nbsp;");
                }
            }
            buf.append(")");
            final String argTypes = buf.toString();
            if (methodClass.equals(className)) {
                ref = "<A HREF=\"" + className + "_code.html#method" + getMethodNumber(methodName + signature) + "\" TARGET=Code>" + htmlMethodName + "</A>";
            } else {
                ref = "<A HREF=\"" + methodClass + ".html" + "\" TARGET=_top>" + shortMethodClass + "</A>." + htmlMethodName;
            }
            constantRef[index] = retType + "&nbsp;<A HREF=\"" + className + "_cp.html#cp" + classIndex + "\" TARGET=Constants>" + shortMethodClass
                + "</A>.<A HREF=\"" + className + "_cp.html#cp" + index + "\" TARGET=ConstantPool>" + htmlMethodName + "</A>&nbsp;" + argTypes;
            printWriter.println("<P><TT>" + retType + "&nbsp;" + ref + argTypes + "&nbsp;</TT>\n<UL>" + "<LI><A HREF=\"#cp" + classIndex + "\">Class index("
                + classIndex + ")</A>\n" + "<LI><A HREF=\"#cp" + nameIndex + "\">NameAndType index(" + nameIndex + ")</A></UL>");
            break;
        case Const.CONSTANT_Fieldref:
            // Get class_index and name_and_type_index
            final ConstantFieldref c3 = constantPool.getConstant(index, Const.CONSTANT_Fieldref, ConstantFieldref.class);
            classIndex = c3.getClassIndex();
            nameIndex = c3.getNameAndTypeIndex();
            // Get method name and its class (compacted)
            final String fieldClass = constantPool.constantToString(classIndex, Const.CONSTANT_Class);
            String shortFieldClass = Utility.compactClassName(fieldClass); // I.e., remove java.lang.
            shortFieldClass = Utility.compactClassName(shortFieldClass, classPackage + ".", true); // Remove class package prefix
            final String fieldName = constantPool.constantToString(nameIndex, Const.CONSTANT_NameAndType);
            if (fieldClass.equals(className)) {
                ref = "<A HREF=\"" + fieldClass + "_methods.html#field" + fieldName + "\" TARGET=Methods>" + fieldName + "</A>";
            } else {
                ref = "<A HREF=\"" + fieldClass + ".html\" TARGET=_top>" + shortFieldClass + "</A>." + fieldName + "\n";
            }
            constantRef[index] = "<A HREF=\"" + className + "_cp.html#cp" + classIndex + "\" TARGET=Constants>" + shortFieldClass + "</A>.<A HREF=\""
                + className + "_cp.html#cp" + index + "\" TARGET=ConstantPool>" + fieldName + "</A>";
            printWriter.println("<P><TT>" + ref + "</TT><BR>\n" + "<UL>" + "<LI><A HREF=\"#cp" + classIndex + "\">Class(" + classIndex + ")</A><BR>\n"
                + "<LI><A HREF=\"#cp" + nameIndex + "\">NameAndType(" + nameIndex + ")</A></UL>");
            break;
        case Const.CONSTANT_Class:
            final ConstantClass c4 = constantPool.getConstant(index, Const.CONSTANT_Class, ConstantClass.class);
            nameIndex = c4.getNameIndex();
            final String className2 = constantPool.constantToString(index, tag); // / -> .
            String shortClassName = Utility.compactClassName(className2); // I.e., remove java.lang.
            shortClassName = Utility.compactClassName(shortClassName, classPackage + ".", true); // Remove class package prefix
            ref = "<A HREF=\"" + className2 + ".html\" TARGET=_top>" + shortClassName + "</A>";
            constantRef[index] = "<A HREF=\"" + className + "_cp.html#cp" + index + "\" TARGET=ConstantPool>" + shortClassName + "</A>";
            printWriter.println("<P><TT>" + ref + "</TT><UL>" + "<LI><A HREF=\"#cp" + nameIndex + "\">Name index(" + nameIndex + ")</A></UL>\n");
            break;
        case Const.CONSTANT_String:
            final ConstantString c5 = constantPool.getConstant(index, Const.CONSTANT_String, ConstantString.class);
            nameIndex = c5.getStringIndex();
            final String str = Class2HTML.toHTML(constantPool.constantToString(index, tag));
            printWriter.println("<P><TT>" + str + "</TT><UL>" + "<LI><A HREF=\"#cp" + nameIndex + "\">Name index(" + nameIndex + ")</A></UL>\n");
            break;
        case Const.CONSTANT_NameAndType:
            final ConstantNameAndType c6 = constantPool.getConstant(index, Const.CONSTANT_NameAndType, ConstantNameAndType.class);
            nameIndex = c6.getNameIndex();
            final int signatureIndex = c6.getSignatureIndex();
            printWriter.println("<P><TT>" + Class2HTML.toHTML(constantPool.constantToString(index, tag)) + "</TT><UL>" + "<LI><A HREF=\"#cp" + nameIndex
                + "\">Name index(" + nameIndex + ")</A>\n" + "<LI><A HREF=\"#cp" + signatureIndex + "\">Signature index(" + signatureIndex + ")</A></UL>\n");
            break;
        default:
            printWriter.println("<P><TT>" + Class2HTML.toHTML(constantPool.constantToString(index, tag)) + "</TT>\n");
        } // switch
    }