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 public final class MultiLineCommentCheck extends AbstractCheck {
19
20
21
22
23 private Pattern format = Pattern.compile("^$");
24
25
26
27
28
29 private String message = "";
30
31
32
33
34
35
36 @SuppressWarnings("PMD.AvoidStringBufferField")
37 private StringBuilder text;
38
39 @Override
40 public boolean isCommentNodesRequired() {
41 return true;
42 }
43
44 @Override
45 public int[] getDefaultTokens() {
46 return new int[]{
47 TokenTypes.BLOCK_COMMENT_BEGIN,
48 TokenTypes.COMMENT_CONTENT,
49 TokenTypes.BLOCK_COMMENT_END,
50 };
51 }
52
53 @Override
54 public int[] getAcceptableTokens() {
55 return this.getDefaultTokens();
56 }
57
58 @Override
59 public int[] getRequiredTokens() {
60 return this.getDefaultTokens();
61 }
62
63 @Override
64 public void visitToken(final DetailAST ast) {
65 if (ast.getType() == TokenTypes.BLOCK_COMMENT_BEGIN) {
66 this.text = new StringBuilder(ast.getText());
67 } else if (ast.getType() == TokenTypes.COMMENT_CONTENT) {
68 this.text.append(ast.getText());
69 } else {
70 this.text.append(ast.getText());
71 final Matcher matcher = this.format.matcher(this.text.toString());
72 if (matcher.matches()) {
73 this.log(ast, this.message);
74 }
75 }
76 }
77
78
79
80
81
82
83
84
85
86 public void setFormat(final String fmt) {
87 this.format = Pattern.compile(fmt);
88 }
89
90
91
92
93
94
95
96
97
98
99 public void setMessage(final String msg) {
100 this.message = msg;
101 }
102 }