2727import java .io .OutputStream ;
2828import java .io .Reader ;
2929import java .nio .file .Files ;
30+ import java .nio .file .Path ;
3031import java .util .ArrayList ;
3132import java .util .Collections ;
3233import java .util .List ;
@@ -476,6 +477,14 @@ public class CheckstyleViolationCheckMojo extends AbstractMojo {
476477 @ Parameter (defaultValue = "false" )
477478 private boolean omitIgnoredModules ;
478479
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+
479488 private ByteArrayOutputStream stringOutputStream ;
480489
481490 private File outputXmlFile ;
@@ -832,7 +841,7 @@ private List<Artifact> getCheckstylePluginDependenciesAsArtifacts(Map<String, Pl
832841
833842 private List <File > getSourceDirectories () {
834843 if (sourceDirectories == null ) {
835- sourceDirectories = project .getCompileSourceRoots ();
844+ sourceDirectories = filterBuildTarget ( project .getCompileSourceRoots () );
836845 }
837846 List <File > sourceDirs = new ArrayList <>(sourceDirectories .size ());
838847 for (String sourceDir : sourceDirectories ) {
@@ -843,12 +852,31 @@ private List<File> getSourceDirectories() {
843852
844853 private List <File > getTestSourceDirectories () {
845854 if (testSourceDirectories == null ) {
846- testSourceDirectories = project .getTestCompileSourceRoots ();
855+ testSourceDirectories = filterBuildTarget ( project .getTestCompileSourceRoots () );
847856 }
848857 List <File > testSourceDirs = new ArrayList <>(testSourceDirectories .size ());
849858 for (String testSourceDir : testSourceDirectories ) {
850859 testSourceDirs .add (FileUtils .resolveFile (project .getBasedir (), testSourceDir ));
851860 }
852861 return testSourceDirs ;
853862 }
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+ }
854882}
0 commit comments