Search in sources :

Example 11 with JavadocTags

use of com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTags in project debezium by debezium.

the class JavaDocUtil method getJavadocTags.

/**
 * Gets validTags from a given piece of Javadoc.
 *
 * @param aCmt the Javadoc comment to process.
 * @param aTagType the type of validTags we're interested in
 * @return all standalone validTags from the given javadoc.
 */
public static JavadocTags getJavadocTags(TextBlock aCmt, JavadocTagType aTagType) {
    final String[] text = aCmt.getText();
    final List<JavadocTag> tags = Lists.newArrayList();
    final List<InvalidJavadocTag> invalidTags = Lists.newArrayList();
    Pattern blockTagPattern = Utils.createPattern("/\\*{2,}\\s*@(\\p{Alpha}+)\\s");
    for (int i = 0; i < text.length; i++) {
        final String s = text[i];
        final Matcher blockTagMatcher = blockTagPattern.matcher(s);
        if ((aTagType.equals(JavadocTagType.ALL) || aTagType.equals(JavadocTagType.BLOCK)) && blockTagMatcher.find()) {
            final String tagName = blockTagMatcher.group(1);
            String content = s.substring(blockTagMatcher.end(1));
            if (content.endsWith("*/")) {
                content = content.substring(0, content.length() - 2);
            }
            final int line = aCmt.getStartLineNo() + i;
            int col = blockTagMatcher.start(1) - 1;
            if (i == 0) {
                col += aCmt.getStartColNo();
            }
            if (JavadocTagInfo.isValidName(tagName)) {
                tags.add(new JavadocTag(line, col, tagName, content.trim()));
            } else {
                invalidTags.add(new InvalidJavadocTag(line, col, tagName));
            }
        } else // No block tag, so look for inline validTags
        if (aTagType.equals(JavadocTagType.ALL) || aTagType.equals(JavadocTagType.INLINE)) {
            // Match JavaDoc text after comment characters
            final Pattern commentPattern = Utils.createPattern("^\\s*(?:/\\*{2,}|\\*+)\\s*(.*)");
            final Matcher commentMatcher = commentPattern.matcher(s);
            final String commentContents;
            // offset including comment characters
            final int commentOffset;
            if (!commentMatcher.find()) {
                // No leading asterisks, still valid
                commentContents = s;
                commentOffset = 0;
            } else {
                commentContents = commentMatcher.group(1);
                commentOffset = commentMatcher.start(1) - 1;
            }
            // The last '}' may
            final Pattern tagPattern = Utils.createPattern(".*?\\{@(\\p{Alpha}+)\\s+([^\\}]*)");
            // appear on the next
            // line ...
            final Matcher tagMatcher = tagPattern.matcher(commentContents);
            while (tagMatcher.find()) {
                if (tagMatcher.groupCount() == 2) {
                    final String tagName = tagMatcher.group(1);
                    final String tagValue = tagMatcher.group(2).trim();
                    final int line = aCmt.getStartLineNo() + i;
                    int col = commentOffset + (tagMatcher.start(1) - 1);
                    if (i == 0) {
                        col += aCmt.getStartColNo();
                    }
                    if (JavadocTagInfo.isValidName(tagName)) {
                        tags.add(new JavadocTag(line, col, tagName, tagValue));
                    } else {
                        invalidTags.add(new InvalidJavadocTag(line, col, tagName));
                    }
                }
            // else Error: Unexpected match count for inline JavaDoc tag
            }
        }
        blockTagPattern = Utils.createPattern("^\\s*\\**\\s*@(\\p{Alpha}+)\\s");
    }
    return new JavadocTags(tags, invalidTags);
}
Also used : Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) InvalidJavadocTag(com.puppycrawl.tools.checkstyle.checks.javadoc.InvalidJavadocTag) InvalidJavadocTag(com.puppycrawl.tools.checkstyle.checks.javadoc.InvalidJavadocTag) JavadocTag(com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTag) JavadocTags(com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTags)

Aggregations

JavadocTags (com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTags)11 Comment (com.puppycrawl.tools.checkstyle.api.Comment)7 InvalidJavadocTag (com.puppycrawl.tools.checkstyle.checks.javadoc.InvalidJavadocTag)5 JavadocTag (com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTag)5 Test (org.junit.jupiter.api.Test)4 Test (org.junit.Test)3 ArrayList (java.util.ArrayList)2 Matcher (java.util.regex.Matcher)2 FileContents (com.puppycrawl.tools.checkstyle.api.FileContents)1 TextBlock (com.puppycrawl.tools.checkstyle.api.TextBlock)1 JavadocTagInfo (com.puppycrawl.tools.checkstyle.checks.javadoc.JavadocTagInfo)1 TagInfo (com.puppycrawl.tools.checkstyle.checks.javadoc.utils.TagInfo)1 Pattern (java.util.regex.Pattern)1