1 package org.apache.maven.plugin.checkstyle;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 import org.apache.maven.plugin.AbstractMojo;
8 import org.apache.maven.plugin.MojoExecutionException;
9
10
11
12
13
14
15
16
17
18
19 @SuppressWarnings( "all" )
20 public class HelpMojo
21 extends AbstractMojo
22 {
23
24
25
26
27
28 private boolean detail;
29
30
31
32
33
34
35 private java.lang.String goal;
36
37
38
39
40
41
42 private int lineLength;
43
44
45
46
47
48
49 private int indentSize;
50
51
52
53 public void execute()
54 throws MojoExecutionException
55 {
56 if ( lineLength <= 0 )
57 {
58 getLog().warn( "The parameter 'lineLength' should be positive, using '80' as default." );
59 lineLength = 80;
60 }
61 if ( indentSize <= 0 )
62 {
63 getLog().warn( "The parameter 'indentSize' should be positive, using '2' as default." );
64 indentSize = 2;
65 }
66
67 StringBuffer sb = new StringBuffer();
68
69 append( sb, "org.apache.maven.plugins:maven-checkstyle-plugin:2.9.1", 0 );
70 append( sb, "", 0 );
71
72 append( sb, "Maven Checkstyle Plugin", 0 );
73 append( sb, "Generates a report on violations of code style and optionally fails the build if violations are detected.", 1 );
74 append( sb, "", 0 );
75
76 if ( goal == null || goal.length() <= 0 )
77 {
78 append( sb, "This plugin has 4 goals:", 0 );
79 append( sb, "", 0 );
80 }
81
82 if ( goal == null || goal.length() <= 0 || "check".equals( goal ) )
83 {
84 append( sb, "checkstyle:check", 0 );
85 append( sb, "Perform a violation check against the last Checkstyle run to see if there are any violations. It reads the Checkstyle output file, counts the number of violations found and displays it on the console.", 1 );
86 append( sb, "", 0 );
87 if ( detail )
88 {
89 append( sb, "Available parameters:", 1 );
90 append( sb, "", 0 );
91
92 append( sb, "cacheFile (Default: ${project.build.directory}/checkstyle-cachefile)", 2 );
93 append( sb, "Specifies the cache file used to speed up Checkstyle on successive runs.", 3 );
94 append( sb, "", 0 );
95
96 append( sb, "configLocation (Default: config/sun_checks.xml)", 2 );
97 append( sb, "Specifies the location of the XML configuration to use.\n\nPotential values are a filesystem path, a URL, or a classpath resource. This parameter expects that the contents of the location conform to the xml format (Checkstyle Checker module) configuration of rulesets.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the configuration is copied into the ${project.build.directory}/checkstyle-configuration.xml file before being passed to Checkstyle as a configuration.\n\nThere are 4 predefined rulesets.\n\n-\tconfig/sun_checks.xml: Sun Checks.\n-\tconfig/turbine_checks.xml: Turbine Checks.\n-\tconfig/avalon_checks.xml: Avalon Checks.\n-\tconfig/maven_checks.xml: Maven Source Checks.\n", 3 );
98 append( sb, "Expression: ${checkstyle.config.location}", 3 );
99 append( sb, "", 0 );
100
101 append( sb, "consoleOutput (Default: false)", 2 );
102 append( sb, "Output errors to console.", 3 );
103 append( sb, "", 0 );
104
105 append( sb, "encoding (Default: ${project.build.sourceEncoding})", 2 );
106 append( sb, "The file encoding to use when reading the source files. If the property project.build.sourceEncoding is not set, the platform default encoding is used. Note: This parameter always overrides the property charset from Checkstyle\'s TreeWalker module.", 3 );
107 append( sb, "Expression: ${encoding}", 3 );
108 append( sb, "", 0 );
109
110 append( sb, "excludes", 2 );
111 append( sb, "Specifies the names filter of the source files to be excluded for Checkstyle.", 3 );
112 append( sb, "Expression: ${checkstyle.excludes}", 3 );
113 append( sb, "", 0 );
114
115 append( sb, "failOnViolation (Default: true)", 2 );
116 append( sb, "Do we fail the build on a violation?", 3 );
117 append( sb, "Expression: ${checkstyle.failOnViolation}", 3 );
118 append( sb, "", 0 );
119
120 append( sb, "failsOnError (Default: false)", 2 );
121 append( sb, "Specifies if the build should fail upon a violation.", 3 );
122 append( sb, "", 0 );
123
124 append( sb, "headerLocation (Default: LICENSE.txt)", 2 );
125 append( sb, "Specifies the location of the License file (a.k.a. the header file) that can be used by Checkstyle to verify that source code has the correct license header.\n\nYou need to use ${checkstyle.header.file} in your Checkstyle xml configuration to reference the name of this header file.\n\nFor instance:\n\n<module name=\'RegexpHeader\'> <property name=\'headerFile\' value=\'${checkstyle.header.file}\'/> </module>\n", 3 );
126 append( sb, "Expression: ${checkstyle.header.file}", 3 );
127 append( sb, "", 0 );
128
129 append( sb, "includes (Default: **/*.java)", 2 );
130 append( sb, "Specifies the names filter of the source files to be used for Checkstyle.", 3 );
131 append( sb, "Required: Yes", 3 );
132 append( sb, "Expression: ${checkstyle.includes}", 3 );
133 append( sb, "", 0 );
134
135 append( sb, "includeTestSourceDirectory (Default: ${false})", 2 );
136 append( sb, "Include or not the test source directory to be used for Checkstyle.", 3 );
137 append( sb, "", 0 );
138
139 append( sb, "logViolationsToConsole (Default: false)", 2 );
140 append( sb, "Output the detected violations to the console.", 3 );
141 append( sb, "Expression: ${checkstyle.console}", 3 );
142 append( sb, "", 0 );
143
144 append( sb, "maxAllowedViolations (Default: 0)", 2 );
145 append( sb, "The maximum number of allowed violations. The execution fails only if the number of violations is above this limit.", 3 );
146 append( sb, "Expression: ${checkstyle.maxAllowedViolations}", 3 );
147 append( sb, "", 0 );
148
149 append( sb, "outputFile (Default: ${project.build.directory}/checkstyle-result.xml)", 2 );
150 append( sb, "Specifies the path and filename to save the Checkstyle output. The format of the output file is determined by the outputFileFormat parameter.", 3 );
151 append( sb, "Expression: ${checkstyle.output.file}", 3 );
152 append( sb, "", 0 );
153
154 append( sb, "outputFileFormat (Default: xml)", 2 );
155 append( sb, "Specifies the format of the output to be used when writing to the output file. Valid values are \'plain\' and \'xml\'.", 3 );
156 append( sb, "Expression: ${checkstyle.output.format}", 3 );
157 append( sb, "", 0 );
158
159 append( sb, "propertiesLocation", 2 );
160 append( sb, "Specifies the location of the properties file.\n\nThis parameter is resolved as URL, File then resource. If successfully resolved, the contents of the properties location is copied into the ${project.build.directory}/checkstyle-checker.properties file before being passed to Checkstyle for loading.\n\nThe contents of the propertiesLocation will be made available to Checkstyle for specifying values for parameters within the xml configuration (specified in the configLocation parameter).\n", 3 );
161 append( sb, "Expression: ${checkstyle.properties.location}", 3 );
162 append( sb, "", 0 );
163
164 append( sb, "propertyExpansion", 2 );
165 append( sb, "Allows for specifying raw property expansion information.", 3 );
166 append( sb, "", 0 );
167
168 append( sb, "skip (Default: false)", 2 );
169 append( sb, "Skip entire check.", 3 );
170 append( sb, "Expression: ${checkstyle.skip}", 3 );
171 append( sb, "", 0 );
172
173 append( sb, "skipExec (Default: false)", 2 );
174 append( sb, "Skip checktyle execution will only scan the outputFile.", 3 );
175 append( sb, "Expression: ${checkstyle.skipExec}", 3 );
176 append( sb, "", 0 );
177
178 append( sb, "sourceDirectory (Default: ${project.build.sourceDirectory})", 2 );
179 append( sb, "Specifies the location of the source directory to be used for Checkstyle.", 3 );
180 append( sb, "Required: Yes", 3 );
181 append( sb, "", 0 );
182
183 append( sb, "suppressionsFileExpression (Default: checkstyle.suppressions.file)", 2 );
184 append( sb, "The key to be used in the properties for the suppressions file.", 3 );
185 append( sb, "Expression: ${checkstyle.suppression.expression}", 3 );
186 append( sb, "", 0 );
187
188 append( sb, "suppressionsLocation", 2 );
189 append( sb, "Specifies the location of the suppressions XML file to use.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the suppressions XML is copied into the ${project.build.directory}/checkstyle-supressions.xml file before being passed to Checkstyle for loading.\n\nSee suppressionsFileExpression for the property that will be made available to your checkstyle configuration.\n", 3 );
190 append( sb, "Expression: ${checkstyle.suppressions.location}", 3 );
191 append( sb, "", 0 );
192
193 append( sb, "testSourceDirectory (Default: ${project.build.testSourceDirectory})", 2 );
194 append( sb, "Specifies the location of the test source directory to be used for Checkstyle.", 3 );
195 append( sb, "", 0 );
196
197 append( sb, "useFile", 2 );
198 append( sb, "If null, the Checkstyle plugin will display violations on stdout. Otherwise, a text file will be created with the violations.", 3 );
199 append( sb, "", 0 );
200
201 append( sb, "violationSeverity (Default: error)", 2 );
202 append( sb, "The lowest severity level that is considered a violation. Valid values are \'error\', \'warning\' and \'info\'.", 3 );
203 append( sb, "Expression: ${checkstyle.violationSeverity}", 3 );
204 append( sb, "", 0 );
205 }
206 }
207
208 if ( goal == null || goal.length() <= 0 || "checkstyle".equals( goal ) )
209 {
210 append( sb, "checkstyle:checkstyle", 0 );
211 append( sb, "Perform a Checkstyle analysis, and generate a report on violations.", 1 );
212 append( sb, "", 0 );
213 if ( detail )
214 {
215 append( sb, "Available parameters:", 1 );
216 append( sb, "", 0 );
217
218 append( sb, "cacheFile (Default: ${project.build.directory}/checkstyle-cachefile)", 2 );
219 append( sb, "Specifies the cache file used to speed up Checkstyle on successive runs.", 3 );
220 append( sb, "", 0 );
221
222 append( sb, "configLocation (Default: config/sun_checks.xml)", 2 );
223 append( sb, "Specifies the location of the XML configuration to use.\n\nPotential values are a filesystem path, a URL, or a classpath resource. This parameter expects that the contents of the location conform to the xml format (Checkstyle Checker module) configuration of rulesets.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the configuration is copied into the ${project.build.directory}/checkstyle-configuration.xml file before being passed to Checkstyle as a configuration.\n\nThere are 4 predefined rulesets.\n\n-\tconfig/sun_checks.xml: Sun Checks.\n-\tconfig/turbine_checks.xml: Turbine Checks.\n-\tconfig/avalon_checks.xml: Avalon Checks.\n-\tconfig/maven_checks.xml: Maven Source Checks.\n", 3 );
224 append( sb, "Expression: ${checkstyle.config.location}", 3 );
225 append( sb, "", 0 );
226
227 append( sb, "consoleOutput (Default: false)", 2 );
228 append( sb, "Output errors to console.", 3 );
229 append( sb, "", 0 );
230
231 append( sb, "enableFilesSummary (Default: true)", 2 );
232 append( sb, "Specifies if the Files summary should be enabled or not.", 3 );
233 append( sb, "Expression: ${checkstyle.enable.files.summary}", 3 );
234 append( sb, "", 0 );
235
236 append( sb, "enableRSS (Default: true)", 2 );
237 append( sb, "Specifies if the RSS should be enabled or not.", 3 );
238 append( sb, "Expression: ${checkstyle.enable.rss}", 3 );
239 append( sb, "", 0 );
240
241 append( sb, "enableRulesSummary (Default: true)", 2 );
242 append( sb, "Specifies if the Rules summary should be enabled or not.", 3 );
243 append( sb, "Expression: ${checkstyle.enable.rules.summary}", 3 );
244 append( sb, "", 0 );
245
246 append( sb, "enableSeveritySummary (Default: true)", 2 );
247 append( sb, "Specifies if the Severity summary should be enabled or not.", 3 );
248 append( sb, "Expression: ${checkstyle.enable.severity.summary}", 3 );
249 append( sb, "", 0 );
250
251 append( sb, "encoding (Default: ${project.build.sourceEncoding})", 2 );
252 append( sb, "The file encoding to use when reading the source files. If the property project.build.sourceEncoding is not set, the platform default encoding is used. Note: This parameter always overrides the property charset from Checkstyle\'s TreeWalker module.", 3 );
253 append( sb, "Expression: ${encoding}", 3 );
254 append( sb, "", 0 );
255
256 append( sb, "excludes", 2 );
257 append( sb, "Specifies the names filter of the source files to be excluded for Checkstyle.", 3 );
258 append( sb, "Expression: ${checkstyle.excludes}", 3 );
259 append( sb, "", 0 );
260
261 append( sb, "failsOnError (Default: false)", 2 );
262 append( sb, "Specifies if the build should fail upon a violation.", 3 );
263 append( sb, "", 0 );
264
265 append( sb, "format (Default: sun)", 2 );
266 append( sb, "Deprecated. Use configLocation instead.", 3 );
267 append( sb, "", 0 );
268 append( sb, "Specifies what predefined check set to use. Available sets are \'sun\' (for the Sun coding conventions), \'turbine\', and \'avalon\'.", 3 );
269 append( sb, "", 0 );
270
271 append( sb, "headerFile", 2 );
272 append( sb, "Deprecated. Use headerLocation instead.", 3 );
273 append( sb, "", 0 );
274 append( sb, "Specifies the location of the License file (a.k.a. the header file) that is used by Checkstyle to verify that source code has the correct license header.", 3 );
275 append( sb, "Expression: ${basedir}/LICENSE.txt", 3 );
276 append( sb, "", 0 );
277
278 append( sb, "headerLocation (Default: LICENSE.txt)", 2 );
279 append( sb, "Specifies the location of the License file (a.k.a. the header file) that can be used by Checkstyle to verify that source code has the correct license header.\n\nYou need to use ${checkstyle.header.file} in your Checkstyle xml configuration to reference the name of this header file.\n\nFor instance:\n\n<module name=\'RegexpHeader\'> <property name=\'headerFile\' value=\'${checkstyle.header.file}\'/> </module>\n", 3 );
280 append( sb, "Expression: ${checkstyle.header.file}", 3 );
281 append( sb, "", 0 );
282
283 append( sb, "includes (Default: **/*.java)", 2 );
284 append( sb, "Specifies the names filter of the source files to be used for Checkstyle.", 3 );
285 append( sb, "Required: Yes", 3 );
286 append( sb, "Expression: ${checkstyle.includes}", 3 );
287 append( sb, "", 0 );
288
289 append( sb, "includeTestSourceDirectory (Default: ${false})", 2 );
290 append( sb, "Include or not the test source directory to be used for Checkstyle.", 3 );
291 append( sb, "", 0 );
292
293 append( sb, "linkXRef (Default: true)", 2 );
294 append( sb, "Link the violation line numbers to the source xref. Will link automatically if Maven JXR plugin is being used.", 3 );
295 append( sb, "Expression: ${linkXRef}", 3 );
296 append( sb, "", 0 );
297
298 append( sb, "outputDirectory (Default: ${project.reporting.outputDirectory})", 2 );
299 append( sb, "The output directory for the report. Note that this parameter is only evaluated if the goal is run directly from the command line. If the goal is run indirectly as part of a site generation, the output directory configured in Maven Site Plugin is used instead.", 3 );
300 append( sb, "Required: Yes", 3 );
301 append( sb, "", 0 );
302
303 append( sb, "outputFile (Default: ${project.build.directory}/checkstyle-result.xml)", 2 );
304 append( sb, "Specifies the path and filename to save the checkstyle output. The format of the output file is determined by the outputFileFormat parameter.", 3 );
305 append( sb, "Expression: ${checkstyle.output.file}", 3 );
306 append( sb, "", 0 );
307
308 append( sb, "outputFileFormat (Default: xml)", 2 );
309 append( sb, "Specifies the format of the output to be used when writing to the output file. Valid values are \'plain\' and \'xml\'.", 3 );
310 append( sb, "Expression: ${checkstyle.output.format}", 3 );
311 append( sb, "", 0 );
312
313 append( sb, "packageNamesFile", 2 );
314 append( sb, "Deprecated. Use packageNamesLocation instead.", 3 );
315 append( sb, "", 0 );
316 append( sb, "Specifies the location of the package names XML to be used to configure Checkstyle.", 3 );
317 append( sb, "", 0 );
318
319 append( sb, "packageNamesLocation", 2 );
320 append( sb, "Specifies the location of the package names XML to be used to configure the Checkstyle Packages.\n\nThis parameter is resolved as resource, URL, then file. If resolved to a resource, or a URL, the contents of the package names XML is copied into the ${project.build.directory}/checkstyle-packagenames.xml file before being passed to Checkstyle for loading.\n", 3 );
321 append( sb, "", 0 );
322
323 append( sb, "propertiesFile", 2 );
324 append( sb, "Deprecated. Use propertiesLocation instead.", 3 );
325 append( sb, "", 0 );
326 append( sb, "Specifies the location of the Checkstyle properties file that will be used to check the source.", 3 );
327 append( sb, "", 0 );
328
329 append( sb, "propertiesLocation", 2 );
330 append( sb, "Specifies the location of the properties file.\n\nThis parameter is resolved as URL, File then resource. If successfully resolved, the contents of the properties location is copied into the ${project.build.directory}/checkstyle-checker.properties file before being passed to Checkstyle for loading.\n\nThe contents of the propertiesLocation will be made available to Checkstyle for specifying values for parameters within the xml configuration (specified in the configLocation parameter).\n", 3 );
331 append( sb, "Expression: ${checkstyle.properties.location}", 3 );
332 append( sb, "", 0 );
333
334 append( sb, "propertiesURL", 2 );
335 append( sb, "Deprecated. Use propertiesLocation instead.", 3 );
336 append( sb, "", 0 );
337 append( sb, "Specifies the URL of the Checkstyle properties that will be used to check the source.", 3 );
338 append( sb, "", 0 );
339
340 append( sb, "propertyExpansion", 2 );
341 append( sb, "Allows for specifying raw property expansion information.", 3 );
342 append( sb, "", 0 );
343
344 append( sb, "skip (Default: false)", 2 );
345 append( sb, "Skip entire check.", 3 );
346 append( sb, "Expression: ${checkstyle.skip}", 3 );
347 append( sb, "", 0 );
348
349 append( sb, "sourceDirectory (Default: ${project.build.sourceDirectory})", 2 );
350 append( sb, "Specifies the location of the source directory to be used for Checkstyle.", 3 );
351 append( sb, "Required: Yes", 3 );
352 append( sb, "", 0 );
353
354 append( sb, "suppressionsFile", 2 );
355 append( sb, "Deprecated. Use suppressionsLocation instead.", 3 );
356 append( sb, "", 0 );
357 append( sb, "Specifies the location of the suppressions XML file to use. The plugin defines a Checkstyle property named checkstyle.suppressions.file with the value of this property. This allows using the Checkstyle property in your own custom checkstyle configuration file when specifying a suppressions file.", 3 );
358 append( sb, "", 0 );
359
360 append( sb, "suppressionsFileExpression (Default: checkstyle.suppressions.file)", 2 );
361 append( sb, "The key to be used in the properties for the suppressions file.", 3 );
362 append( sb, "Expression: ${checkstyle.suppression.expression}", 3 );
363 append( sb, "", 0 );
364
365 append( sb, "suppressionsLocation", 2 );
366 append( sb, "Specifies the location of the suppressions XML file to use.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the suppressions XML is copied into the ${project.build.directory}/checkstyle-supressions.xml file before being passed to Checkstyle for loading.\n\nSee suppressionsFileExpression for the property that will be made available to your checkstyle configuration.\n", 3 );
367 append( sb, "Expression: ${checkstyle.suppressions.location}", 3 );
368 append( sb, "", 0 );
369
370 append( sb, "testSourceDirectory (Default: ${project.build.testSourceDirectory})", 2 );
371 append( sb, "Specifies the location of the test source directory to be used for Checkstyle.", 3 );
372 append( sb, "", 0 );
373
374 append( sb, "useFile", 2 );
375 append( sb, "If null, the Checkstyle plugin will display violations on stdout. Otherwise, a text file will be created with the violations.", 3 );
376 append( sb, "", 0 );
377
378 append( sb, "xrefLocation (Default: ${project.reporting.outputDirectory}/xref)", 2 );
379 append( sb, "Location of the Xrefs to link to.", 3 );
380 append( sb, "", 0 );
381 }
382 }
383
384 if ( goal == null || goal.length() <= 0 || "checkstyle-aggregate".equals( goal ) )
385 {
386 append( sb, "checkstyle:checkstyle-aggregate", 0 );
387 append( sb, "Perform a Checkstyle analysis, and generate a report on violations, aggregating the result in the project which started this mojo.", 1 );
388 append( sb, "", 0 );
389 if ( detail )
390 {
391 append( sb, "Available parameters:", 1 );
392 append( sb, "", 0 );
393
394 append( sb, "cacheFile (Default: ${project.build.directory}/checkstyle-cachefile)", 2 );
395 append( sb, "Specifies the cache file used to speed up Checkstyle on successive runs.", 3 );
396 append( sb, "", 0 );
397
398 append( sb, "configLocation (Default: config/sun_checks.xml)", 2 );
399 append( sb, "Specifies the location of the XML configuration to use.\n\nPotential values are a filesystem path, a URL, or a classpath resource. This parameter expects that the contents of the location conform to the xml format (Checkstyle Checker module) configuration of rulesets.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the configuration is copied into the ${project.build.directory}/checkstyle-configuration.xml file before being passed to Checkstyle as a configuration.\n\nThere are 4 predefined rulesets.\n\n-\tconfig/sun_checks.xml: Sun Checks.\n-\tconfig/turbine_checks.xml: Turbine Checks.\n-\tconfig/avalon_checks.xml: Avalon Checks.\n-\tconfig/maven_checks.xml: Maven Source Checks.\n", 3 );
400 append( sb, "Expression: ${checkstyle.config.location}", 3 );
401 append( sb, "", 0 );
402
403 append( sb, "consoleOutput (Default: false)", 2 );
404 append( sb, "Output errors to console.", 3 );
405 append( sb, "", 0 );
406
407 append( sb, "enableFilesSummary (Default: true)", 2 );
408 append( sb, "Specifies if the Files summary should be enabled or not.", 3 );
409 append( sb, "Expression: ${checkstyle.enable.files.summary}", 3 );
410 append( sb, "", 0 );
411
412 append( sb, "enableRSS (Default: true)", 2 );
413 append( sb, "Specifies if the RSS should be enabled or not.", 3 );
414 append( sb, "Expression: ${checkstyle.enable.rss}", 3 );
415 append( sb, "", 0 );
416
417 append( sb, "enableRulesSummary (Default: true)", 2 );
418 append( sb, "Specifies if the Rules summary should be enabled or not.", 3 );
419 append( sb, "Expression: ${checkstyle.enable.rules.summary}", 3 );
420 append( sb, "", 0 );
421
422 append( sb, "enableSeveritySummary (Default: true)", 2 );
423 append( sb, "Specifies if the Severity summary should be enabled or not.", 3 );
424 append( sb, "Expression: ${checkstyle.enable.severity.summary}", 3 );
425 append( sb, "", 0 );
426
427 append( sb, "encoding (Default: ${project.build.sourceEncoding})", 2 );
428 append( sb, "The file encoding to use when reading the source files. If the property project.build.sourceEncoding is not set, the platform default encoding is used. Note: This parameter always overrides the property charset from Checkstyle\'s TreeWalker module.", 3 );
429 append( sb, "Expression: ${encoding}", 3 );
430 append( sb, "", 0 );
431
432 append( sb, "excludes", 2 );
433 append( sb, "Specifies the names filter of the source files to be excluded for Checkstyle.", 3 );
434 append( sb, "Expression: ${checkstyle.excludes}", 3 );
435 append( sb, "", 0 );
436
437 append( sb, "failsOnError (Default: false)", 2 );
438 append( sb, "Specifies if the build should fail upon a violation.", 3 );
439 append( sb, "", 0 );
440
441 append( sb, "headerLocation (Default: LICENSE.txt)", 2 );
442 append( sb, "Specifies the location of the License file (a.k.a. the header file) that can be used by Checkstyle to verify that source code has the correct license header.\n\nYou need to use ${checkstyle.header.file} in your Checkstyle xml configuration to reference the name of this header file.\n\nFor instance:\n\n<module name=\'RegexpHeader\'> <property name=\'headerFile\' value=\'${checkstyle.header.file}\'/> </module>\n", 3 );
443 append( sb, "Expression: ${checkstyle.header.file}", 3 );
444 append( sb, "", 0 );
445
446 append( sb, "includes (Default: **/*.java)", 2 );
447 append( sb, "Specifies the names filter of the source files to be used for Checkstyle.", 3 );
448 append( sb, "Required: Yes", 3 );
449 append( sb, "Expression: ${checkstyle.includes}", 3 );
450 append( sb, "", 0 );
451
452 append( sb, "includeTestSourceDirectory (Default: ${false})", 2 );
453 append( sb, "Include or not the test source directory to be used for Checkstyle.", 3 );
454 append( sb, "", 0 );
455
456 append( sb, "linkXRef (Default: true)", 2 );
457 append( sb, "Link the violation line numbers to the source xref. Will link automatically if Maven JXR plugin is being used.", 3 );
458 append( sb, "Expression: ${linkXRef}", 3 );
459 append( sb, "", 0 );
460
461 append( sb, "outputDirectory (Default: ${project.reporting.outputDirectory})", 2 );
462 append( sb, "The output directory for the report. Note that this parameter is only evaluated if the goal is run directly from the command line. If the goal is run indirectly as part of a site generation, the output directory configured in Maven Site Plugin is used instead.", 3 );
463 append( sb, "Required: Yes", 3 );
464 append( sb, "", 0 );
465
466 append( sb, "outputFile (Default: ${project.build.directory}/checkstyle-result.xml)", 2 );
467 append( sb, "Specifies the path and filename to save the checkstyle output. The format of the output file is determined by the outputFileFormat parameter.", 3 );
468 append( sb, "Expression: ${checkstyle.output.file}", 3 );
469 append( sb, "", 0 );
470
471 append( sb, "outputFileFormat (Default: xml)", 2 );
472 append( sb, "Specifies the format of the output to be used when writing to the output file. Valid values are \'plain\' and \'xml\'.", 3 );
473 append( sb, "Expression: ${checkstyle.output.format}", 3 );
474 append( sb, "", 0 );
475
476 append( sb, "propertiesLocation", 2 );
477 append( sb, "Specifies the location of the properties file.\n\nThis parameter is resolved as URL, File then resource. If successfully resolved, the contents of the properties location is copied into the ${project.build.directory}/checkstyle-checker.properties file before being passed to Checkstyle for loading.\n\nThe contents of the propertiesLocation will be made available to Checkstyle for specifying values for parameters within the xml configuration (specified in the configLocation parameter).\n", 3 );
478 append( sb, "Expression: ${checkstyle.properties.location}", 3 );
479 append( sb, "", 0 );
480
481 append( sb, "propertyExpansion", 2 );
482 append( sb, "Allows for specifying raw property expansion information.", 3 );
483 append( sb, "", 0 );
484
485 append( sb, "skip (Default: false)", 2 );
486 append( sb, "Skip entire check.", 3 );
487 append( sb, "Expression: ${checkstyle.skip}", 3 );
488 append( sb, "", 0 );
489
490 append( sb, "sourceDirectory (Default: ${project.build.sourceDirectory})", 2 );
491 append( sb, "Specifies the location of the source directory to be used for Checkstyle.", 3 );
492 append( sb, "Required: Yes", 3 );
493 append( sb, "", 0 );
494
495 append( sb, "suppressionsFileExpression (Default: checkstyle.suppressions.file)", 2 );
496 append( sb, "The key to be used in the properties for the suppressions file.", 3 );
497 append( sb, "Expression: ${checkstyle.suppression.expression}", 3 );
498 append( sb, "", 0 );
499
500 append( sb, "suppressionsLocation", 2 );
501 append( sb, "Specifies the location of the suppressions XML file to use.\n\nThis parameter is resolved as resource, URL, then file. If successfully resolved, the contents of the suppressions XML is copied into the ${project.build.directory}/checkstyle-supressions.xml file before being passed to Checkstyle for loading.\n\nSee suppressionsFileExpression for the property that will be made available to your checkstyle configuration.\n", 3 );
502 append( sb, "Expression: ${checkstyle.suppressions.location}", 3 );
503 append( sb, "", 0 );
504
505 append( sb, "testSourceDirectory (Default: ${project.build.testSourceDirectory})", 2 );
506 append( sb, "Specifies the location of the test source directory to be used for Checkstyle.", 3 );
507 append( sb, "", 0 );
508
509 append( sb, "useFile", 2 );
510 append( sb, "If null, the Checkstyle plugin will display violations on stdout. Otherwise, a text file will be created with the violations.", 3 );
511 append( sb, "", 0 );
512
513 append( sb, "xrefLocation (Default: ${project.reporting.outputDirectory}/xref)", 2 );
514 append( sb, "Location of the Xrefs to link to.", 3 );
515 append( sb, "", 0 );
516 }
517 }
518
519 if ( goal == null || goal.length() <= 0 || "help".equals( goal ) )
520 {
521 append( sb, "checkstyle:help", 0 );
522 append( sb, "Display help information on maven-checkstyle-plugin.\nCall\n\u00a0\u00a0mvn\u00a0checkstyle:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 );
523 append( sb, "", 0 );
524 if ( detail )
525 {
526 append( sb, "Available parameters:", 1 );
527 append( sb, "", 0 );
528
529 append( sb, "detail (Default: false)", 2 );
530 append( sb, "If true, display all settable properties for each goal.", 3 );
531 append( sb, "Expression: ${detail}", 3 );
532 append( sb, "", 0 );
533
534 append( sb, "goal", 2 );
535 append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 );
536 append( sb, "Expression: ${goal}", 3 );
537 append( sb, "", 0 );
538
539 append( sb, "indentSize (Default: 2)", 2 );
540 append( sb, "The number of spaces per indentation level, should be positive.", 3 );
541 append( sb, "Expression: ${indentSize}", 3 );
542 append( sb, "", 0 );
543
544 append( sb, "lineLength (Default: 80)", 2 );
545 append( sb, "The maximum length of a display line, should be positive.", 3 );
546 append( sb, "Expression: ${lineLength}", 3 );
547 append( sb, "", 0 );
548 }
549 }
550
551 if ( getLog().isInfoEnabled() )
552 {
553 getLog().info( sb.toString() );
554 }
555 }
556
557
558
559
560
561
562
563
564
565
566 private static String repeat( String str, int repeat )
567 {
568 StringBuffer buffer = new StringBuffer( repeat * str.length() );
569
570 for ( int i = 0; i < repeat; i++ )
571 {
572 buffer.append( str );
573 }
574
575 return buffer.toString();
576 }
577
578
579
580
581
582
583
584
585
586 private void append( StringBuffer sb, String description, int indent )
587 {
588 for ( Iterator it = toLines( description, indent, indentSize, lineLength ).iterator(); it.hasNext(); )
589 {
590 sb.append( it.next().toString() ).append( '\n' );
591 }
592 }
593
594
595
596
597
598
599
600
601
602
603
604 private static List toLines( String text, int indent, int indentSize, int lineLength )
605 {
606 List<String> lines = new ArrayList<String>();
607
608 String ind = repeat( "\t", indent );
609 String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" );
610 for ( int i = 0; i < plainLines.length; i++ )
611 {
612 toLines( lines, ind + plainLines[i], indentSize, lineLength );
613 }
614
615 return lines;
616 }
617
618
619
620
621
622
623
624
625
626 private static void toLines( List<String> lines, String line, int indentSize, int lineLength )
627 {
628 int lineIndent = getIndentLevel( line );
629 StringBuffer buf = new StringBuffer( 256 );
630 String[] tokens = line.split( " +" );
631 for ( int i = 0; i < tokens.length; i++ )
632 {
633 String token = tokens[i];
634 if ( i > 0 )
635 {
636 if ( buf.length() + token.length() >= lineLength )
637 {
638 lines.add( buf.toString() );
639 buf.setLength( 0 );
640 buf.append( repeat( " ", lineIndent * indentSize ) );
641 }
642 else
643 {
644 buf.append( ' ' );
645 }
646 }
647 for ( int j = 0; j < token.length(); j++ )
648 {
649 char c = token.charAt( j );
650 if ( c == '\t' )
651 {
652 buf.append( repeat( " ", indentSize - buf.length() % indentSize ) );
653 }
654 else if ( c == '\u00A0' )
655 {
656 buf.append( ' ' );
657 }
658 else
659 {
660 buf.append( c );
661 }
662 }
663 }
664 lines.add( buf.toString() );
665 }
666
667
668
669
670
671
672
673 private static int getIndentLevel( String line )
674 {
675 int level = 0;
676 for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ )
677 {
678 level++;
679 }
680 for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ )
681 {
682 if ( line.charAt( i ) == '\t' )
683 {
684 level++;
685 break;
686 }
687 }
688 return level;
689 }
690 }