You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2009/11/19 22:48:32 UTC

svn commit: r882311 - /maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/

Author: olamy
Date: Thu Nov 19 21:48:32 2009
New Revision: 882311

URL: http://svn.apache.org/viewvc?rev=882311&view=rev
Log:
[MCHECKSTYLE-123] refactoring to prevent duplicate codes.

Modified:
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleExecutorRequest.java
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReportListener.java
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleResults.java
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleViolationCheckMojo.java
    maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/DefaultCheckstyleExecutor.java

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleExecutorRequest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleExecutorRequest.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleExecutorRequest.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleExecutorRequest.java Thu Nov 19 21:48:32 2009
@@ -35,8 +35,7 @@
  */
 public class CheckstyleExecutorRequest
 {
-    private Configuration configuration;
-    
+   
     /**
      * Specifies the names filter of the source files to be used for Checkstyle.
      */
@@ -69,22 +68,27 @@
     
     private ByteArrayOutputStream stringOutputStream;
     
-    public CheckstyleExecutorRequest(Configuration configuration)
-    {
-        this.configuration = configuration;
-    }
+    private String propertiesLocation;
+    
+    //
+    
+    private String configLocation;
 
-    public Configuration getConfiguration()
-    {
-        return configuration;
-    }
+    private String propertyExpansion;
+    
+    private String headerLocation; 
+    
+    private String cacheFile;  
+    
+    private String suppressionsFileExpression;
+    
+    private String encoding; 
 
-    public CheckstyleExecutorRequest setConfiguration( Configuration configuration )
+    public CheckstyleExecutorRequest( )
     {
-        this.configuration = configuration;
-        return this;
-    }
-
+        //nothing 
+    }    
+    
     public String getIncludes()
     {
         return includes;
@@ -228,4 +232,79 @@
         return this;
     }
     
+    public String getConfigLocation()
+    {
+        return configLocation;
+    }
+
+    public CheckstyleExecutorRequest setConfigLocation( String configLocation )
+    {
+        this.configLocation = configLocation;
+        return this;
+    }
+
+    public String getPropertyExpansion()
+    {
+        return propertyExpansion;
+    }
+
+    public CheckstyleExecutorRequest setPropertyExpansion( String propertyExpansion )
+    {
+        this.propertyExpansion = propertyExpansion;
+        return this;
+    }
+    
+    public String getHeaderLocation()
+    {
+        return headerLocation;
+    }
+
+    public CheckstyleExecutorRequest setHeaderLocation( String headerLocation )
+    {
+        this.headerLocation = headerLocation;
+        return this;
+    }
+
+    public String getCacheFile()
+    {
+        return cacheFile;
+    }
+
+    public CheckstyleExecutorRequest setCacheFile( String cacheFile )
+    {
+        this.cacheFile = cacheFile;
+        return this;
+    }
+
+    public String getSuppressionsFileExpression()
+    {
+        return suppressionsFileExpression;
+    }
+
+    public CheckstyleExecutorRequest setSuppressionsFileExpression( String suppressionsFileExpression )
+    {
+        this.suppressionsFileExpression = suppressionsFileExpression;
+        return this;
+    }
+
+    public String getEncoding()
+    {
+        return encoding;
+    }
+
+    public CheckstyleExecutorRequest setEncoding( String encoding )
+    {
+        this.encoding = encoding;
+        return this;
+    }    
+    
+    public String getPropertiesLocation()
+    {
+        return propertiesLocation;
+    }
+
+    public void setPropertiesLocation( String propertiesLocation )
+    {
+        this.propertiesLocation = propertiesLocation;
+    }    
 }

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java Thu Nov 19 21:48:32 2009
@@ -278,8 +278,7 @@
      * </code>
      * </p>
      *
-     * @parameter expression="${checkstyle.header.file}"
-     *            default-value="LICENSE.txt"
+     * @parameter expression="${checkstyle.header.file}" default-value="LICENSE.txt"
      * @since 2.0-beta-2
      */
     private String headerLocation;
