/**
* Parses Javadoc comment as DetailNode tree.
* @param javadocCommentAst
* DetailAST of Javadoc comment
* @return DetailNode tree of Javadoc comment
*/
public ParseStatus parseJavadocAsDetailNode(DetailAST javadocCommentAst) {
blockCommentLineNumber = javadocCommentAst.getLineNo();
final String javadocComment = JavadocUtils.getJavadocCommentContent(javadocCommentAst);
// Use a new error listener each time to be able to use
// one check instance for multiple files to be checked
// without getting side effects.
errorListener = new DescriptiveErrorListener();
// Log messages should have line number in scope of file,
// not in scope of Javadoc comment.
// Offset is line number of beginning of Javadoc comment.
errorListener.setOffset(javadocCommentAst.getLineNo() - 1);
final ParseStatus result = new ParseStatus();
try {
final JavadocParser javadocParser = createJavadocParser(javadocComment);
final ParseTree javadocParseTree = javadocParser.javadoc();
final DetailNode tree = convertParseTreeToDetailNode(javadocParseTree);
// adjust first line to indent of /**
adjustFirstLineToJavadocIndent(tree,
javadocCommentAst.getColumnNo()
+ JAVADOC_START.length());
result.setTree(tree);
result.firstNonTightHtmlTag = getFirstNonTightHtmlTag(javadocParser);
}
catch (ParseCancellationException | IllegalArgumentException ex) {
ParseErrorMessage parseErrorMessage = null;
if (ex.getCause() instanceof FailedPredicateException
|| ex.getCause() instanceof NoViableAltException) {
final RecognitionException recognitionEx = (RecognitionException) ex.getCause();
if (recognitionEx.getCtx() instanceof JavadocParser.HtmlTagContext) {
final Token htmlTagNameStart = getMissedHtmlTag(recognitionEx);
parseErrorMessage = new ParseErrorMessage(
errorListener.offset + htmlTagNameStart.getLine(),
MSG_JAVADOC_MISSED_HTML_CLOSE,
htmlTagNameStart.getCharPositionInLine(),
htmlTagNameStart.getText());
}
}
if (parseErrorMessage == null) {
// If syntax error occurs then message is printed by error listener
// and parser throws this runtime exception to stop parsing.
// Just stop processing current Javadoc comment.
parseErrorMessage = errorListener.getErrorMessage();
}
result.setParseErrorMessage(parseErrorMessage);
}
return result;
}
JavadocDetailNodeParser.java 文件源码
java
阅读 28
收藏 0
点赞 0
评论 0
项目:checkstyle
作者:
评论列表
文章目录