package org.tldgen.model; import com.sun.javadoc.AnnotationDesc; import com.sun.javadoc.Doc; import com.sun.javadoc.MethodDoc; import com.sun.javadoc.ParamTag; import com.sun.javadoc.Parameter; import com.sun.javadoc.ProgramElementDoc; import com.sun.javadoc.Tag; /** * Information about a JSP function * @author icoloma * */ public class Function extends AbstractTldContainerElement { /** the method signature */ private String signature; /** the parameters javadoc */ private FunctionParameter[] parameters; /** the documentation of the return value */ private String returnDescription; @Override public void postProcessElement(ProgramElementDoc doc, AnnotationDesc annotation) { MethodDoc mdoc = (MethodDoc) doc; super.postProcessElement(doc, annotation); //setDescription(doc.getRawCommentText()); processParameters(mdoc); signature = mdoc.returnType() + " " + mdoc.name() + mdoc.signature(); processReturnDescription(mdoc); } private void processReturnDescription(MethodDoc mdoc) { Tag[] r = mdoc.tags("return"); if (r.length > 0) { returnDescription = r[0].text(); } } /** * Extract information for function parameters */ private void processParameters(MethodDoc mdoc) { Parameter[] params = mdoc.parameters(); ParamTag[] paramTags = mdoc.paramTags(); parameters = new FunctionParameter[params.length]; int i = 0; for (Parameter param : params) { String paramName = param.name(); String description = null; for (ParamTag paramTag : paramTags) { if (paramTag.parameterName().equals(paramName)) { description = paramTag.parameterComment(); break; } } parameters[i++] = new FunctionParameter(param.type().toString(), paramName, description); } } public static Function createinstance(MethodDoc doc, AnnotationDesc annotation) { Function function = new Function(); function.postProcessElement(doc, annotation); return function; } public String getSignature() { return signature; } @Override protected String calculateDefaultElementName(Doc doc) { return doc.name(); } public FunctionParameter[] getParameters() { return parameters; } public void setSignature(String signature) { this.signature = signature; } public void setParameters(FunctionParameter[] parameters) { this.parameters = parameters; } public String getReturnDescription() { return returnDescription; } public void setReturnDescription(String returnDescription) { this.returnDescription = returnDescription; } public String getTldDescription() { StringBuilder sb = new StringBuilder(); if (getDescription() != null) { sb.append(getDescription()); } if (parameters != null && parameters.length > 0) { for (FunctionParameter param : parameters) { sb.append("\n * " + param.getType() + " " + param.getName() + ": " + param.getDescription()); } } if (returnDescription != null) { sb.append("\nReturn: ").append(returnDescription); } return sb.length() == 0? null : sb.toString(); } }