diff --git a/config/spotbugs-exclude.xml b/config/spotbugs-exclude.xml
index ed083234f37..5d4133890f5 100644
--- a/config/spotbugs-exclude.xml
+++ b/config/spotbugs-exclude.xml
@@ -89,8 +89,10 @@
-
-
+
+
+
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java b/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java
index 2a508e39974..3bf90e54431 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java
@@ -89,11 +89,6 @@ public class JavadocDetailNodeParser {
*/
private int blockCommentLineNumber;
- /**
- * Custom error listener.
- */
- private DescriptiveErrorListener errorListener;
-
/**
* Parses Javadoc comment as DetailNode tree.
*
@@ -109,7 +104,7 @@ public ParseStatus parseJavadocAsDetailNode(DetailAST 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();
+ final DescriptiveErrorListener errorListener = new DescriptiveErrorListener();
// Log messages should have line number in scope of file,
// not in scope of Javadoc comment.
@@ -119,7 +114,7 @@ public ParseStatus parseJavadocAsDetailNode(DetailAST javadocCommentAst) {
final ParseStatus result = new ParseStatus();
try {
- final JavadocParser javadocParser = createJavadocParser(javadocComment);
+ final JavadocParser javadocParser = createJavadocParser(javadocComment, errorListener);
final ParseTree javadocParseTree = javadocParser.javadoc();
@@ -129,7 +124,8 @@ public ParseStatus parseJavadocAsDetailNode(DetailAST javadocCommentAst) {
javadocCommentAst.getColumnNo()
+ JAVADOC_START.length());
result.setTree(tree);
- result.firstNonTightHtmlTag = getFirstNonTightHtmlTag(javadocParser);
+ result.firstNonTightHtmlTag = getFirstNonTightHtmlTag(javadocParser,
+ errorListener.offset);
}
catch (ParseCancellationException | IllegalArgumentException ex) {
ParseErrorMessage parseErrorMessage = null;
@@ -165,9 +161,11 @@ public ParseStatus parseJavadocAsDetailNode(DetailAST javadocCommentAst) {
*
* @param blockComment
* block comment content.
+ * @param errorListener custom error listener
* @return parse tree
*/
- private JavadocParser createJavadocParser(String blockComment) {
+ private static JavadocParser createJavadocParser(String blockComment,
+ DescriptiveErrorListener errorListener) {
final JavadocLexer lexer = new JavadocLexer(CharStreams.fromString(blockComment));
final CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -519,9 +517,11 @@ else if (tokenType == JavadocTokenTypes.HTML_TAG_NAME && !stack.isEmpty()) {
* or the ones which are supposed to log violation for non-tight javadocs can utilize that.
*
* @param javadocParser The ANTLR recognizer instance which has been used to parse the javadoc
+ * @param javadocLineOffset The line number of beginning of the Javadoc comment
* @return First non-tight HTML tag if one exists; null otherwise
*/
- private Token getFirstNonTightHtmlTag(JavadocParser javadocParser) {
+ private static Token getFirstNonTightHtmlTag(JavadocParser javadocParser,
+ int javadocLineOffset) {
final CommonToken offendingToken;
final ParserRuleContext nonTightTagStartContext = javadocParser.nonTightTagStartContext;
if (nonTightTagStartContext == null) {
@@ -531,7 +531,7 @@ private Token getFirstNonTightHtmlTag(JavadocParser javadocParser) {
final Token token = ((TerminalNode) nonTightTagStartContext.getChild(1))
.getSymbol();
offendingToken = new CommonToken(token);
- offendingToken.setLine(offendingToken.getLine() + errorListener.offset);
+ offendingToken.setLine(offendingToken.getLine() + javadocLineOffset);
}
return offendingToken;
}