@@ -578,67 +577,28 @@
 
             try
             {
-                // checkstyle will always use the context classloader in order
-                // to load resources (dtds),
-                // so we have to fix it
-                ClassLoader checkstyleClassLoader = PackageNamesLoader.class.getClassLoader();
-                Thread.currentThread().setContextClassLoader( checkstyleClassLoader );
-
-
-                String configFile = getConfigFile();
-                Properties overridingProperties = getOverridingProperties();
-                CheckstyleResults results;
-
-                Configuration config = ConfigurationLoader.loadConfiguration( configFile,
-                                                                new PropertiesExpander( overridingProperties ) );
-                String effectiveEncoding =
-                    StringUtils.isNotEmpty( encoding ) ? encoding : System.getProperty( "file.encoding", "UTF-8" );
-                if ( StringUtils.isEmpty( encoding ) )
-                {
-                    getLog().warn(
-                                   "File encoding has not been set, using platform encoding " + effectiveEncoding
-                                       + ", i.e. build is platform dependent!" );
-                }
-                Configuration[] modules = config.getChildren();
-                for ( int i = 0; i < modules.length; i++ )
-                {
-                    Configuration module = modules[i];
-                    if ( "Checker".equals( module.getName() )
-                        || "com.puppycrawl.tools.checkstyle.Checker".equals( module.getName() ) )
-                    {
-                        if ( module instanceof DefaultConfiguration )
-                        {
-                            ( (DefaultConfiguration) module ).addAttribute( "charset", effectiveEncoding );
-                        }
-                        else
-                        {
-                            getLog().warn( "Failed to configure file encoding on module " + module );
-                        }
-                    }
-                    if ("TreeWalker".equals(module.getName())
-                        || "com.puppycrawl.tools.checkstyle.TreeWalker".equals(module.getName()))
-                    {
-                        if (module instanceof DefaultConfiguration)
-                        {
-                            ((DefaultConfiguration) module).addAttribute("cacheFile", cacheFile);
-                        }
-                        else
-                        {
-                            getLog().warn("Failed to configure cache file on module " + module);
-                        }
-                    }
-                }
-
-                results = executeCheckstyle( config );
+                getLog().info( "in mojo headerLocation " + headerLocation );
+                CheckstyleExecutorRequest request = new CheckstyleExecutorRequest();
+                request.setConsoleListener( getConsoleListener() ).setConsoleOutput( consoleOutput )
+                    .setExcludes( excludes ).setFailsOnError( failsOnError ).setIncludes( includes )
+                    .setIncludeTestSourceDirectory( includeTestSourceDirectory ).setListener( getListener() )
+                    .setLog( getLog() ).setProject( project ).setSourceDirectory( sourceDirectory )
+                    .setStringOutputStream( stringOutputStream ).setSuppressionsLocation( suppressionsLocation )
+                    .setTestSourceDirectory( testSourceDirectory ).setConfigLocation( configLocation )
+                    .setPropertyExpansion( propertyExpansion ).setHeaderLocation( headerLocation )
+                    .setCacheFile( cacheFile ).setSuppressionsFileExpression( suppressionsFileExpression )
+                    .setEncoding( encoding ).setPropertiesLocation( propertiesLocation );
+                
+                CheckstyleResults results = checkstyleExecutor.executeCheckstyle( request );
 
                 ResourceBundle bundle = getBundle( locale );
                 generateReportStatics();
-                generateMainReport( results, config, bundle );
+                generateMainReport( results, bundle );
                 if ( enableRSS )
                 {
-                    CheckstyleRssGeneratorRequest request =
+                    CheckstyleRssGeneratorRequest checkstyleRssGeneratorRequest =
                         new CheckstyleRssGeneratorRequest( this.project, this.getCopyright(), outputDirectory, getLog() );
-                    checkstyleRssGenerator.generateRSS( results, request );
+                    checkstyleRssGenerator.generateRSS( results, checkstyleRssGeneratorRequest );
                 }
 
             }
@@ -694,7 +654,7 @@
         return copyright;
     }
 
-    private void generateMainReport( CheckstyleResults results, Configuration config, ResourceBundle bundle )
+    private void generateMainReport( CheckstyleResults results, ResourceBundle bundle )
     {
         CheckstyleReportGenerator generator = new CheckstyleReportGenerator( getSink(), bundle, project.getBasedir(), siteTool );
 
@@ -703,7 +663,7 @@
         generator.setEnableSeveritySummary( enableSeveritySummary );
         generator.setEnableFilesSummary( enableFilesSummary );
         generator.setEnableRSS( enableRSS );
-        generator.setCheckstyleConfig( config );
+        generator.setCheckstyleConfig( results.getConfiguration() );
         if ( linkXRef )
         {
             String relativePath = PathTool.getRelativePath( getOutputDirectory(), xrefLocation.getAbsolutePath() );
@@ -786,18 +746,6 @@
         }
     }
 
