blob: 1f2188f2ab1cea1ba428a8f93f2928d1489762a6 [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.ProgramElementDoc;
import com.sun.javadoc.SeeTag;
import com.sun.javadoc.Tag;
import com.sun.javadoc.ThrowsTag;
import com.sun.javadoc.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MethodSubWriter extends ExecutableMemberSubWriter {
MethodSubWriter(SubWriterHolderWriter writer) {
super(writer);
}
protected void composeInheritedMethodMap(ClassDoc icd, List tcms, Map imsmap, List hierarchy) {
MethodDoc[] methods = icd.methods();
List methodlist = new ArrayList();
for(int i = 0; i < methods.length; ++i) {
if (!this.contains(tcms, methods[i])) {
methodlist.add(methods[i]);
tcms.add(methods[i]);
}
}
imsmap.put(icd, methodlist);
hierarchy.add(icd);
}
protected boolean contains(List tcmethods, MethodDoc method) {
for(int i = 0; i < tcmethods.size(); ++i) {
MethodDoc tcmethod = (MethodDoc)tcmethods.get(i);
if (tcmethod.name().equals(method.name()) && tcmethod.signature().equals(method.signature())) {
return true;
}
}
return false;
}
protected Map getInheritedMethodMapForClass(ClassDoc cd, List tcms, Map imsmap, List hierarchy) {
for(ClassDoc icd = cd.superclass(); icd != null; icd = icd.superclass()) {
this.composeInheritedMethodMap(icd, tcms, imsmap, hierarchy);
}
return imsmap;
}
protected Map getInheritedMethodMapForInterface(ClassDoc cd, List tims, Map imsmap, List hierarchy) {
ClassDoc[] iin = cd.interfaces();
for(int i = 0; i < iin.length; ++i) {
this.composeInheritedMethodMap(iin[i], tims, imsmap, hierarchy);
}
for(int i = 0; i < iin.length; ++i) {
this.getInheritedMethodMapForInterface(iin[i], tims, imsmap, hierarchy);
}
return imsmap;
}
public ProgramElementDoc[] members(ClassDoc cd) {
return this.eligibleMembers(cd.methods());
}
protected void printHeader(ClassDoc cd) {
super.writer.anchor("method_detail");
super.writer.printTableHeadingBackground(super.writer.getText("doclet.Method_Detail"));
}
protected void printInheritedMembersInfo(ClassDoc icd, List members) {
if (members.size() > 0) {
Collections.sort(members);
this.printInheritedSummaryHeader(icd);
this.printInheritedSummaryMember(icd, (ProgramElementDoc)members.get(0));
for(int i = 1; i < members.size(); ++i) {
super.writer.println(", ");
this.printInheritedSummaryMember(icd, (ProgramElementDoc)members.get(i));
}
this.printInheritedSummaryFooter(icd);
}
}
public void printInheritedMembersSummary(ClassDoc cd) {
List tcms = Group.asList(cd.methods());
Map imsmap = new HashMap();
List hierarchy = new ArrayList();
if (cd.isClass()) {
imsmap = this.getInheritedMethodMapForClass(cd, tcms, imsmap, hierarchy);
} else {
imsmap = this.getInheritedMethodMapForInterface(cd, tcms, imsmap, hierarchy);
}
if (hierarchy.size() > 0) {
for(int i = 0; i < hierarchy.size(); ++i) {
ClassDoc classkey = (ClassDoc)hierarchy.get(i);
List methodlist = (List)imsmap.get(classkey);
this.printInheritedMembersInfo(classkey, methodlist);
}
}
}
public void printInheritedSummaryAnchor(ClassDoc cd) {
super.writer.anchor("methods_inherited_from_class_" + cd.qualifiedName());
}
public void printInheritedSummaryLabel(ClassDoc cd) {
String classlink = super.writer.getPreQualifiedClassLink(cd);
super.writer.bold();
if (cd.isClass()) {
super.writer.printText("doclet.Methods_Inherited_From_Class", classlink);
} else {
super.writer.printText("doclet.Methods_Inherited_From_Interface", classlink);
}
super.writer.boldEnd();
}
protected void printNavDetailLink(boolean link) {
if (link) {
super.writer.printHyperLink("", "method_detail", super.writer.getText("doclet.navMethod"));
} else {
super.writer.printText("doclet.navMethod");
}
}
protected void printNavSummaryLink(ClassDoc cd, boolean link) {
if (link) {
super.writer
.printHyperLink("", cd == null ? "method_summary" : "methods_inherited_from_class_" + cd.qualifiedName(), super.writer.getText("doclet.navMethod"));
} else {
super.writer.printText("doclet.navMethod");
}
}
protected void printOverridden(ClassDoc overridden, MethodDoc method) {
if (overridden != null) {
String overriddenclasslink = super.writer.getClassLink(overridden);
String methlink = "";
String name = method.name();
super.writer.dt();
super.writer.boldText("doclet.Overrides");
super.writer.dd();
methlink = super.writer.getClassLink(overridden, name + method.signature(), name, false);
super.writer.printText("doclet.in_class", methlink, overriddenclasslink);
}
}
protected void printReturnTag(Tag[] returns) {
if (returns.length > 0) {
super.writer.dt();
super.writer.boldText("doclet.Returns");
super.writer.dd();
super.writer.printInlineComment(returns[0]);
}
}
protected void printReturnType(MethodDoc method) {
Type type = method.returnType();
if (type != null) {
this.printTypeLink(type);
this.print(' ');
}
}
protected void printSignature(ExecutableMemberDoc member) {
super.writer.displayLength = 0;
super.writer.pre();
this.printModifiers(member);
this.printReturnType((MethodDoc)member);
this.bold(member.name());
this.printParameters(member);
this.printExceptions(member);
super.writer.preEnd();
}
public void printSummaryAnchor(ClassDoc cd) {
super.writer.anchor("method_summary");
}
public void printSummaryLabel(ClassDoc cd) {
super.writer.boldText("doclet.Method_Summary");
}
protected void printSummaryType(ProgramElementDoc member) {
MethodDoc meth = (MethodDoc)member;
this.printModifierAndType(meth, meth.returnType());
}
protected void printTags(ProgramElementDoc member) {
MethodDoc method = (MethodDoc)member;
ParamTag[] params = method.paramTags();
Tag[] returns = method.tags("return");
Tag[] sinces = method.tags("since");
ThrowsTag[] thrown = method.throwsTags();
SeeTag[] sees = method.seeTags();
ClassDoc[] intfacs = member.containingClass().interfaces();
ClassDoc overridden = method.overriddenClass();
Tag[] usages = member.tags("xsl.usage");
if (usages.length + params.length + returns.length + thrown.length + sinces.length + intfacs.length + sees.length > 0 || overridden != null) {
super.writer.dd();
super.writer.dl();
this.printImplementsInfo(method);
this.printParamTags(params);
this.printReturnTag(returns);
this.printThrowsTags(thrown);
this.printOverridden(overridden, method);
super.writer.printSinceTag(method);
super.writer.printSeeTags(method);
super.writer.printUsageTags(method);
super.writer.dlEnd();
super.writer.ddEnd();
}
}
}