}
final String suppressionsFilePath = getSuppressionsFilePath( request );
FilterSet filterSet = getSuppressionsFilterSet( suppressionsFilePath );
Checker checker = new Checker();
// setup classloader, needed to avoid "Unable to get class information for ..." errors
List<String> classPathStrings = new ArrayList<String>();
List<String> outputDirectories = new ArrayList<String>();
// stand-alone
Collection<File> sourceDirectories = null;
Collection<File> testSourceDirectories = request.getTestSourceDirectories();
// aggregator
Map<MavenProject, Collection<File>> sourceDirectoriesByProject = new HashMap<MavenProject, Collection<File>>();
Map<MavenProject, Collection<File>> testSourceDirectoriesByProject = new HashMap<MavenProject, Collection<File>>();
if ( request.isAggregate() )
{
for ( MavenProject childProject : request.getReactorProjects() )
{
sourceDirectories = new ArrayList<File>( childProject.getCompileSourceRoots().size() );
List<String> compileSourceRoots = childProject.getCompileSourceRoots();
for ( String compileSourceRoot : compileSourceRoots )
{
sourceDirectories.add( new File( compileSourceRoot ) );
}
sourceDirectoriesByProject.put( childProject, sourceDirectories );
testSourceDirectories = new ArrayList<File>( childProject.getTestCompileSourceRoots().size() );
List<String> testCompileSourceRoots = childProject.getTestCompileSourceRoots();
for ( String testCompileSourceRoot : testCompileSourceRoots )
{
testSourceDirectories.add( new File( testCompileSourceRoot ) );
}
testSourceDirectoriesByProject.put( childProject, testSourceDirectories );
prepareCheckstylePaths( request, childProject, classPathStrings, outputDirectories,
sourceDirectories, testSourceDirectories );
}
}
else
{
sourceDirectories = request.getSourceDirectories();
prepareCheckstylePaths( request, project, classPathStrings, outputDirectories, sourceDirectories,
testSourceDirectories );
}
final List<URL> urls = new ArrayList<URL>( classPathStrings.size() );
for ( String path : classPathStrings )
{
try
{
urls.add( new File( path ).toURL() );
}
catch ( MalformedURLException e )
{
throw new CheckstyleExecutorException( e.getMessage(), e );
}
}
for ( String outputDirectoryString : outputDirectories )
{
try
{
if ( outputDirectoryString != null )
{
File outputDirectoryFile = new File( outputDirectoryString );
if ( outputDirectoryFile.exists() )
{
URL outputDirectoryUrl = outputDirectoryFile.toURL();
request.getLog().debug(
"Adding the outputDirectory " + outputDirectoryUrl.toString()
+ " to the Checkstyle class path" );
urls.add( outputDirectoryUrl );
}
}
}
catch ( MalformedURLException e )
{
throw new CheckstyleExecutorException( e.getMessage(), e );
}
}
URLClassLoader projectClassLoader = AccessController.doPrivileged( new PrivilegedAction<URLClassLoader>()
{
public URLClassLoader run()
{
return new URLClassLoader( urls.toArray( new URL[urls.size()] ), null );
}
} );
checker.setClassloader( projectClassLoader );
checker.setModuleClassLoader( Thread.currentThread().getContextClassLoader() );
if ( filterSet != null )
{
checker.addFilter( filterSet );
}
Configuration configuration = getConfiguration( request );
checker.configure( configuration );
AuditListener listener = request.getListener();
if ( listener != null )
{
checker.addListener( listener );
}
if ( request.isConsoleOutput() )
{
checker.addListener( request.getConsoleListener() );
}
CheckstyleCheckerListener checkerListener = new CheckstyleCheckerListener( configuration );
if ( request.isAggregate() )
{
for ( MavenProject childProject : request.getReactorProjects() )
{
sourceDirectories = sourceDirectoriesByProject.get( childProject );
testSourceDirectories = testSourceDirectoriesByProject.get( childProject );
addSourceDirectory( checkerListener, sourceDirectories,
testSourceDirectories,
childProject.getResources(), request );
}
}
else
{
addSourceDirectory( checkerListener, sourceDirectories, testSourceDirectories, request.getResources(),
request );
}
checker.addListener( checkerListener );
int nbErrors = checker.process( files );
checker.destroy();
if ( projectClassLoader instanceof Closeable )
{
try
{