27
27
import java .io .OutputStream ;
28
28
import java .io .Reader ;
29
29
import java .nio .file .Files ;
30
+ import java .nio .file .Path ;
30
31
import java .util .ArrayList ;
31
32
import java .util .Collections ;
32
33
import java .util .List ;
@@ -476,6 +477,14 @@ public class CheckstyleViolationCheckMojo extends AbstractMojo {
476
477
@ Parameter (defaultValue = "false" )
477
478
private boolean omitIgnoredModules ;
478
479
480
+ /**
481
+ * Specifies whether generated source files should be excluded from Checkstyle.
482
+ *
483
+ * @since 3.3.1
484
+ */
485
+ @ Parameter (property = "checkstyle.excludeGeneratedSources" , defaultValue = "false" )
486
+ private boolean excludeGeneratedSources ;
487
+
479
488
private ByteArrayOutputStream stringOutputStream ;
480
489
481
490
private File outputXmlFile ;
@@ -832,7 +841,7 @@ private List<Artifact> getCheckstylePluginDependenciesAsArtifacts(Map<String, Pl
832
841
833
842
private List <File > getSourceDirectories () {
834
843
if (sourceDirectories == null ) {
835
- sourceDirectories = project .getCompileSourceRoots ();
844
+ sourceDirectories = filterBuildTarget ( project .getCompileSourceRoots () );
836
845
}
837
846
List <File > sourceDirs = new ArrayList <>(sourceDirectories .size ());
838
847
for (String sourceDir : sourceDirectories ) {
@@ -843,12 +852,31 @@ private List<File> getSourceDirectories() {
843
852
844
853
private List <File > getTestSourceDirectories () {
845
854
if (testSourceDirectories == null ) {
846
- testSourceDirectories = project .getTestCompileSourceRoots ();
855
+ testSourceDirectories = filterBuildTarget ( project .getTestCompileSourceRoots () );
847
856
}
848
857
List <File > testSourceDirs = new ArrayList <>(testSourceDirectories .size ());
849
858
for (String testSourceDir : testSourceDirectories ) {
850
859
testSourceDirs .add (FileUtils .resolveFile (project .getBasedir (), testSourceDir ));
851
860
}
852
861
return testSourceDirs ;
853
862
}
863
+
864
+ private List <String > filterBuildTarget (List <String > sourceDirectories ) {
865
+ if (!excludeGeneratedSources ) {
866
+ return sourceDirectories ;
867
+ }
868
+
869
+ List <String > filtered = new ArrayList <>(sourceDirectories .size ());
870
+ Path buildTarget = FileUtils .resolveFile (
871
+ project .getBasedir (), project .getBuild ().getDirectory ())
872
+ .toPath ();
873
+
874
+ for (String sourceDir : sourceDirectories ) {
875
+ Path src = FileUtils .resolveFile (project .getBasedir (), sourceDir ).toPath ();
876
+ if (!src .startsWith (buildTarget )) {
877
+ filtered .add (sourceDir );
878
+ }
879
+ }
880
+ return filtered ;
881
+ }
854
882
}
0 commit comments