package sharpen.core.framework; import java.util.*; import org.eclipse.jdt.core.dom.*; public class JavadocUtility { public static TagElement getJavadocTag(BodyDeclaration node, String tagName) { final List<TagElement> found = getJavadocTags(node, tagName); return firstTagElementOrNull(found); } public static TagElement getJavadocTag(PackageDeclaration node, String tagName) { final List<TagElement> found = getJavadocTags(node, tagName); return firstTagElementOrNull(found); } private static TagElement firstTagElementOrNull( final List<TagElement> tagElements) { return tagElements.isEmpty() ? null : tagElements.get(0); } public static boolean containsJavadoc(BodyDeclaration node, final String tag) { return null != getJavadocTag(node, tag); } public static List<TagElement> getJavadocTags(PackageDeclaration node, String tagName) { return getJavaDocTags(node.getJavadoc(), tagName); } public static List<TagElement> getJavadocTags(BodyDeclaration node, String tagName) { return getJavaDocTags(node.getJavadoc(), tagName); } private static List<TagElement> getJavaDocTags(final Javadoc javadoc, String tag) { if (null == javadoc) { return Collections.emptyList(); } final List<TagElement> tags = Types.cast(javadoc.tags()); return collectTags(tags, tag, new ArrayList<TagElement>()); } public static ArrayList<TagElement> collectTags(final List<TagElement> tags, String tagName, final ArrayList<TagElement> accumulator) { for (TagElement element : tags) { if (tagName.equals(element.getTagName())) { accumulator.add(element); } } return accumulator; } public static boolean isTextFragment(List<ASTNode> fragments, int index) { return (fragments.get(index) instanceof TextElement); } public static String textFragment(List<ASTNode> fragments, final int index) { return ((TextElement)fragments.get(index)).getText().trim(); } public static List<ASTNode> fragmentsFrom(TagElement element) { return Types.cast(element.fragments()); } public static boolean hasSingleTextFragment(TagElement element) { final List<ASTNode> fragments = fragmentsFrom(element); return fragments.size() == 1 && isTextFragment(fragments, 0); } public static String singleTextFragmentFrom(TagElement element) { if (!hasSingleTextFragment(element)) { throw new IllegalArgumentException(ASTUtility.sourceInformation(element) + ": expecting a single textual argument"); } return textFragment(fragmentsFrom(element), 0); } }