Hi,

I have added the CPD (copy paste detection) report to the existing PMD plugin. I believe this was the approach preferred previously on the list. For more on CPD please take a look at:

http://pmd.sourceforge.net/cpd.html


Two properties have been added:


  # enable/disable CPD
  maven.pmd.cpd.enable = false

  # minimum length of token sequences considered equal
  maven.pmd.cpd.minimumtokencount = 100


The attached patch was made against maven-plugins head and works for me with rc1. Please feel free to commit this with appropriate modifications.



Regards


Morten
Index: plugin.jelly
===================================================================
retrieving revision 1.10
diff -u -r1.10 plugin.jelly
--- plugin.jelly        20 Nov 2003 15:35:16 -0000      1.10
+++ plugin.jelly        28 Dec 2003 16:34:46 -0000
@@ -19,6 +19,11 @@
         pluginName="pmd"
         description="Verification of coding rules."
         link="pmd-report"/>
+      <doc:registerReport 
+        name="CPD Report"
+        pluginName=""
+        description="Detection of copy-paste code."
+        link="cpd-report"/>
     </j:if>
   </goal>
 
@@ -30,6 +35,7 @@
   <goal name="maven-pmd-plugin:deregister">
     <j:if test="${sourcesPresent}">
       <doc:deregisterReport name="PMD Report"/>
+      <doc:deregisterReport name="CPD Report"/>
     </j:if>
   </goal>
 
@@ -118,6 +124,63 @@
       prettyPrint="true"
     />
 
+    <!-- Generate CPD report if it is enabled -->
+    <j:set var="enable" value="${maven.pmd.cpd.enable}"/>
+
+    <j:if test="${enable == 'true'}">
+      <attainGoal name="pmd:cpd-report"/>
+    </j:if>
   </goal>
-  
+
+  <!--
+     ========================================================================
+       Generate the CPD report.
+     ========================================================================
+  -->
+  <goal name="pmd:cpd-report" 
+    description="Generate duplicate source code report with CPD">
+
+    <!-- Define a CPD task from the PMD jar -->
+    <taskdef name="cpd"
+      classpath="${plugin.getDependencyPath('pmd:pmd')}"
+      classname="net.sourceforge.pmd.cpd.CPDTask"/>
+
+    <!-- Run the CPD task  -->
+    <echo>Running the CPD task with minimumTokenCount = 
${maven.pmd.cpd.minimumtokencount} ...</echo>
+
+    <cpd minimumTokenCount="${maven.pmd.cpd.minimumtokencount}"
+      outputFile="${maven.build.dir}/cpd-raw-report.txt">
+      <!-- cut and paste from pmd:report -->
+      <fileset dir="${pom.build.sourceDirectory}" 
+        includes="${maven.pmd.includes}"
+        excludes="${maven.pmd.excludes}">
+
+        <!-- FIXME: This is a bad cut and paste -->
+        <!-- handle source modifications -->
+        <j:forEach var="sm" items="${pom.build.sourceModifications}">
+          <available property="classPresent" classname="${sm.className}"/>
+          <j:if test="${classPresent != 'true'}">
+            <j:forEach var="exclude" items="${sm.excludes}">
+              <exclude name="${exclude}"/>
+            </j:forEach>
+            <j:forEach var="include" items="${sm.includes}">
+              <include name="${include}"/>
+            </j:forEach>
+          </j:if>
+        </j:forEach>
+      </fileset>
+    </cpd>
+
+    <!-- Convert raw text report into XDOC -->
+
+    <j:set var="genDocs" value="${maven.gen.docs}" />
+    <doc:text-xdoc
+      title="CPD Report"
+      section="CPD Report"
+      inputFile="${maven.build.dir}/cpd-raw-report.txt"
+      output="${genDocs}/cpd-report.xml"
+    />
+
+  </goal>
+
 </project>
Index: plugin.properties
===================================================================
retrieving revision 1.4
diff -u -r1.4 plugin.properties
--- plugin.properties   22 Jul 2003 16:13:27 -0000      1.4
+++ plugin.properties   28 Dec 2003 16:34:46 -0000
@@ -15,3 +15,11 @@
 
 maven.pmd.includes = **/*.java
 maven.pmd.excludes = 
+
+# enable/disable CPD
+
+maven.pmd.cpd.enable = false
+
+# minimum length of token sequences considered equal
+
+maven.pmd.cpd.minimumtokencount = 100
Index: xdocs/properties.xml
===================================================================
retrieving revision 1.2
diff -u -r1.2 properties.xml
--- xdocs/properties.xml        22 Jul 2003 16:13:26 -0000      1.2
+++ xdocs/properties.xml        28 Dec 2003 16:34:47 -0000
@@ -54,6 +54,21 @@
             exclude any files.
           </td>
         </tr>         
+        <tr>
+          <td>maven.pmd.cpd.enable</td>
+          <td>Yes</td>
+          <td>
+            Enable/disable the CPD report. Defaults to "false".
+          </td>
+        </tr>
+        <tr>
+          <td>maven.pmd.cpd.minimumtokencount</td>
+          <td>Yes</td>
+          <td>
+            Specifies the minimal number required to consider two sequences of
+            tokens identical. Defaults to "100".
+          </td>
+        </tr>
       </table>
     </section>
   </body>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to