package gnu.classpath.tools.doclets.debugdoclet;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.PackageDoc;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Tag;
import java.io.PrintStream;
import java.util.Arrays;
public class DebugDoclet
{
public static boolean start(RootDoc rootDoc)
{
new DebugDoclet().run(rootDoc);
return true;
}
private PrintStream out;
public DebugDoclet()
{
out = System.out;
}
private void printHeader(String header)
{
out.println();
out.println("******** " + header + " ********");
out.println();
}
private void printSubHeader(String header)
{
out.println();
out.println("======== " + header + " ========");
out.println();
}
private void printSub2Header(String header)
{
out.println();
out.println("-------- " + header + " --------");
out.println();
}
private void run(RootDoc rootDoc)
{
printHeader("Overview");
printSubHeader("Specified Packages");
PackageDoc[] specifiedPackages = rootDoc.specifiedPackages();
Arrays.sort(specifiedPackages);
for (int i=0; i<specifiedPackages.length; ++i) {
out.println(specifiedPackages[i].name());
}
printSubHeader("Specified Classes");
ClassDoc[] specifiedClasses = rootDoc.specifiedClasses();
Arrays.sort(specifiedClasses);
for (int i=0; i<specifiedClasses.length; ++i) {
out.println(specifiedClasses[i].qualifiedTypeName());
}
printSubHeader("Classes");
ClassDoc[] classes = rootDoc.classes();
Arrays.sort(classes);
for (int i=0; i<classes.length; ++i) {
out.println(classes[i].qualifiedTypeName());
}
printHeader("Class Detail");
for (int i=0; i<classes.length; ++i) {
printSubHeader(classes[i].qualifiedTypeName());
printTags(classes[i].firstSentenceTags());
printSub2Header("Methods");
MethodDoc[] methods = classes[i].methods();
for (int j=0; j<methods.length; ++j) {
out.println("name: \"" + methods[j].name() + "\"");
out.println("signature: \"" + methods[j].signature() + "\"");
out.println("modifiers: \"" + methods[j].modifiers() + "\"");
out.print("throws: ");
ClassDoc[] thrownExceptions = methods[j].thrownExceptions();
for (int k=0; k<thrownExceptions.length; ++k) {
if (k>0) { out.print(", "); }
out.print(thrownExceptions[k].qualifiedTypeName());
}
out.println();
}
printSub2Header("Fields");
FieldDoc[] fields = classes[i].fields();
for (int j=0; j<fields.length; ++j) {
out.println("name: \"" + fields[j].name() + "\"");
out.println("modifiers: \"" + fields[j].modifiers() + "\"");
out.println();
}
printSub2Header("Serializable Fields");
FieldDoc[] sfields = classes[i].serializableFields();
for (int j=0; j<sfields.length; ++j) {
out.println("name: \"" + sfields[j].name() + "\"");
out.println("modifiers: \"" + sfields[j].modifiers() + "\"");
out.println();
}
}
}
private void printTag(Tag tag)
{
if (null != tag.text()) {
System.out.println(tag.text());
}
}
private void printTags(Tag[] tags)
{
for (int i=0; i<tags.length; ++i) {
out.println("Tag #" + (i+1) + ":");
printTag(tags[i]);
}
}
}