1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.checkstyle.exec;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import com.puppycrawl.tools.checkstyle.api.AuditEvent;
26 import com.puppycrawl.tools.checkstyle.api.AuditListener;
27 import com.puppycrawl.tools.checkstyle.api.AutomaticBean;
28 import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
29 import com.puppycrawl.tools.checkstyle.api.Configuration;
30 import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
31 import org.apache.commons.lang3.StringUtils;
32
33
34
35
36
37
38
39
40 public class CheckstyleCheckerListener extends AutomaticBean implements AuditListener {
41 private final List<File> sourceDirectories;
42
43 private CheckstyleResults results;
44
45 private String currentFile;
46
47 private List<AuditEvent> events;
48
49 private SeverityLevel severityLevel;
50
51 private Configuration checkstyleConfiguration;
52
53
54
55
56 public CheckstyleCheckerListener(File sourceDirectory) {
57 this.sourceDirectories = new ArrayList<>();
58 this.sourceDirectories.add(sourceDirectory);
59 }
60
61
62
63
64
65 public CheckstyleCheckerListener(File sourceDirectory, Configuration configuration) {
66 this.sourceDirectories = new ArrayList<>();
67 this.sourceDirectories.add(sourceDirectory);
68 this.checkstyleConfiguration = configuration;
69 }
70
71
72
73
74
75 public CheckstyleCheckerListener(Configuration configuration) {
76 this.sourceDirectories = new ArrayList<>();
77 this.checkstyleConfiguration = configuration;
78 }
79
80
81
82
83 public void addSourceDirectory(File sourceDirectory) {
84 this.sourceDirectories.add(sourceDirectory);
85 }
86
87
88
89
90 public void setSeverityLevelFilter(SeverityLevel severityLevel) {
91 this.severityLevel = severityLevel;
92 }
93
94
95
96
97 public SeverityLevel getSeverityLevelFilter() {
98 return severityLevel;
99 }
100
101
102 @Override
103 public void auditStarted(AuditEvent event) {
104 setResults(new CheckstyleResults());
105 }
106
107
108 @Override
109 public void auditFinished(AuditEvent event) {
110
111 }
112
113
114 @Override
115 public void fileStarted(AuditEvent event) {
116 final String fileName = StringUtils.replace(event.getFileName(), "\\", "/");
117
118 for (File sourceDirectory : sourceDirectories) {
119 String sourceDirectoryPath = StringUtils.replace(sourceDirectory.getPath(), "\\", "/");
120
121 if (fileName.startsWith(sourceDirectoryPath + "/")) {
122 currentFile = StringUtils.substring(fileName, sourceDirectoryPath.length() + 1);
123
124 events = getResults().getFileViolations(currentFile);
125
126 break;
127 }
128 }
129
130 if (events == null) {
131 events = new ArrayList<>();
132 }
133 }
134
135
136 @Override
137 public void fileFinished(AuditEvent event) {
138 getResults().setFileViolations(currentFile, events);
139 currentFile = null;
140 }
141
142
143 @Override
144 public void addError(AuditEvent event) {
145 if (SeverityLevel.IGNORE.equals(event.getSeverityLevel())) {
146 return;
147 }
148
149 if (severityLevel == null || severityLevel.equals(event.getSeverityLevel())) {
150 events.add(event);
151 }
152 }
153
154
155 @Override
156 public void addException(AuditEvent event, Throwable throwable) {
157
158 }
159
160
161 @Override
162 protected void finishLocalSetup() throws CheckstyleException {
163
164 }
165
166
167
168
169 public CheckstyleResults getResults() {
170 results.setConfiguration(checkstyleConfiguration);
171 return results;
172 }
173
174
175
176
177 public void setResults(CheckstyleResults results) {
178 this.results = results;
179 }
180
181
182
183
184
185 public Configuration getCheckstyleConfiguration() {
186 return checkstyleConfiguration;
187 }
188
189
190
191
192
193 public void setCheckstyleConfiguration(Configuration checkstyleConfiguration) {
194 this.checkstyleConfiguration = checkstyleConfiguration;
195 }
196 }