Author: bentmann Date: Fri Apr 18 15:50:49 2008 New Revision: 649719 URL: http://svn.apache.org/viewvc?rev=649719&view=rev Log: [MPMD-76] use ${project.build.sourceEncoding} as default value for "sourceEncoding" parameter
Modified: 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 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=649719&r1=649718&r2=649719&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 Fri Apr 18 15:50:49 2008 @@ -39,6 +39,7 @@ import net.sourceforge.pmd.cpd.XMLRenderer; import org.apache.maven.reporting.MavenReportException; +import org.codehaus.plexus.util.ReaderFactory; /** * Creates a report for PMD's CPD tool. See @@ -70,9 +71,10 @@ private boolean skip; /** - * The file encoding to use when reading the java source. - * - * @parameter + * The file encoding to use when reading the java source. <strong>Note:</strong> Prior to version 2.4, this + * parameter defaulted to the JVM's default encoding which led to platform-dependent builds. + * + * @parameter expression="${encoding}" default-value="${project.build.sourceEncoding}" * @since 2.3 */ private String sourceEncoding; @@ -110,13 +112,11 @@ Map files = null; try { - if ( sourceEncoding != null ) - { - cpd.setEncoding( sourceEncoding ); + cpd.setEncoding( getSourceEncoding() ); + + // test encoding as CPD will convert exception into a RuntimeException + new OutputStreamWriter( new ByteArrayOutputStream() , getSourceEncoding() ); - // test encoding as CPD will convert exception into a RuntimeException - new OutputStreamWriter( new ByteArrayOutputStream() , sourceEncoding ); - } files = getFilesToProcess( ); for ( Iterator it = files.keySet().iterator(); it.hasNext(); ) { @@ -125,7 +125,7 @@ } catch ( UnsupportedEncodingException e ) { - throw new MavenReportException( "Encoding '" + sourceEncoding + "' is not supported.", e ); + throw new MavenReportException( "Encoding '" + getSourceEncoding() + "' is not supported.", e ); } catch ( IOException e ) { @@ -148,6 +148,16 @@ } } + } + + /** + * Gets the effective source file encoding. + * + * @return The effective source file encoding, never <code>null</code>. + */ + private String getSourceEncoding() + { + return ( sourceEncoding == null ) ? ReaderFactory.ISO_8859_1 : sourceEncoding; } void writeNonHtml( CPD cpd ) throws MavenReportException 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=649719&r1=649718&r2=649719&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 Fri Apr 18 15:50:49 2008 @@ -57,6 +57,7 @@ import org.codehaus.plexus.resource.loader.FileResourceCreationException; import org.codehaus.plexus.resource.loader.FileResourceLoader; import org.codehaus.plexus.resource.loader.ResourceNotFoundException; +import org.codehaus.plexus.util.ReaderFactory; /** * Creates a PMD report. @@ -107,9 +108,10 @@ private String[] rulesets = new String[]{"rulesets/basic.xml", "rulesets/unusedcode.xml", "rulesets/imports.xml", }; /** - * The file encoding to use when reading the java source. - * - * @parameter + * The file encoding to use when reading the java source. <strong>Note:</strong> Prior to version 2.4, this + * parameter defaulted to the JVM's default encoding which led to platform-dependent builds. + * + * @parameter expression="${encoding}" default-value="${project.build.sourceEncoding}" */ private String sourceEncoding; @@ -199,8 +201,6 @@ throw new MavenReportException( e.getMessage(), e ); } - boolean hasEncoding = sourceEncoding != null; - Map files; try { @@ -227,14 +227,12 @@ { // PMD closes this Reader even though it did not open it so we have // to open a new one with every call to processFile(). - Reader reader = hasEncoding - ? new InputStreamReader( new FileInputStream( file ), sourceEncoding ) - : new FileReader( file ); + Reader reader = new InputStreamReader( new FileInputStream( file ), getSourceEncoding() ); pmd.processFile( reader, sets[idx], ruleContext ); } catch ( UnsupportedEncodingException e1 ) { - throw new MavenReportException( "Encoding '" + sourceEncoding + "' is not supported.", e1 ); + throw new MavenReportException( "Encoding '" + getSourceEncoding() + "' is not supported.", e1 ); } catch ( PMDException pe ) { @@ -304,6 +302,16 @@ } } + /** + * Gets the effective source file encoding. + * + * @return The effective source file encoding, never <code>null</code>. + */ + private String getSourceEncoding() + { + return ( sourceEncoding == null ) ? ReaderFactory.ISO_8859_1 : sourceEncoding; + } + /** * Convenience method to get the location of the specified file name. *