Author: mperham
Date: Sat Aug 12 11:02:29 2006
New Revision: 431062
URL: http://svn.apache.org/viewvc?rev=431062&view=rev
Log:
PR: MPMD-38
Refactor excludes to work with both PMD and CPD
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
maven/plugins/trunk/maven-pmd-plugin/src/site/apt/usage.apt
maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdReportTest.java
maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
---
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
(original)
+++
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdReport.java
Sat Aug 12 11:02:29 2006
@@ -23,9 +23,13 @@
import org.codehaus.doxia.site.renderer.SiteRenderer;
import org.codehaus.plexus.util.PathTool;
import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.FileUtils;
import java.io.File;
+import java.io.IOException;
import java.util.Iterator;
+import java.util.List;
+import java.util.Collections;
/**
* Base class for the PMD reports.
@@ -93,6 +97,13 @@
private File xrefLocation;
/**
+ * A list of files to exclude from checking. Can contain ant-style
wildcards and double wildcards.
+ *
+ * @parameter
+ */
+ private String[] excludes;
+
+ /**
* @see org.apache.maven.reporting.AbstractMavenReport#getProject()
*/
protected MavenProject getProject()
@@ -146,6 +157,69 @@
}
return location;
}
+
+ /**
+ * Convenience method to get the list of files where the PMD tool will be
executed
+ *
+ * @param includes contains the concatenated list of files to be included
+ * @return a List of the files where the PMD tool will be executed
+ * @throws java.io.IOException
+ */
+ protected List getFilesToProcess( String includes )
+ throws IOException
+ {
+ String excluding = getExclusionsString( excludes );
+ List files = Collections.EMPTY_LIST;
+
+ File dir = new File( project.getBuild().getSourceDirectory() );
+ if ( dir.exists() )
+ {
+
+ StringBuffer excludesStr = new StringBuffer();
+ if ( StringUtils.isNotEmpty( excluding ) )
+ {
+ excludesStr.append( excluding );
+ }
+ String[] defaultExcludes = FileUtils.getDefaultExcludes();
+ for ( int i = 0; i < defaultExcludes.length; i++ )
+ {
+ if ( excludesStr.length() > 0 )
+ {
+ excludesStr.append( "," );
+ }
+ excludesStr.append( defaultExcludes[i] );
+ }
+ getLog().debug( "Excluded files: '" + excludesStr + "'" );
+ files = FileUtils.getFiles( dir, includes, excludesStr.toString()
);
+ }
+ return files;
+ }
+
+ /**
+ * Convenience method that concatenates the files to be excluded into the
appropriate format
+ *
+ * @param exclude the array of Strings that contains the files to be
excluded
+ * @return a String that contains the concatenates file names
+ */
+ private String getExclusionsString( String[] exclude )
+ {
+ StringBuffer excludes = new StringBuffer();
+
+ if ( exclude != null )
+ {
+ for ( int index = 0; index < exclude.length; index++ )
+ {
+ if ( excludes.length() > 0 )
+ {
+ excludes.append( ',' );
+ }
+ excludes.append( exclude[index] );
+ }
+ }
+
+ return excludes.toString();
+ }
+
protected boolean isHtml()
{
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
---
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java
(original)
+++
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdReport.java
Sat Aug 12 11:02:29 2006
@@ -16,20 +16,24 @@
* limitations under the License.
*/
-import net.sourceforge.pmd.cpd.CPD;
-import net.sourceforge.pmd.cpd.CSVRenderer;
-import net.sourceforge.pmd.cpd.JavaLanguage;
-import net.sourceforge.pmd.cpd.Renderer;
-import net.sourceforge.pmd.cpd.XMLRenderer;
-import org.apache.maven.reporting.MavenReportException;
-
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
+import net.sourceforge.pmd.cpd.CPD;
+import net.sourceforge.pmd.cpd.CSVRenderer;
+import net.sourceforge.pmd.cpd.JavaLanguage;
+import net.sourceforge.pmd.cpd.Renderer;
+import net.sourceforge.pmd.cpd.XMLRenderer;
+
+import org.apache.maven.reporting.MavenReportException;
+import org.codehaus.plexus.util.DirectoryScanner;
+
/**
* Report for PMD's CPD tool. See <a
href="http://pmd.sourceforge.net/cpd.html">http://pmd.sourceforge.net/cpd.html</a>
* for more detail.
@@ -80,21 +84,23 @@
throws MavenReportException
{
if ( !skip && canGenerateReport() )
- {
- CPD cpd = new CPD( minimumTokens, new JavaLanguage() );
- String src = getProject().getBuild().getSourceDirectory();
-
+ {
+ CPD cpd = new CPD(minimumTokens, new JavaLanguage());
try
{
- // TODO: use source roots instead
- cpd.addRecursively( src );
+ List files = getFilesToProcess( "**/*.java" );
+ for ( int i = 0; i < files.size(); i++ )
+ {
+ cpd.add( (File) files.get( i ) );
+ }
}
- catch ( IOException e )
+ catch (IOException e)
{
- throw new MavenReportException( e.getMessage(), e );
+ throw new MavenReportException(e.getMessage(), e);
}
cpd.go();
+ String src = getProject().getBuild().getSourceDirectory();
CpdReportGenerator gen =
new CpdReportGenerator( getSink(), src, getBundle( locale ),
constructXRefLocation() );
gen.generate( cpd.getMatches() );
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
---
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
(original)
+++
maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdReport.java
Sat Aug 12 11:02:29 2006
@@ -103,13 +103,6 @@
private String sourceEncoding;
/**
- * A list of files to exclude from checking. Can contain wildcards and
double wildcards.
- *
- * @parameter
- */
- private String[] excludes;
-
- /**
* @see org.apache.maven.reporting.MavenReport#getName(java.util.Locale)
*/
public String getName( Locale locale )
@@ -151,16 +144,6 @@
ruleContext.setReport( report );
reportSink.beginDocument();
- List files;
- try
- {
- files = getFilesToProcess( "**/*.java", getExclusionsString(
excludes ) );
- }
- catch ( IOException e )
- {
- throw new MavenReportException( "Can't parse " +
sourceDirectory, e );
- }
-
Locator locator = new Locator( getLog() );
RuleSetFactory ruleSetFactory = new RuleSetFactory();
ruleSetFactory.setMinimumPriority( this.minimumPriority );
@@ -183,6 +166,16 @@
boolean hasEncoding = sourceEncoding != null;
+ List files;
+ try
+ {
+ files = getFilesToProcess( "**/*.java" );
+ }
+ catch ( IOException e )
+ {
+ throw new MavenReportException( "Can't parse " +
sourceDirectory, e );
+ }
+
for ( Iterator i = files.iterator(); i.hasNext(); )
{
File file = (File) i.next();
@@ -217,7 +210,6 @@
getLog().warn( "Failure executing PMD for: " + file,
e3 );
reportSink.ruleViolationAdded(new
ProcessingErrorRuleViolation(file, e3.getLocalizedMessage()) );
}
-
}
reportSink.endFile( file );
}
@@ -298,71 +290,9 @@
return "pmd";
}
- /**
- * Convenience method to get the list of files where the PMD tool will be
executed
- *
- * @param includes contains the concatenated list of files to be included
- * @param excludes contains the concatenated list of files to be excluded
- * @return a List of the files where the PMD tool will be executed
- * @throws IOException
- */
- private List getFilesToProcess( String includes, String excludes )
- throws IOException
- {
- List files = Collections.EMPTY_LIST;
-
- File dir = new File( project.getBuild().getSourceDirectory() );
- if ( dir.exists() )
- {
-
- StringBuffer excludesStr = new StringBuffer();
- if ( StringUtils.isNotEmpty( excludes ) )
- {
- excludesStr.append( excludes );
- }
- String[] defaultExcludes = FileUtils.getDefaultExcludes();
- for ( int i = 0; i < defaultExcludes.length; i++ )
- {
- if ( excludesStr.length() > 0 )
- {
- excludesStr.append( "," );
- }
- excludesStr.append( defaultExcludes[i] );
- }
- getLog().debug( "Excluded files: '" + excludesStr + "'" );
- files = FileUtils.getFiles( dir, includes, excludesStr.toString()
);
- }
- return files;
- }
-
private static ResourceBundle getBundle( Locale locale )
{
return ResourceBundle.getBundle( "pmd-report", locale,
PmdReport.class.getClassLoader() );
- }
-
- /**
- * Convenience method that concatenates the files to be excluded into the
appropriate format
- *
- * @param exclude the array of Strings that contains the files to be
excluded
- * @return a String that contains the concatenates file names
- */
- private String getExclusionsString( String[] exclude )
- {
- StringBuffer excludes = new StringBuffer();
-
- if ( exclude != null )
- {
- for ( int index = 0; index < exclude.length; index++ )
- {
- if ( excludes.length() > 0 )
- {
- excludes.append( ',' );
- }
- excludes.append( exclude[index] );
- }
- }
-
- return excludes.toString();
}
/**
Modified: maven/plugins/trunk/maven-pmd-plugin/src/site/apt/usage.apt
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/site/apt/usage.apt?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/site/apt/usage.apt (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/site/apt/usage.apt Sat Aug 12
11:02:29 2006
@@ -49,7 +49,8 @@
See the {{{http://maven.apache.org/plugins/maven-jxr-plugin/}JXR}} plugin
for more details.
If your source uses a non-default encoding, you can use the sourceEncoding
parameter to tell Maven which
- encoding to use when reading the java source.
+ encoding to use when reading the java source. Note also the ability to
exclude source which you want
+ to ignore.
You can configure the minimum code size which trips the CPD. The default of
100 tokens corresponds
to approxiamately 5-10 lines of code.
@@ -68,6 +69,10 @@
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
<targetJdk>1.5</targetJdk>
+ <excludes>
+ <exclude>**/*Bean.java</exclude>
+ <exclude>**/generated/*.java</exclude>
+ </excludes>
</configuration>
</plugin>
</plugins>
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdReportTest.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdReportTest.java?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
---
maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdReportTest.java
(original)
+++
maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdReportTest.java
Sat Aug 12 11:02:29 2006
@@ -94,15 +94,16 @@
generatedFile = new File( getBasedir(),
"target/test/unit/custom-configuration/target/site/cpd.html" );
assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
- //check the contents of cpd.html
+ // Contents that should NOT be in the report
String str = readFile( new File( getBasedir(),
"target/test/unit/custom-configuration/target/site/cpd.html" ) );
- assertTrue( str.toLowerCase().indexOf( "Sample.java".toLowerCase() )
!= -1 );
+ assertTrue( str.toLowerCase().indexOf( "/Sample.java".toLowerCase() )
== -1 );
str = readFile( new File( getBasedir(),
"target/test/unit/custom-configuration/target/site/cpd.html" ) );
- assertTrue( str.toLowerCase().indexOf(
"AnotherSample.java".toLowerCase() ) != -1 );
+ assertTrue( str.toLowerCase().indexOf( "public void duplicateMethod(
int i )".toLowerCase() ) == -1 );
+ // Contents that should be in the report
str = readFile( new File( getBasedir(),
"target/test/unit/custom-configuration/target/site/cpd.html" ) );
- assertTrue( str.toLowerCase().indexOf( "public void duplicateMethod(
int i )".toLowerCase() ) != -1 );
+ assertTrue( str.toLowerCase().indexOf(
"AnotherSample.java".toLowerCase() ) != -1 );
str = readFile( new File( getBasedir(),
"target/test/unit/custom-configuration/target/site/cpd.html" ) );
assertTrue( str.toLowerCase().indexOf( "public static void main(
String[] args )".toLowerCase() ) != -1 );
Modified:
maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml?rev=431062&r1=431061&r2=431062&view=diff
==============================================================================
---
maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
(original)
+++
maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
Sat Aug 12 11:02:29 2006
@@ -21,6 +21,9 @@
<linkXRef>false</linkXRef>
<xrefLocation>${basedir}/target/test/unit/custom-configuration/target/site/xref</xrefLocation>
<minimumTokens>25</minimumTokens>
+ <excludes>
+ <exclude>**/Sample.java</exclude>
+ </excludes>
</configuration>
</plugin>
</plugins>