1
2
3
4
5 package com.qulice.checkstyle;
6
7 import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
8 import com.puppycrawl.tools.checkstyle.api.DetailAST;
9 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
10 import java.util.regex.Matcher;
11 import java.util.regex.Pattern;
12
13
14
15
16
17
18
19 public final class MultiLineCommentCheck extends AbstractCheck {
20
21
22
23
24 private static final Pattern EMPTY = Pattern.compile("^$");
25
26
27
28
29
30 private Pattern format;
31
32
33
34
35
36 private String message;
37
38
39
40
41
42
43 @SuppressWarnings("PMD.AvoidStringBufferField")
44 private final StringBuilder text;
45
46
47
48
49 public MultiLineCommentCheck() {
50 this.format = MultiLineCommentCheck.EMPTY;
51 this.message = "";
52 this.text = new StringBuilder();
53 }
54
55 @Override
56 public boolean isCommentNodesRequired() {
57 return true;
58 }
59
60 @Override
61 public int[] getDefaultTokens() {
62 return new int[]{
63 TokenTypes.BLOCK_COMMENT_BEGIN,
64 TokenTypes.COMMENT_CONTENT,
65 TokenTypes.BLOCK_COMMENT_END,
66 };
67 }
68
69 @Override
70 public int[] getAcceptableTokens() {
71 return this.getDefaultTokens();
72 }
73
74 @Override
75 public int[] getRequiredTokens() {
76 return this.getDefaultTokens();
77 }
78
79 @Override
80 public void visitToken(final DetailAST ast) {
81 if (ast.getType() == TokenTypes.BLOCK_COMMENT_BEGIN) {
82 this.text.setLength(0);
83 this.text.append(ast.getText());
84 } else if (ast.getType() == TokenTypes.COMMENT_CONTENT) {
85 this.text.append(ast.getText());
86 } else {
87 this.text.append(ast.getText());
88 final Matcher matcher = this.format.matcher(this.text.toString());
89 if (matcher.matches()) {
90 this.log(ast, this.message);
91 }
92 }
93 }
94
95
96
97
98
99
100
101
102
103 public void setFormat(final String fmt) {
104 this.format = Pattern.compile(fmt);
105 }
106
107
108
109
110
111
112
113
114
115
116 public void setMessage(final String msg) {
117 this.message = msg;
118 }
119 }