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 2012/05/21 21:59:39 UTC

svn commit: r1341178 - in /maven/plugins/trunk/maven-pmd-plugin/src: main/java/org/apache/maven/plugin/pmd/ test/java/org/apache/maven/plugin/pmd/ test/resources/unit/default-configuration/ test/resources/unit/default-configuration/js/

Author: olamy
Date: Mon May 21 19:59:38 2012
New Revision: 1341178

URL: http://svn.apache.org/viewvc?rev=1341178&view=rev
Log:
[MPMD-148] Add support for javascript / ecmascript
Submitted by Andreas Dangel.

Added:
    maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml   (with props)
    maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/
    maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js   (with props)
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/PmdReport.java
    maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdReportTest.java

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=1341178&r1=1341177&r2=1341178&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 Mon May 21 19:59:38 2012
@@ -19,6 +19,16 @@ package org.apache.maven.plugin.pmd;
  * under the License.
  */
 
+import net.sourceforge.pmd.PMD;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.AbstractMavenReport;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.PathTool;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.StringUtils;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -31,17 +41,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
-import net.sourceforge.pmd.PMD;
-
-import org.apache.maven.doxia.siterenderer.Renderer;
-import org.apache.maven.model.ReportPlugin;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.reporting.AbstractMavenReport;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.PathTool;
-import org.codehaus.plexus.util.ReaderFactory;
-import org.codehaus.plexus.util.StringUtils;
-
 /**
  * Base class for the PMD reports.
  *
@@ -203,13 +202,17 @@ public abstract class AbstractPmdReport
      */
     protected List<MavenProject> reactorProjects;
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     */
     protected MavenProject getProject()
     {
         return project;
     }
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     */
     protected Renderer getSiteRenderer()
     {
         return siteRenderer;
@@ -222,8 +225,8 @@ public abstract class AbstractPmdReport
         {
             File xrefLoc = test ? xrefTestLocation : xrefLocation;
 
-            String relativePath = PathTool.getRelativePath( outputDirectory.getAbsolutePath(),
-                                                            xrefLoc.getAbsolutePath() );
+            String relativePath =
+                PathTool.getRelativePath( outputDirectory.getAbsolutePath(), xrefLoc.getAbsolutePath() );
             if ( StringUtils.isEmpty( relativePath ) )
             {
                 relativePath = ".";
@@ -237,9 +240,8 @@ public abstract class AbstractPmdReport
             else
             {
                 // Not yet generated - check if the report is on its way
-                @SuppressWarnings( "unchecked" )
-                List<ReportPlugin> reportPlugins = project.getReportPlugins();
-                for ( ReportPlugin plugin  : reportPlugins )
+                @SuppressWarnings( "unchecked" ) List<ReportPlugin> reportPlugins = project.getReportPlugins();
+                for ( ReportPlugin plugin : reportPlugins )
                 {
                     String artifactId = plugin.getArtifactId();
                     if ( "maven-jxr-plugin".equals( artifactId ) || "jxr-maven-plugin".equals( artifactId ) )
@@ -278,7 +280,7 @@ public abstract class AbstractPmdReport
         {
             excludeRoots = new File[0];
         }
-        
+
         Collection<File> excludeRootFiles = new HashSet<File>( excludeRoots.length );
 
         for ( int i = 0; i < excludeRoots.length; i++ )
@@ -317,8 +319,8 @@ public abstract class AbstractPmdReport
         {
             for ( MavenProject localProject : reactorProjects )
             {
-                @SuppressWarnings( "unchecked" )
-                List<String> localCompileSourceRoots = localProject.getCompileSourceRoots(); 
+                @SuppressWarnings( "unchecked" ) List<String> localCompileSourceRoots =
+                    localProject.getCompileSourceRoots();
                 for ( String root : localCompileSourceRoots )
                 {
                     File sroot = new File( root );
@@ -326,8 +328,8 @@ public abstract class AbstractPmdReport
                 }
                 if ( includeTests )
                 {
-                    @SuppressWarnings( "unchecked" )
-                    List<String> localTestCompileSourceRoots = localProject.getTestCompileSourceRoots(); 
+                    @SuppressWarnings( "unchecked" ) List<String> localTestCompileSourceRoots =
+                        localProject.getTestCompileSourceRoots();
                     for ( String root : localTestCompileSourceRoots )
                     {
                         File sroot = new File( root );
@@ -347,11 +349,12 @@ public abstract class AbstractPmdReport
 
         for ( PmdFileInfo finfo : directories )
         {
+            getLog().debug( "Searching for files in directory " + finfo.getSourceDirectory().toString() );
             File sourceDirectory = finfo.getSourceDirectory();
             if ( sourceDirectory.isDirectory() && !excludeRootFiles.contains( sourceDirectory ) )
             {
-                @SuppressWarnings( "unchecked" )
-                List<File> newfiles = FileUtils.getFiles( sourceDirectory, including, excluding );
+                @SuppressWarnings( "unchecked" ) List<File> newfiles =
+                    FileUtils.getFiles( sourceDirectory, including, excluding );
                 for ( Iterator<File> it2 = newfiles.iterator(); it2.hasNext(); )
                 {
                     files.put( it2.next(), finfo );
@@ -388,8 +391,8 @@ public abstract class AbstractPmdReport
      */
     private String getExcludes()
     {
-        @SuppressWarnings( "unchecked" )
-        Collection<String> patterns = new LinkedHashSet<String>( FileUtils.getDefaultExcludesAsList() );
+        @SuppressWarnings( "unchecked" ) Collection<String> patterns =
+            new LinkedHashSet<String>( FileUtils.getDefaultExcludesAsList() );
         if ( excludes != null )
         {
             patterns.addAll( excludes );
@@ -402,7 +405,9 @@ public abstract class AbstractPmdReport
         return "html".equals( format );
     }
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     */
     public boolean canGenerateReport()
     {
         if ( aggregate && !project.isExecutionRoot() )
@@ -436,7 +441,9 @@ public abstract class AbstractPmdReport
         return true;
     }
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     */
     protected String getOutputDirectory()
     {
         return outputDirectory.getAbsolutePath();

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=1341178&r1=1341177&r2=1341178&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 Mon May 21 19:59:38 2012
@@ -84,6 +84,17 @@ public class PmdReport
     private String targetJdk;
 
     /**
+     * The programming language to be analyzed by PMD. Valid values are currently <code>java</code>
+     * and <code>ecmascript</code> or <code>javascript</code>.
+     * <p>
+     * <b>Note:</b> if the parameter targetJdk is given, then this language parameter will be ignored.
+     * </p>
+     *
+     * @parameter default-value="java"
+     */
+    private String language;
+
+    /**
      * The rule priority threshold; rules with lower priority
      * than this will not be evaluated.
      *
@@ -237,6 +248,11 @@ public class PmdReport
         try
         {
             files = getFilesToProcess();
+            if ( files.isEmpty() && !"java".equals( language ) )
+            {
+                getLog().warn(
+                    "No files found to process. Did you add your additional source folders like javascript? (see also build-helper-maven-plugin)" );
+            }
         }
         catch ( IOException e )
         {
@@ -378,14 +394,23 @@ public class PmdReport
         throws MavenReportException
     {
         PMDConfiguration configuration = new PMDConfiguration();
+        LanguageVersion languageVersion = null;
 
         if ( null != targetJdk )
         {
-            LanguageVersion languageVersion = LanguageVersion.findByTerseName( "java " + targetJdk );
+            languageVersion = LanguageVersion.findByTerseName( "java " + targetJdk );
             if ( languageVersion == null )
             {
                 throw new MavenReportException( "Unsupported targetJdk value '" + targetJdk + "'." );
             }
+        }
+        else if ( "javascript".equals( language ) || "ecmascript".equals( language ) )
+        {
+            languageVersion = LanguageVersion.ECMASCRIPT;
+        }
+        if ( languageVersion != null )
+        {
+            getLog().debug( "Using language " + languageVersion );
             configuration.setDefaultLanguageVersion( languageVersion );
         }
 

Modified: maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdReportTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdReportTest.java?rev=1341178&r1=1341177&r2=1341178&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdReportTest.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdReportTest.java Mon May 21 19:59:38 2012
@@ -86,6 +86,37 @@ public class PmdReportTest
     }
 
 
+    public void testJavascriptConfiguration()
+        throws Exception
+    {
+        File testPom = new File( getBasedir(),
+                                 "src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml" );
+        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        mojo.execute();
+
+        // check if the PMD files were generated
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+
+        // these are the rulesets, that have been applied...
+        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/ecmascript-basic.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+
+        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/ecmascript-braces.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+
+        generatedFile =
+            new File( getBasedir(), "target/test/unit/default-configuration/target/ecmascript-unnecessary.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+
+        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
+        renderer( mojo, generatedFile );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+
+        String str = readFile( generatedFile );
+        assertTrue( str.indexOf( "Avoid using global variables" ) != -1 );
+    }
+
     public void testFileURL()
         throws Exception
     {

Added: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml?rev=1341178&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml (added)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml Mon May 21 19:59:38 2012
@@ -0,0 +1,73 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>def.configuration</groupId>
+  <artifactId>default-configuration</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <inceptionYear>2006</inceptionYear>
+  <name>Maven PMD Plugin Javascript Configuration Test</name>
+  <url>http://maven.apache.org</url>
+  <build>
+    <finalName>default-configuration</finalName>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <configuration>
+          <project implementation="org.apache.maven.plugin.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
+          <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
+          <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <format>xml</format>
+          <sourceEncoding>UTF-8</sourceEncoding>
+          <language>javascript</language>
+          <rulesets>
+            <ruleset>ecmascript-basic</ruleset>
+            <ruleset>ecmascript-braces</ruleset>
+            <ruleset>ecmascript-unnecessary</ruleset>
+          </rulesets>
+          
+        <includes>
+            <include>**/*.js</include>
+        </includes>
+          <compileSourceRoots>
+            <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/js/</compileSourceRoot>
+          </compileSourceRoots>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>pmd</groupId>
+            <artifactId>pmd</artifactId>
+            <version>3.6</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jxr-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js?rev=1341178&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js (added)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js Mon May 21 19:59:38 2012
@@ -0,0 +1,5 @@
+(function() {
+
+    globalVariable = 1;
+
+})();
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/js/Sample.js
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision