1 17 package org.apache.bcel.util; 18 19 import java.io.FileOutputStream ; 20 import java.io.IOException ; 21 import java.io.PrintWriter ; 22 import org.apache.bcel.classfile.Attribute; 23 import org.apache.bcel.classfile.Code; 24 import org.apache.bcel.classfile.ConstantValue; 25 import org.apache.bcel.classfile.ExceptionTable; 26 import org.apache.bcel.classfile.Field; 27 import org.apache.bcel.classfile.Method; 28 import org.apache.bcel.classfile.Utility; 29 30 37 final class MethodHTML implements org.apache.bcel.Constants { 38 39 private String class_name; private PrintWriter file; private ConstantHTML constant_html; 42 private AttributeHTML attribute_html; 43 44 45 MethodHTML(String dir, String class_name, Method[] methods, Field[] fields, 46 ConstantHTML constant_html, AttributeHTML attribute_html) throws IOException { 47 this.class_name = class_name; 48 this.attribute_html = attribute_html; 49 this.constant_html = constant_html; 50 file = new PrintWriter (new FileOutputStream (dir + class_name + "_methods.html")); 51 file.println("<HTML><BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>"); 52 file.println("<TR><TH ALIGN=LEFT>Access flags</TH><TH ALIGN=LEFT>Type</TH>" 53 + "<TH ALIGN=LEFT>Field name</TH></TR>"); 54 for (int i = 0; i < fields.length; i++) { 55 writeField(fields[i]); 56 } 57 file.println("</TABLE>"); 58 file.println("<TABLE BORDER=0><TR><TH ALIGN=LEFT>Access flags</TH>" 59 + "<TH ALIGN=LEFT>Return type</TH><TH ALIGN=LEFT>Method name</TH>" 60 + "<TH ALIGN=LEFT>Arguments</TH></TR>"); 61 for (int i = 0; i < methods.length; i++) { 62 writeMethod(methods[i], i); 63 } 64 file.println("</TABLE></BODY></HTML>"); 65 file.close(); 66 } 67 68 69 75 private void writeField( Field field ) throws IOException { 76 String type = Utility.signatureToString(field.getSignature()); 77 String name = field.getName(); 78 String access = Utility.accessToString(field.getAccessFlags()); 79 Attribute[] attributes; 80 access = Utility.replace(access, " ", " "); 81 file.print("<TR><TD><FONT COLOR=\"#FF0000\">" + access + "</FONT></TD>\n<TD>" 82 + Class2HTML.referenceType(type) + "</TD><TD><A NAME=\"field" + name + "\">" + name 83 + "</A></TD>"); 84 attributes = field.getAttributes(); 85 for (int i = 0; i < attributes.length; i++) { 87 attribute_html.writeAttribute(attributes[i], name + "@" + i); 88 } 89 for (int i = 0; i < attributes.length; i++) { 90 if (attributes[i].getTag() == ATTR_CONSTANT_VALUE) { String str = ((ConstantValue) attributes[i]).toString(); 92 file.print("<TD>= <A HREF=\"" + class_name + "_attributes.html#" + name + "@" + i 94 + "\" TARGET=\"Attributes\">" + str + "</TD>\n"); 95 break; 96 } 97 } 98 file.println("</TR>"); 99 } 100 101 102 private final void writeMethod( Method method, int method_number ) throws IOException { 103 String signature = method.getSignature(); 105 String [] args = Utility.methodSignatureArgumentTypes(signature, false); 107 String type = Utility.methodSignatureReturnType(signature, false); 109 String name = method.getName(), html_name; 111 String access = Utility.accessToString(method.getAccessFlags()); 113 Attribute[] attributes = method.getAttributes(); 115 118 access = Utility.replace(access, " ", " "); 119 html_name = Class2HTML.toHTML(name); 120 file.print("<TR VALIGN=TOP><TD><FONT COLOR=\"#FF0000\"><A NAME=method" + method_number 121 + ">" + access + "</A></FONT></TD>"); 122 file.print("<TD>" + Class2HTML.referenceType(type) + "</TD><TD>" + "<A HREF=" + class_name 123 + "_code.html#method" + method_number + " TARGET=Code>" + html_name 124 + "</A></TD>\n<TD>("); 125 for (int i = 0; i < args.length; i++) { 126 file.print(Class2HTML.referenceType(args[i])); 127 if (i < args.length - 1) { 128 file.print(", "); 129 } 130 } 131 file.print(")</TD></TR>"); 132 for (int i = 0; i < attributes.length; i++) { 134 attribute_html.writeAttribute(attributes[i], "method" + method_number + "@" + i, 135 method_number); 136 byte tag = attributes[i].getTag(); 137 if (tag == ATTR_EXCEPTIONS) { 138 file.print("<TR VALIGN=TOP><TD COLSPAN=2></TD><TH ALIGN=LEFT>throws</TH><TD>"); 139 int[] exceptions = ((ExceptionTable) attributes[i]).getExceptionIndexTable(); 140 for (int j = 0; j < exceptions.length; j++) { 141 file.print(constant_html.referenceConstant(exceptions[j])); 142 if (j < exceptions.length - 1) { 143 file.print(", "); 144 } 145 } 146 file.println("</TD></TR>"); 147 } else if (tag == ATTR_CODE) { 148 Attribute[] c_a = ((Code) attributes[i]).getAttributes(); 149 for (int j = 0; j < c_a.length; j++) { 150 attribute_html.writeAttribute(c_a[j], "method" + method_number + "@" + i + "@" 151 + j, method_number); 152 } 153 } 154 } 155 } 156 } 157 | Popular Tags |