blob: d3717df7a62aa12029193e8a37b65fc2cfcb1af2 [file] [log] [blame]
package xalanjdoc;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.ExecutableMemberDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.ParamTag;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.ProgramElementDoc;
import com.sun.javadoc.ThrowsTag;
import com.sun.javadoc.Type;
public abstract class ExecutableMemberSubWriter extends AbstractSubWriter {
ExecutableMemberSubWriter(SubWriterHolderWriter writer) {
super(writer);
}
protected MethodDoc findMethod(ClassDoc cd, MethodDoc method) {
MethodDoc[] methods = cd.methods();
for(int i = 0; i < methods.length; ++i) {
if (method.name().equals(methods[i].name()) && method.signature().equals(methods[i].signature())) {
return methods[i];
}
}
return null;
}
protected int getReturnTypeLength(ExecutableMemberDoc member) {
if (member instanceof MethodDoc) {
MethodDoc method = (MethodDoc)member;
Type rettype = method.returnType();
ClassDoc cd = rettype.asClassDoc();
return cd == null
? rettype.typeName().length() + rettype.dimension().length()
: rettype.dimension().length() + (super.writer.isCrossClassIncluded(cd) ? cd.name().length() : cd.qualifiedName().length());
} else {
return -1;
}
}
protected MethodDoc implementedMethod(MethodDoc method, ClassDoc[] intfacs) {
for(int i = 0; i < intfacs.length; ++i) {
MethodDoc found = this.findMethod(intfacs[i], method);
if (found != null) {
return found;
}
}
return null;
}
protected ClassDoc implementsMethodInIntfac(MethodDoc method, ClassDoc[] intfacs) {
for(int i = 0; i < intfacs.length; ++i) {
MethodDoc[] methods = intfacs[i].methods();
if (methods.length > 0) {
for(int j = 0; j < methods.length; ++j) {
if (methods[j].name().equals(method.name()) && methods[j].signature().equals(method.signature())) {
return intfacs[i];
}
}
}
}
return null;
}
protected String name(ProgramElementDoc member) {
return member.name() + "()";
}
protected void printBodyHtmlEnd(ClassDoc cd) {
}
protected void printDeprecatedLink(ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
super.writer.printClassLink(emd.containingClass(), emd.name() + emd.signature(), emd.qualifiedName() + emd.flatSignature());
}
protected void printExceptions(ExecutableMemberDoc member) {
ClassDoc[] except = member.thrownExceptions();
if (except.length > 0) {
int retlen = this.getReturnTypeLength(member);
String indent = this.makeSpace(this.modifierString(member).length() + member.name().length() + retlen - 4);
super.writer.print('\n');
super.writer.print(indent);
super.writer.print("throws ");
indent = indent + " ";
super.writer.printClassLink(except[0]);
for(int i = 1; i < except.length; ++i) {
super.writer.print(",\n");
super.writer.print(indent);
super.writer.printClassLink(except[i]);
}
}
}
protected void printImplementsInfo(MethodDoc method) {
ClassDoc[] implIntfacs = method.containingClass().interfaces();
if (implIntfacs.length > 0) {
MethodDoc implementedMeth = this.implementedMethod(method, implIntfacs);
if (implementedMeth != null) {
ClassDoc intfac = implementedMeth.containingClass();
String methlink = "";
String intfaclink = super.writer.getClassLink(intfac);
super.writer.dt();
super.writer.boldText("doclet.Specified_By");
super.writer.dd();
methlink = super.writer.getDocLink(implementedMeth, implementedMeth.name());
super.writer.printText("doclet.in_interface", methlink, intfaclink);
}
}
}
protected void printInheritedSummaryLink(ClassDoc cd, ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
String name = emd.name();
super.writer.printClassLink(cd, name + emd.signature(), name, false);
}
protected void printMember(ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
String name = emd.name();
super.writer.anchor(name + emd.signature());
this.printHead(emd);
this.printSignature(emd);
this.printFullComment(emd);
}
protected void printParam(Parameter param) {
this.printTypedName(param.type(), param.name());
}
protected void printParamTags(ParamTag[] params) {
if (params.length > 0) {
super.writer.dt();
super.writer.boldText("doclet.Parameters");
for(int i = 0; i < params.length; ++i) {
ParamTag pt = params[i];
super.writer.dd();
super.writer.code();
this.print(pt.parameterName());
super.writer.codeEnd();
this.print(" - ");
super.writer.printInlineComment(pt);
}
}
}
protected void printParameters(ExecutableMemberDoc member) {
int paramstart = 0;
this.print('(');
Parameter[] params = member.parameters();
String indent = this.makeSpace(super.writer.displayLength);
while(paramstart < params.length) {
Parameter param = params[paramstart++];
if (!param.name().startsWith("this$")) {
this.printParam(param);
break;
}
}
for(int i = paramstart; i < params.length; ++i) {
super.writer.print(',');
super.writer.print('\n');
super.writer.print(indent);
this.printParam(params[i]);
}
super.writer.print(')');
}
protected void printSignature(ExecutableMemberDoc member) {
super.writer.displayLength = 0;
super.writer.pre();
this.printModifiers(member);
this.bold(member.name());
this.printParameters(member);
this.printExceptions(member);
super.writer.preEnd();
}
protected void printSummaryLink(ClassDoc cd, ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
ClassDoc mcd = member.containingClass();
String name = emd.name();
super.writer.bold();
if (mcd != cd) {
super.writer.print(mcd.name() + ".");
}
super.writer.printClassLink(mcd, name + emd.signature(), name, false);
super.writer.boldEnd();
super.writer.displayLength = name.length();
this.printParameters(emd);
}
protected void printThrowsTags(ThrowsTag[] thrown) {
if (thrown.length > 0) {
super.writer.dt();
super.writer.boldText("doclet.Throws");
for(int i = 0; i < thrown.length; ++i) {
ThrowsTag tt = thrown[i];
super.writer.dd();
ClassDoc cd = tt.exception();
if (cd == null) {
super.writer.print(tt.exceptionName());
} else {
super.writer.printClassLink(cd);
}
this.print(" - ");
super.writer.printInlineComment(tt);
}
}
}
}