Skip to content
This repository has been archived by the owner on Sep 22, 2022. It is now read-only.

Commit

Permalink
Issue checkstyle#4925: Remove thread-unsafe context from the `Abstrac…
Browse files Browse the repository at this point in the history
…tJavadocCheck` class
  • Loading branch information
soon authored and romani committed Aug 17, 2017
1 parent 290b5b0 commit 29901f7
Showing 1 changed file with 21 additions and 11 deletions.
Expand Up @@ -84,19 +84,14 @@ protected Map<String, ParseStatus> initialValue() {
};

/**
* Parses content of Javadoc comment as DetailNode tree.
* The file context.
* @noinspection ThreadLocalNotStaticFinal
*/
private final JavadocDetailNodeParser parser = new JavadocDetailNodeParser();
private final ThreadLocal<FileContext> context = ThreadLocal.withInitial(FileContext::new);

/** The javadoc tokens the check is interested in. */
private final Set<Integer> javadocTokens = new HashSet<>();

/**
* DetailAST node of considered Javadoc comment that is just a block comment
* in Java language syntax tree.
*/
private DetailAST blockCommentAst;

/**
* Returns the default javadoc token types a check is interested in.
* @return the default javadoc token types
Expand Down Expand Up @@ -260,7 +255,7 @@ public final void finishTree(DetailAST rootAST) {
public final void visitToken(DetailAST blockCommentNode) {
if (JavadocUtils.isJavadocComment(blockCommentNode)) {
// store as field, to share with child Checks
blockCommentAst = blockCommentNode;
context.get().blockCommentAst = blockCommentNode;

final String treeCacheKey = blockCommentNode.getLineNo() + ":"
+ blockCommentNode.getColumnNo();
Expand All @@ -271,7 +266,7 @@ public final void visitToken(DetailAST blockCommentNode) {
result = TREE_CACHE.get().get(treeCacheKey);
}
else {
result = parser.parseJavadocAsDetailNode(blockCommentNode);
result = context.get().parser.parseJavadocAsDetailNode(blockCommentNode);
TREE_CACHE.get().put(treeCacheKey, result);
}

Expand All @@ -293,7 +288,7 @@ public final void visitToken(DetailAST blockCommentNode) {
* @return A block comment in the syntax tree.
*/
protected DetailAST getBlockCommentAst() {
return blockCommentAst;
return context.get().blockCommentAst;
}

/**
Expand Down Expand Up @@ -348,4 +343,19 @@ private boolean shouldBeProcessed(DetailNode curNode) {
return javadocTokens.contains(curNode.getType());
}

/**
* The file context holder.
*/
private static class FileContext {
/**
* Parses content of Javadoc comment as DetailNode tree.
*/
private final JavadocDetailNodeParser parser = new JavadocDetailNodeParser();

/**
* DetailAST node of considered Javadoc comment that is just a block comment
* in Java language syntax tree.
*/
private DetailAST blockCommentAst;
}
}

0 comments on commit 29901f7

Please sign in to comment.