-    private CheckstyleResults executeCheckstyle( Configuration config )
-        throws MavenReportException, CheckstyleException, CheckstyleExecutorException
-    {
-        CheckstyleExecutorRequest request = new CheckstyleExecutorRequest( config );
-        request.setConsoleListener( getConsoleListener() ).setConsoleOutput( consoleOutput ).setExcludes( excludes )
-            .setFailsOnError( failsOnError ).setIncludes( includes )
-            .setIncludeTestSourceDirectory( includeTestSourceDirectory ).setListener( getListener() ).setLog( getLog() )
-            .setProject( project ).setSourceDirectory( sourceDirectory ).setStringOutputStream( stringOutputStream )
-            .setSuppressionsLocation( suppressionsLocation ).setTestSourceDirectory( testSourceDirectory );
-        
-        return checkstyleExecutor.executeCheckstyle( request );
-    }
 
     /** {@inheritDoc} */
     public String getOutputName()
@@ -887,148 +835,6 @@
 
         return (File[]) files.toArray( EMPTY_FILE_ARRAY );
     }
-
-    private Properties getOverridingProperties()
-        throws MavenReportException
-    {
-        Properties p = new Properties();
-
-        try
-        {
-            File propertiesFile = locator.resolveLocation( propertiesLocation, "checkstyle-checker.properties" );
-
-            if ( propertiesFile != null )
-            {
-                p.load( new FileInputStream( propertiesFile ) );
-            }
-
-            if ( StringUtils.isNotEmpty( propertyExpansion ) )
-            {
-                // Convert \ to \\, so that p.load will convert it back properly
-                propertyExpansion = StringUtils.replace( propertyExpansion, "\\", "\\\\" );
-                p.load( new ByteArrayInputStream( propertyExpansion.getBytes() ) );
-            }
-
-            // Workaround for MCHECKSTYLE-48
-            // Make sure that "config/maven-header.txt" is the default value
-            // for headerLocation, if configLocation="config/maven_checks.xml"
-            if ( "config/maven_checks.xml".equals( configLocation ) )
-            {
-                if ( "LICENSE.txt".equals( headerLocation ) )
-                {
-                    headerLocation = "config/maven-header.txt";
-                }
-            }
-            if ( StringUtils.isNotEmpty( headerLocation ) )
-            {
-                try
-                {
-                    File headerFile = locator.resolveLocation( headerLocation, "checkstyle-header.txt" );
-
-                    if ( headerFile != null )
-                    {
-                        p.setProperty( "checkstyle.header.file", headerFile.getAbsolutePath() );
-                    }
-                }
-                catch ( IOException e )
-                {
-                    throw new MavenReportException( "Unable to process header location: " + headerLocation, e );
-                }
-            }
-
-            if ( cacheFile != null )
-            {
-                p.setProperty( "checkstyle.cache.file", cacheFile );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MavenReportException( "Failed to get overriding properties", e );
-        }
-
-        if ( suppressionsFileExpression != null )
-        {
-            String suppresionFile = getSuppressionLocation();
-
-            if ( suppresionFile != null )
-            {
-                p.setProperty( suppressionsFileExpression, suppresionFile );
-            }
-        }
-
-        return p;
-    }
-
-    private String getConfigFile()
-        throws MavenReportException
-    {
-        try
-        {
-            File configFile = locator.getResourceAsFile( configLocation, "checkstyle-checker.xml" );
-
-            if ( configFile == null )
-            {
-                throw new MavenReportException( "Unable to process config location: " + configLocation );
-            }
-            return configFile.getAbsolutePath();
-        }
-        catch ( org.codehaus.plexus.resource.loader.ResourceNotFoundException e )
-        {
-            throw new MavenReportException( "Unable to find configuration file at location "
-                                            + configLocation, e );
-        }
-        catch ( FileResourceCreationException e )
-        {
-            throw new MavenReportException( "Unable to process configuration file location "
-                                            + configLocation, e );
-        }
-
-    }
-
-    private String getSuppressionLocation()
-        throws MavenReportException
-    {
-        try
-        {
-            File suppressionsFile = locator.resolveLocation( suppressionsLocation, "checkstyle-suppressions.xml" );
-
-            if ( suppressionsFile == null )
-            {
-                return null;
-            }
-
-            return suppressionsFile.getAbsolutePath();
-        }
-        catch ( IOException e )
-        {
-            throw new MavenReportException( "Failed to process supressions location: " + suppressionsLocation, e );
-        }
-    }
-
-    private FilterSet getSuppressions()
-        throws MavenReportException
-    {
-        try
-        {
-            File suppressionsFile = locator.resolveLocation( suppressionsLocation, "checkstyle-suppressions.xml" );
-
-            if ( suppressionsFile == null )
-            {
-                return null;
-            }
-
-            return SuppressionsLoader.loadSuppressions( suppressionsFile.getAbsolutePath() );
-        }
-        catch ( CheckstyleException ce )
-        {
-            throw new MavenReportException( "failed to load suppressions location: " + suppressionsLocation, ce );
-        }
-        catch ( IOException e )
-        {
-            throw new MavenReportException( "Failed to process supressions location: " + suppressionsLocation, e );
-        }
-    }
-
     private DefaultLogger getConsoleListener()
         throws MavenReportException
     {

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReportListener.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReportListener.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReportListener.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReportListener.java Thu Nov 19 21:48:32 2009
@@ -22,6 +22,7 @@
 import com.puppycrawl.tools.checkstyle.api.AuditEvent;
 import com.puppycrawl.tools.checkstyle.api.AuditListener;
 import com.puppycrawl.tools.checkstyle.api.AutomaticBean;
+import com.puppycrawl.tools.checkstyle.api.Configuration;
 import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -50,6 +51,8 @@
     private List events;
 
     private SeverityLevel severityLevel;
+    
+    private Configuration checkstyleConfiguration;
 
     /**
      * @param sourceDirectory assume that is <code>sourceDirectory</code> is a not null directory and exists
@@ -59,6 +62,17 @@
         this.sourceDirectories = new ArrayList();
         this.sourceDirectories.add( sourceDirectory );
     }
+    /**
+     * @param sourceDirectory assume that is <code>sourceDirectory</code> is a not null directory and exists
+     * @param configuration checkstyle configuration
+     * @since 2.5
+     */
+    public CheckstyleReportListener( File sourceDirectory, Configuration configuration )
+    {
+        this.sourceDirectories = new ArrayList();
+        this.sourceDirectories.add( sourceDirectory );
+        this.checkstyleConfiguration = configuration;
+    }    
 
     /**
      * @param sourceDirectory assume that is <code>sourceDirectory</code> is a not null directory and exists
@@ -147,6 +161,7 @@
      */
     public CheckstyleResults getResults()
     {
+        results.setConfiguration( checkstyleConfiguration );
         return results;
     }
 
@@ -157,5 +172,22 @@
     {
         this.results = results;
     }
+
+    /**
+     * @since 2.5
+     */
+    public Configuration getCheckstyleConfiguration()
+    {
+        return checkstyleConfiguration;
+    }
+
+    /**
+     * @since 2.5
+     */
+    public void setCheckstyleConfiguration( Configuration checkstyleConfiguration )
+    {
+        this.checkstyleConfiguration = checkstyleConfiguration;
+    }
+
 }
 

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleResults.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleResults.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleResults.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleResults.java Thu Nov 19 21:48:32 2009
@@ -20,6 +20,7 @@
  */
 
 import com.puppycrawl.tools.checkstyle.api.AuditEvent;
+import com.puppycrawl.tools.checkstyle.api.Configuration;
 import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
 
 import java.util.HashMap;
@@ -38,6 +39,8 @@
 public class CheckstyleResults
 {
     private Map files;
+    
+    private Configuration configuration;
 
     public CheckstyleResults()
     {
@@ -131,4 +134,14 @@
 
         return count;
     }
+
+    public Configuration getConfiguration()
+    {
+        return configuration;
+    }
+
+    public void setConfiguration( Configuration configuration )
+    {
+        this.configuration = configuration;
+    }
 }

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleViolationCheckMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleViolationCheckMojo.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleViolationCheckMojo.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleViolationCheckMojo.java Thu Nov 19 21:48:32 2009
@@ -388,60 +388,16 @@
 
                 try
                 {
-                    // checkstyle will always use the context classloader in order
-                    // to load resources (dtds),
-                    // so we have to fix it
-                    ClassLoader checkstyleClassLoader = PackageNamesLoader.class.getClassLoader();
-                    Thread.currentThread().setContextClassLoader( checkstyleClassLoader );
-                    String configFile = getConfigFile();
-                    Properties overridingProperties = getOverridingProperties();
-                    Configuration config = ConfigurationLoader
-                        .loadConfiguration( configFile, new PropertiesExpander( overridingProperties ) );
-                    String effectiveEncoding = StringUtils.isNotEmpty( encoding ) ? encoding : System
-                        .getProperty( "file.encoding", "UTF-8" );
-                    if ( StringUtils.isEmpty( encoding ) )
-                    {
-                        getLog().warn(
-                                       "File encoding has not been set, using platform encoding " + effectiveEncoding
-                                           + ", i.e. build is platform dependent!" );
-                    }
-                    Configuration[] modules = config.getChildren();
-                    for ( int i = 0; i < modules.length; i++ )
-                    {
-                        Configuration module = modules[i];
-                        if ( "Checker".equals( module.getName() )
-                            || "com.puppycrawl.tools.checkstyle.Checker".equals( module.getName() ) )
-                        {
-                            if ( module instanceof DefaultConfiguration )
-                            {
-                                ( (DefaultConfiguration) module ).addAttribute( "charset", effectiveEncoding );
-                            }
-                            else
-                            {
-                                getLog().warn( "Failed to configure file encoding on module " + module );
-                            }
-                        }
-                        if ( "TreeWalker".equals( module.getName() )
-                            || "com.puppycrawl.tools.checkstyle.TreeWalker".equals( module.getName() ) )
-                        {
-                            if ( module instanceof DefaultConfiguration )
-                            {
-                                ( (DefaultConfiguration) module ).addAttribute( "cacheFile", cacheFile );
-                            }
-                            else
-                            {
-                                getLog().warn( "Failed to configure cache file on module " + module );
-                            }
-                        }
-                    }
-
-                    CheckstyleExecutorRequest request = new CheckstyleExecutorRequest( config );
+                    CheckstyleExecutorRequest request = new CheckstyleExecutorRequest();
                     request.setConsoleListener( getConsoleListener() ).setConsoleOutput( consoleOutput )
                         .setExcludes( excludes ).setFailsOnError( failsOnError ).setIncludes( includes )
                         .setIncludeTestSourceDirectory( includeTestSourceDirectory ).setListener( getListener() )
                         .setLog( getLog() ).setProject( project ).setSourceDirectory( sourceDirectory )
                         .setStringOutputStream( stringOutputStream ).setSuppressionsLocation( suppressionsLocation )
-                        .setTestSourceDirectory( testSourceDirectory );
+                        .setTestSourceDirectory( testSourceDirectory ).setConfigLocation( configLocation )
+                        .setPropertyExpansion( propertyExpansion ).setHeaderLocation( headerLocation )
+                        .setCacheFile( cacheFile ).setSuppressionsFileExpression( suppressionsFileExpression )
+                        .setEncoding( encoding ).setPropertiesLocation( propertiesLocation );
 
                     checkstyleExecutor.executeCheckstyle( request );
 
@@ -576,122 +532,6 @@
             return false;
         }
     }
