file structure
run1.bat
src/egtry/doclet/PrintClass.java
example/Simple.java
classes/egtry/doclet/PrintClass.class
run1.bat
javadoc -docletpath classes -doclet egtry.doclet.PrintClass src/egtry/doclet/example/Simple.java
Target Source file Simple.java
package egtry.doclet.example;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Simple extends ArrayList implements Serializable, Comparable {
private int a=10;
private String[] argv;
static final String NAME="test";
public Simple() {
}
public Simple(Date date) {
}
public Simple(Date date, String name) {
}
public void service(List<String> list) throws Exception {
throw new Exception("some error");
}
public static void main(String[] args) {
}
@Override
public int compareTo(Object obj) {
return 0;
}
}
Output
C:\my1\projects\JavaAppEngine\ConsoleExample>javadoc -docletpath classes -doclet egtry.doclet.PrintClass src/egtry/doclet/example/Simple.java
Loading source file src/egtry/doclet/example/Simple.java...
Constructing Javadoc information...
egtry.doclet.example.Simple, Simple, egtry.doclet.example
fields: 3
package egtry.doclet.example;
public class Simple extends java.util.ArrayList implements java.io.Serializable,java.lang.Comparable{
private int a;
private java.lang.String[] argv;
static final java.lang.String NAME;
public Simple(){
}
public Simple(java.util.Date date){
}
public Simple(java.util.Date date,java.lang.String name){
}
public void service(java.util.List list) throws java.lang.Exception{}
public void main(java.lang.String[] args){}
public int compareTo(java.lang.Object obj){}
}
Doclet class PrintClass.java
package egtry.doclet;
import java.io.PrintWriter;
import java.io.StringWriter;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.ConstructorDoc;
import com.sun.javadoc.Doc;
import com.sun.javadoc.ExecutableMemberDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.ProgramElementDoc;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Type;
public class PrintClass {
private static StringWriter buff=new StringWriter();
private static PrintWriter out=new PrintWriter(buff);
public static boolean start(RootDoc rootDoc) {
ClassDoc[] classes=rootDoc.specifiedClasses();
if (classes.length>0) {
printClass(classes[0]);
}
return true;
}
public static void printClass(ClassDoc classDoc) {
//package names
String qualifiedName=classDoc.qualifiedName();
String name=classDoc.simpleTypeName();
String packageName;
if (qualifiedName.equals(name)) {
packageName="";
} else {
int lastDot=qualifiedName.lastIndexOf('.');
packageName=qualifiedName.substring(0, lastDot);
}
System.out.println(qualifiedName+", "+name+", "+packageName);
out.println("package "+packageName+";");
//class
out.print("\n"+getAccess(classDoc));
out.print(" class");
out.print(" "+classDoc.name());
//extends
String superClassName=classDoc.superclass().qualifiedName();
if (!superClassName.equals("java.lang.Object")) {
out.print(" extends "+superClassName);
}
//implements
ClassDoc[] interfaces=classDoc.interfaces();
if (interfaces!=null && interfaces.length>0) {
out.print(" implements");
for(int i=0; i<interfaces.length; i++) {
if (i==0) {
out.print(" "+interfaces[i].qualifiedName());
} else {
out.print(","+interfaces[i].qualifiedName());
}
}
}
out.println("{");
//fields
FieldDoc[] fields=classDoc.fields(false);
System.out.println("fields: "+fields.length);
for(int i=0; i<fields.length; i++) {
out.println();
printField(fields[i]);
}
//constructor
ConstructorDoc[] constructors=classDoc.constructors(false);
for(int i=0; i<constructors.length; i++) {
out.println();
printConstructor(constructors[i]);
}
//methods
MethodDoc[] methodDocs=classDoc.methods(false);
for(int i=0; i<methodDocs.length; i++) {
out.println();
printMethod(methodDocs[i]);
}
out.println("}");
System.out.println(buff.toString());
}
public static void printField(FieldDoc field) {
out.print(" ");
out.print(getAccess(field));
if (field.isStatic()) {
out.print(" static");
}
if (field.isFinal()) {
out.print(" final");
}
out.print(" "+field.type());
out.print(" "+field.name());
out.println(";");
}
public static void printConstructor(ConstructorDoc cDoc) {
out.print(getAccess(cDoc));
out.print(" "+cDoc.name());
//arguments
printArgv(cDoc);
printThrows(cDoc);
out.println("{");
out.println("}");
}
public static void printMethod(MethodDoc mDoc) {
out.print(getAccess(mDoc));
out.print(" "+mDoc.returnType());
out.print(" "+mDoc.name());
printArgv(mDoc);
printThrows(mDoc);
out.println("{}");
}
public static void printThrows(ExecutableMemberDoc doc) {
ClassDoc[] exceptions=doc.thrownExceptions();
for(int i=0; i<exceptions.length; i++) {
if (i==0) {
out.print(" throws "+exceptions[i].qualifiedName());
} else {
out.print(", "+exceptions[i].qualifiedName());
}
}
}
public static void printArgv(ExecutableMemberDoc doc) {
out.print("(");
Parameter[] argv=doc.parameters();
for(int i=0; i<argv.length; i++) {
Parameter p=argv[i];
if (i==0) {
out.print(p.type()+" "+p.name());
} else {
out.print(","+p.type()+" "+p.name());
}
}
out.print(")");
}
public static String getAccess(ProgramElementDoc doc) {
if (doc.isPublic()) {
return "public";
} else if (doc.isProtected()) {
return "protected";
} else if (doc.isPrivate()) {
return "private";
} else {
return "";
}
}
}