1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.checks.whitespace;
21
22 import java.util.Locale;
23
24 import com.puppycrawl.tools.checkstyle.StatelessCheck;
25 import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
26 import com.puppycrawl.tools.checkstyle.api.DetailAST;
27 import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
28
29
30
31
32
33
34
35 @StatelessCheck
36 public abstract class AbstractParenPadCheck
37 extends AbstractCheck {
38
39
40
41
42
43 public static final String MSG_WS_FOLLOWED = "ws.followed";
44
45
46
47
48
49 public static final String MSG_WS_NOT_FOLLOWED = "ws.notFollowed";
50
51
52
53
54
55 public static final String MSG_WS_PRECEDED = "ws.preceded";
56
57
58
59
60
61 public static final String MSG_WS_NOT_PRECEDED = "ws.notPreceded";
62
63
64 private static final char OPEN_PARENTHESIS = '(';
65
66
67 private static final char CLOSE_PARENTHESIS = ')';
68
69
70 private PadOption option = PadOption.NOSPACE;
71
72
73
74
75
76
77 public void setOption(String optionStr) {
78 option = PadOption.valueOf(optionStr.trim().toUpperCase(Locale.ENGLISH));
79 }
80
81
82
83
84
85 protected void processLeft(DetailAST ast) {
86 final String line = getLines()[ast.getLineNo() - 1];
87 final int after = ast.getColumnNo() + 1;
88 if (after < line.length()) {
89 if (option == PadOption.NOSPACE
90 && Character.isWhitespace(line.charAt(after))) {
91 log(ast, MSG_WS_FOLLOWED, OPEN_PARENTHESIS);
92 }
93 else if (option == PadOption.SPACE
94 && !Character.isWhitespace(line.charAt(after))
95 && line.charAt(after) != CLOSE_PARENTHESIS) {
96 log(ast, MSG_WS_NOT_FOLLOWED, OPEN_PARENTHESIS);
97 }
98 }
99 }
100
101
102
103
104
105 protected void processRight(DetailAST ast) {
106 final int before = ast.getColumnNo() - 1;
107 if (before >= 0) {
108 final String line = getLines()[ast.getLineNo() - 1];
109 if (option == PadOption.NOSPACE
110 && Character.isWhitespace(line.charAt(before))
111 && !CommonUtil.hasWhitespaceBefore(before, line)) {
112 log(ast, MSG_WS_PRECEDED, CLOSE_PARENTHESIS);
113 }
114 else if (option == PadOption.SPACE
115 && !Character.isWhitespace(line.charAt(before))
116 && line.charAt(before) != OPEN_PARENTHESIS) {
117 log(ast, MSG_WS_NOT_PRECEDED, CLOSE_PARENTHESIS);
118 }
119 }
120 }
121
122 }