package com.webcohesion.enunciate.javac.javadoc; import com.webcohesion.enunciate.javac.decorations.element.DecoratedExecutableElement; import java.util.HashMap; /** * @author Ryan Heaton */ public class ParamDocComment implements DocComment { private final DecoratedExecutableElement executableElement; private final String paramName; private String value; public ParamDocComment(DecoratedExecutableElement executableElement, String paramName) { this.executableElement = executableElement; this.paramName = paramName; } @Override public String get() { if (this.value == null) { JavaDoc javaDoc = this.executableElement.getJavaDoc(); HashMap<String, String> paramsComments = loadParamsComments(javaDoc); String comment = paramsComments.get(this.paramName); if (comment != null) { this.value = comment; } else { this.value = ""; } } return this.value; } protected HashMap<String, String> loadParamsComments(JavaDoc javaDoc) { return loadParamsComments("param", javaDoc); } protected HashMap<String, String> loadParamsComments(String tagName, JavaDoc jd) { HashMap<String, String> paramComments = new HashMap<String, String>(); if (jd.get(tagName) != null) { for (String paramDoc : jd.get(tagName)) { paramDoc = paramDoc.trim().replaceFirst("\\s+", " "); int spaceIndex = JavaDoc.indexOfFirstWhitespace(paramDoc); String param = paramDoc.substring(0, spaceIndex); String paramComment = ""; if ((spaceIndex + 1) < paramDoc.length()) { paramComment = paramDoc.substring(spaceIndex + 1); } paramComments.put(param, paramComment); } } return paramComments; } }