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
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public final class BracketsStructureCheck extends AbstractCheck {
37
38 @Override
39 public int[] getDefaultTokens() {
40 return new int[] {
41 TokenTypes.LITERAL_NEW,
42 TokenTypes.METHOD_CALL,
43 };
44 }
45
46 @Override
47 public int[] getAcceptableTokens() {
48 return this.getDefaultTokens();
49 }
50
51 @Override
52 public int[] getRequiredTokens() {
53 return this.getDefaultTokens();
54 }
55
56 @Override
57 public void visitToken(final DetailAST ast) {
58 if (ast.getType() == TokenTypes.METHOD_CALL
59 || ast.getType() == TokenTypes.LITERAL_NEW) {
60 this.checkParams(ast);
61 } else {
62 final DetailAST brackets = ast.findFirstToken(TokenTypes.LPAREN);
63 if (brackets != null) {
64 this.checkParams(brackets);
65 }
66 }
67 }
68
69
70
71
72
73 private void checkParams(final DetailAST node) {
74 final DetailAST closing = node.findFirstToken(TokenTypes.RPAREN);
75 if (closing != null) {
76 this.checkLines(node, node.getLineNo(), closing.getLineNo());
77 }
78 }
79
80
81
82
83
84
85
86 private void checkLines(final DetailAST node, final int start,
87 final int end) {
88 if (start != end) {
89 final DetailAST elist = node.findFirstToken(TokenTypes.ELIST);
90 final int pline = elist.getLineNo();
91 if (pline == start) {
92 this.log(pline, "Parameters should start on a new line");
93 }
94 this.checkExpressionList(elist, end);
95 }
96 }
97
98
99
100
101
102
103 private void checkExpressionList(final DetailAST elist, final int end) {
104 if (elist.getChildCount() > 0) {
105 DetailAST last = elist.getLastChild();
106 while (last.getChildCount() > 0) {
107 last = last.getLastChild();
108 }
109 final int lline = last.getLineNo();
110 if (lline == end) {
111 this.log(lline, "Closing bracket should be on a new line");
112 }
113 }
114 }
115
116 }