-
-    private String getConfigFile()
-        throws MojoExecutionException
-    {
-        try
-        {
-            File configFile = locator.getResourceAsFile( configLocation, "checkstyle-checker.xml" );
-
-            if ( configFile == null )
-            {
-                throw new MojoExecutionException( "Unable to process config location: " + configLocation );
-            }
-            return configFile.getAbsolutePath();
-        }
-        catch ( org.codehaus.plexus.resource.loader.ResourceNotFoundException e )
-        {
-            throw new MojoExecutionException( "Unable to find configuration file at location " + configLocation, e );
-        }
-        catch ( FileResourceCreationException e )
-        {
-            throw new MojoExecutionException( "Unable to process configuration file location " + configLocation, e );
-        }
-
-    }
-
-    private Properties getOverridingProperties()
-        throws MojoExecutionException
-    {
-        Properties p = new Properties();
-
-        try
-        {
-            File propertiesFile = locator.resolveLocation( propertiesLocation, "checkstyle-checker.properties" );
-
-            if ( propertiesFile != null )
-            {
-                p.load( new FileInputStream( propertiesFile ) );
-            }
-
-            if ( StringUtils.isNotEmpty( propertyExpansion ) )
-            {
-                // Convert \ to \\, so that p.load will convert it back properly
-                propertyExpansion = StringUtils.replace( propertyExpansion, "\\", "\\\\" );
-                p.load( new ByteArrayInputStream( propertyExpansion.getBytes() ) );
-            }
-
-            // Workaround for MCHECKSTYLE-48
-            // Make sure that "config/maven-header.txt" is the default value
-            // for headerLocation, if configLocation="config/maven_checks.xml"
-            if ( "config/maven_checks.xml".equals( configLocation ) )
-            {
-                if ( "LICENSE.txt".equals( headerLocation ) )
-                {
-                    headerLocation = "config/maven-header.txt";
-                }
-            }
-            if ( StringUtils.isNotEmpty( headerLocation ) )
-            {
-                try
-                {
-                    File headerFile = locator.resolveLocation( headerLocation, "checkstyle-header.txt" );
-
-                    if ( headerFile != null )
-                    {
-                        p.setProperty( "checkstyle.header.file", headerFile.getAbsolutePath() );
-                    }
-                }
-                catch ( IOException e )
-                {
-                    throw new MojoExecutionException( "Unable to process header location: " + headerLocation, e );
-                }
-            }
-
-            if ( cacheFile != null )
-            {
-                p.setProperty( "checkstyle.cache.file", cacheFile );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to get overriding properties", e );
-        }
-
-        if ( suppressionsFileExpression != null )
-        {
-            String suppresionFile = getSuppressionLocation();
-
-            if ( suppresionFile != null )
-            {
-                p.setProperty( suppressionsFileExpression, suppresionFile );
-            }
-        }
-
-        return p;
-    }
-
-    private String getSuppressionLocation()
-        throws MojoExecutionException
-    {
-        try
-        {
-            File suppressionsFile = locator.resolveLocation( suppressionsLocation, "checkstyle-suppressions.xml" );
-
-            if ( suppressionsFile == null )
-            {
-                return null;
-            }
-
-            return suppressionsFile.getAbsolutePath();
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to process supressions location: " + suppressionsLocation, e );
-        }
-    }
-    
     private DefaultLogger getConsoleListener()
         throws MojoExecutionException
     {

Modified: maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/DefaultCheckstyleExecutor.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/DefaultCheckstyleExecutor.java?rev=882311&r1=882310&r2=882311&view=diff
==============================================================================
--- maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/DefaultCheckstyleExecutor.java (original)
+++ maven/plugins/trunk/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/DefaultCheckstyleExecutor.java Thu Nov 19 21:48:32 2009
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.checkstyle;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -27,15 +29,24 @@
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.resource.ResourceManager;
+import org.codehaus.plexus.resource.loader.FileResourceCreationException;
+import org.codehaus.plexus.resource.loader.ResourceNotFoundException;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.StringUtils;
 
 import com.puppycrawl.tools.checkstyle.Checker;
+import com.puppycrawl.tools.checkstyle.ConfigurationLoader;
+import com.puppycrawl.tools.checkstyle.DefaultConfiguration;
+import com.puppycrawl.tools.checkstyle.PackageNamesLoader;
+import com.puppycrawl.tools.checkstyle.PropertiesExpander;
 import com.puppycrawl.tools.checkstyle.api.AuditListener;
 import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
+import com.puppycrawl.tools.checkstyle.api.Configuration;
 import com.puppycrawl.tools.checkstyle.api.FilterSet;
 import com.puppycrawl.tools.checkstyle.filters.SuppressionsLoader;
 
@@ -46,6 +57,7 @@
  * @version $Id$
  */
 public class DefaultCheckstyleExecutor
+    extends AbstractLogEnabled
     implements CheckstyleExecutor
 {
     
@@ -59,6 +71,15 @@
     public CheckstyleResults executeCheckstyle( CheckstyleExecutorRequest request )
         throws CheckstyleExecutorException, CheckstyleException
     {
+        // checkstyle will always use the context classloader in order
+        // to load resources (dtds),
+        // so we have to fix it
+        ClassLoader checkstyleClassLoader = PackageNamesLoader.class.getClassLoader();
+        Thread.currentThread().setContextClassLoader( checkstyleClassLoader );
+
+        
+        getLogger().info( "executeCheckstyle start headerLocation : " + request.getHeaderLocation() );
+        locator.setOutputDirectory( new File( request.getProject().getBuild().getDirectory() ) );
         File[] files;
         try
         {
@@ -94,11 +115,11 @@
             throw new CheckstyleExecutorException( e.getMessage(), e );
         }
 
-        if (classPathStrings == null)
+        if ( classPathStrings == null )
         {
             classPathStrings = Collections.EMPTY_LIST;
         }
-        
+
         List urls = new ArrayList( classPathStrings.size() );
 
         Iterator iter = classPathStrings.iterator();
@@ -148,8 +169,8 @@
         {
             checker.addFilter( filterSet );
         }
-
-        checker.configure( request.getConfiguration() );
+        Configuration configuration = getConfiguration( request ); 
+        checker.configure( configuration );
 
         AuditListener listener = request.getListener();
 
@@ -163,7 +184,7 @@
             checker.addListener( request.getConsoleListener() );
         }
 
-        CheckstyleReportListener sinkListener = new CheckstyleReportListener( request.getSourceDirectory() );
+        CheckstyleReportListener sinkListener = new CheckstyleReportListener( request.getSourceDirectory(), configuration );
         if ( request.isIncludeTestSourceDirectory() && ( request.getTestSourceDirectory() != null )
             && ( request.getTestSourceDirectory().exists() ) && ( request.getTestSourceDirectory().isDirectory() ) )
         {
@@ -201,6 +222,156 @@
         return sinkListener.getResults();
     }
 
+    public Configuration getConfiguration( CheckstyleExecutorRequest request )
+        throws CheckstyleExecutorException
+    {
+        try
+        {
+            // checkstyle will always use the context classloader in order
+            // to load resources (dtds),
+            // so we have to fix it
+            ClassLoader checkstyleClassLoader = PackageNamesLoader.class.getClassLoader();
+            Thread.currentThread().setContextClassLoader( checkstyleClassLoader );
+            String configFile = getConfigFile( request );
+            Properties overridingProperties = getOverridingProperties( request );
+            Configuration config = ConfigurationLoader
+                .loadConfiguration( configFile, new PropertiesExpander( overridingProperties ) );
+            String effectiveEncoding = StringUtils.isNotEmpty( request.getEncoding() ) ? request.getEncoding() : System
+                .getProperty( "file.encoding", "UTF-8" );
+            if ( StringUtils.isEmpty( request.getEncoding() ) )
+            {
+                request.getLog().warn(
+                                       "File encoding has not been set, using platform encoding " + effectiveEncoding
+                                           + ", i.e. build is platform dependent!" );
+            }
+            Configuration[] modules = config.getChildren();
+            for ( int i = 0; i < modules.length; i++ )
+            {
+                Configuration module = modules[i];
+                if ( "Checker".equals( module.getName() )
+                    || "com.puppycrawl.tools.checkstyle.Checker".equals( module.getName() ) )
+                {
+                    if ( module instanceof DefaultConfiguration )
+                    {
+                        ( (DefaultConfiguration) module ).addAttribute( "charset", effectiveEncoding );
+                    }
+                    else
+                    {
+                        request.getLog().warn( "Failed to configure file encoding on module " + module );
+                    }
+                }
+                if ( "TreeWalker".equals( module.getName() )
+                    || "com.puppycrawl.tools.checkstyle.TreeWalker".equals( module.getName() ) )
+                {
+                    if ( module instanceof DefaultConfiguration )
+                    {
+                        ( (DefaultConfiguration) module ).addAttribute( "cacheFile", request.getCacheFile() );
+                    }
+                    else
+                    {
+                        request.getLog().warn( "Failed to configure cache file on module " + module );
+                    }
+                }
+            }
+            return config;
+        }
+        catch ( CheckstyleException e )
+        {
+            throw new CheckstyleExecutorException( "Failed during checkstyle configuration", e );
+        }
+    }
+
+    private Properties getOverridingProperties( CheckstyleExecutorRequest request )
+        throws CheckstyleExecutorException
+    {
+        Properties p = new Properties();
+
+        try
+        {
+            if ( request.getPropertiesLocation() != null )
+            {
+                getLogger().info( "request.getPropertiesLocation() " + request.getPropertiesLocation() );
+                File propertiesFile = locator.getResourceAsFile( request.getPropertiesLocation(),
+                                                                 "checkstyle-checker.properties" );
+
+                if ( propertiesFile != null )
+                {
+                    p.load( new FileInputStream( propertiesFile ) );
+                }
+            }
+
+            if ( StringUtils.isNotEmpty( request.getPropertyExpansion() ) )
+            {
+                String propertyExpansion = request.getPropertyExpansion();
+                // Convert \ to \\, so that p.load will convert it back properly
+                propertyExpansion = StringUtils.replace( propertyExpansion, "\\", "\\\\" );
+                p.load( new ByteArrayInputStream( propertyExpansion.getBytes() ) );
+            }
+
+            // Workaround for MCHECKSTYLE-48
+            // Make sure that "config/maven-header.txt" is the default value
+            // for headerLocation, if configLocation="config/maven_checks.xml"
+            String headerLocation = request.getHeaderLocation();
+            if ( "config/maven_checks.xml".equals( request.getConfigLocation() ) )
+            {
+
+                if ( "LICENSE.txt".equals( request.getHeaderLocation() ) )
+                {
+                    headerLocation = "config/maven-header.txt";
+                }
+            }
+            getLogger().info( "headerLocation " + headerLocation );
+            if ( StringUtils.isNotEmpty( headerLocation ) )
+            {
+                try
+                {
+                    File headerFile = locator.getResourceAsFile( headerLocation, "checkstyle-header.txt" );
+
+                    if ( headerFile != null )
+                    {
+                        p.setProperty( "checkstyle.header.file", headerFile.getAbsolutePath() );
+                    }
+                }
+                catch ( FileResourceCreationException e )
+                {
+                    throw new CheckstyleExecutorException( "Unable to process header location: " + headerLocation, e );
+                }
+                catch ( ResourceNotFoundException e )
+                {
+                    throw new CheckstyleExecutorException( "Unable to process header location: " + headerLocation, e );
+                }                
+            }
+
+            if ( request.getCacheFile() != null )
+            {
+                p.setProperty( "checkstyle.cache.file", request.getCacheFile() );
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new CheckstyleExecutorException( "Failed to get overriding properties", e );
+        }
+        catch ( FileResourceCreationException e )
+        {
+            throw new CheckstyleExecutorException( "Failed to get overriding properties", e );
+        }
+        catch ( ResourceNotFoundException e )
+        {
+            throw new CheckstyleExecutorException( "Failed to get overriding properties", e );
+        } 
+        if ( request.getSuppressionsFileExpression() != null )
+        {
+            String suppresionFile = request.getSuppressionsFileExpression();
+
+            if ( suppresionFile != null )
+            {
+                p.setProperty( request.getSuppressionsFileExpression(), suppresionFile );
+            }
+        }
+
+        return p;
+    }
+
     private File[] getFilesToProcess( CheckstyleExecutorRequest request )
         throws IOException
     {
@@ -259,4 +430,32 @@
                 + request.getSuppressionsLocation(), e );
         }
     }
+
+    private String getConfigFile( CheckstyleExecutorRequest request )
+        throws CheckstyleExecutorException
+    {
+        try
+        {
+            getLogger().info( "request.getConfigLocation() " + request.getConfigLocation() );
+            File configFile = locator.getResourceAsFile( request.getConfigLocation(), "checkstyle-checker.xml" );
+
+            if ( configFile == null )
+            {
+                throw new CheckstyleExecutorException( "Unable to process config location: "
+                    + request.getConfigLocation() );
+            }
+            return configFile.getAbsolutePath();
+        }
+        catch ( org.codehaus.plexus.resource.loader.ResourceNotFoundException e )
+        {
+            throw new CheckstyleExecutorException( "Unable to find configuration file at location "
+                + request.getConfigLocation(), e );
+        }
+        catch ( FileResourceCreationException e )
+        {
+            throw new CheckstyleExecutorException( "Unable to process configuration file location "
+                + request.getConfigLocation(), e );
+        }
+
+    }
 }