You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Dennis Lundberg <de...@apache.org> on 2012/01/25 23:06:37 UTC

Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Hi Robert,

The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:

[INFO] Building: mpmd-138\pom.xml
[INFO] ..FAILED (10.9 s)
[INFO]   The post-build script did not succeed. Expression: (1 ==
buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
not part of a loop.))

Can you have a look at it?

On 2012-01-18 21:59, rfscholte@apache.org wrote:
> Author: rfscholte
> Date: Wed Jan 18 20:59:15 2012
> New Revision: 1233066
> 
> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
> Log:
> Fix MPMD-138: Use modello to generate models to read pmd and cpd files
> 
> Added:
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
> Modified:
>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
> 
> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15 2012
> @@ -68,6 +68,33 @@ under the License.
>      <sitePluginVersion>3.0</sitePluginVersion>
>    </properties>
>  
> +  <build>
> +    <plugins>
> +      <plugin>
> +        <groupId>org.codehaus.modello</groupId>
> +        <artifactId>modello-maven-plugin</artifactId>
> +        <version>1.4.1</version>
> +        <configuration>
> +          <useJava5>true</useJava5>
> +          <models>
> +            <model>src/main/mdo/pmd.mdo</model>
> +            <model>src/main/mdo/cpd.mdo</model>
> +          </models>
> +          <version>1.0</version>
> +        </configuration>
> +        <executions>
> +          <execution>
> +            <phase>generate-sources</phase>
> +            <goals>
> +              <goal>java</goal>
> +              <goal>xpp3-reader</goal>
> +            </goals>
> +          </execution>
> +        </executions>
> +      </plugin>
> +    </plugins>
> +  </build>
> +
>    <dependencies>
>      <!-- maven -->
>      <dependency>
> @@ -124,7 +151,7 @@ under the License.
>      <dependency>
>        <groupId>org.codehaus.plexus</groupId>
>        <artifactId>plexus-utils</artifactId>
> -      <version>2.0.5</version>
> +      <version>2.1</version>
>      </dependency>
>  
>      <!-- pmd -->
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties Wed Jan 18 20:59:15 2012
> @@ -0,0 +1 @@
> +invoker.goals = clean verify
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,39 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<!--
> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> +  <modelVersion>4.0.0</modelVersion>
> +
> +  <parent>
> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
> +	  <artifactId>mpmd-138-parent</artifactId>
> +	  <version>1.0-SNAPSHOT</version>
> +  </parent>
> +
> +  <artifactId>mpmd-138-mod-1</artifactId>
> +
> +  <name>Module 1</name>
> +
> +  <properties>
> +    <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
> +  </properties>
> +
> +</project>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,12 @@
> +<?xml version="1.0" encoding="ISO-8859-1"?>
> +<ruleset name="Custom ruleset"
> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
> +  <description>
> +    This ruleset is encoded with ISO-8859-1 to check proper encoding handling.
> +  </description>
> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn" message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in Latin 15, replaced by OE oe Y" and euro -->
> +</ruleset>
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,11 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<ruleset name="Custom ruleset"
> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
> +  <description>
> +    This ruleset is encoded with UTF-8 to check proper encoding handling.
> +  </description>
> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop" message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
> +</ruleset>
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,12 @@
> +package test;
> +
> +public class MyClass
> +{
> +
> +    public static void main( String[] args )
> +    {
> +        ;
> +        return;
> +    }
> +
> +}
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,35 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<!--
> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> +  <modelVersion>4.0.0</modelVersion>
> +
> +  <parent>
> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
> +	  <artifactId>mpmd-138-parent</artifactId>
> +	  <version>1.0-SNAPSHOT</version>
> +  </parent>
> +
> +  <artifactId>mpmd-138-mod-2</artifactId>
> +
> +  <name>Module 2</name>
> +
> +</project>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,11 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<ruleset name="Custom ruleset"
> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
> +  <description>
> +    The relative path of this ruleset matches the built-in ruleset "basic".
> +  </description>
> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop" message="TEST: LOCAL-FILE-RULESET"/>
> +</ruleset>
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,12 @@
> +package test;
> +
> +public class MyClass
> +{
> +
> +    public static void main( String[] args )
> +    {
> +        ;
> +        return;
> +    }
> +
> +}
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,37 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<!--
> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> +  <modelVersion>4.0.0</modelVersion>
> +
> +  <parent>
> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
> +	  <artifactId>mpmd-138-parent</artifactId>
> +	  <version>1.0-SNAPSHOT</version>
> +  </parent>
> +
> +  <artifactId>mpmd-138-mod-3</artifactId>
> +
> +  <name>Module 3</name>
> +  
> +  <description>Test 3 classes with copy-paste block</description>
> +  
> +</project>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,39 @@
> +package test;
> +
> +public class MyClass
> +{
> +
> +    
> +    /**
> +     * 
> +     * @param args
> +     */
> +    public static void main( String[] args )
> +    {
> +        int nullArgs = 0;
> +        int emptyArgs = 0;
> +        int notEmptyArgs = 0;
> +        for ( int i = 0; i < args.length; i++ )
> +        {
> +            if( args[i] == null )
> +            {
> +                nullArgs++;
> +                System.out.println( "arg[" + i + "] is null, weird" );
> +            }
> +            else if( args[i] == "" )
> +            {
> +                emptyArgs++;
> +                System.out.println( "arg[" + i + "] is empty" );
> +            }
> +            else
> +            {
> +                notEmptyArgs++;
> +                System.out.println( "arg[" + i + "] is not empty" );
> +            }
> +            System.out.print( "Number of null args: " + nullArgs );
> +            System.out.print( "Number of empty args: " + emptyArgs );
> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
> +        }
> +    }
> +
> +}
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,40 @@
> +package test.sub;
> +
> +public class MyClass
> +{
> +
> +    
> +    
> +    
> +    /**
> +     * 
> +     * @param args
> +     */
> +    public static void main( String[] args )
> +    {
> +        int nullArgs = 0;
> +        int emptyArgs = 0;
> +        int notEmptyArgs = 0;
> +        for ( int i = 0; i < args.length; i++ )
> +        {
> +            if( args[i] == null )
> +            {
> +                nullArgs++;
> +                System.out.println( "arg[" + i + "] is null, weird" );
> +            }
> +            else if( args[i] == "" )
> +            {
> +                emptyArgs++;
> +                System.out.println( "arg[" + i + "] is empty" );
> +            }
> +            else
> +            {
> +                notEmptyArgs++;
> +                System.out.println( "arg[" + i + "] is not empty" );
> +            }
> +            System.out.print( "Number of null args: " + nullArgs );
> +            System.out.print( "Number of empty args: " + emptyArgs );
> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
> +        }
> +    }
> +}
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,37 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<!--
> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> +  <modelVersion>4.0.0</modelVersion>
> +
> +  <parent>
> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
> +	  <artifactId>mpmd-138-parent</artifactId>
> +	  <version>1.0-SNAPSHOT</version>
> +  </parent>
> +
> +  <artifactId>mpmd-138-mod-4</artifactId>
> +  
> +  <name>Module 4</name>
> +  
> +  <description>Test 3 classes with copy-paste block</description>
> +
> +</project>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,37 @@
> +package test;
> +
> +public class MyClass
> +{
> +
> +    /**
> +     * 
> +     * @param args
> +     */
> +    public static void main( String[] args )
> +    {
> +        int nullArgs = 0;
> +        int emptyArgs = 0;
> +        int notEmptyArgs = 0;
> +        for ( int i = 0; i < args.length; i++ )
> +        {
> +            if( args[i] == null )
> +            {
> +                nullArgs++;
> +                System.out.println( "arg[" + i + "] is null, weird" );
> +            }
> +            else if( args[i] == "" )
> +            {
> +                emptyArgs++;
> +                System.out.println( "arg[" + i + "] is empty" );
> +            }
> +            else
> +            {
> +                notEmptyArgs++;
> +                System.out.println( "arg[" + i + "] is not empty" );
> +            }
> +            System.out.print( "Number of null args: " + nullArgs );
> +            System.out.print( "Number of empty args: " + emptyArgs );
> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
> +        }
> +    }
> +}
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,40 @@
> +package test;
> +
> +public class OtherClass
> +{
> +
> +    
> +    
> +    
> +    /**
> +     * 
> +     * @param args
> +     */
> +    public static void main( String[] args )
> +    {
> +        int nullArgs = 0;
> +        int emptyArgs = 0;
> +        int notEmptyArgs = 0;
> +        for ( int i = 0; i < args.length; i++ )
> +        {
> +            if( args[i] == null )
> +            {
> +                nullArgs++;
> +                System.out.println( "arg[" + i + "] is null, weird" );
> +            }
> +            else if( args[i] == "" )
> +            {
> +                emptyArgs++;
> +                System.out.println( "arg[" + i + "] is empty" );
> +            }
> +            else
> +            {
> +                notEmptyArgs++;
> +                System.out.println( "arg[" + i + "] is not empty" );
> +            }
> +            System.out.print( "Number of null args: " + nullArgs );
> +            System.out.print( "Number of empty args: " + emptyArgs );
> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
> +        }
> +    }
> +}
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,36 @@
> +package test.sub;
> +
> +public class MyClass
> +{
> +    /**
> +     * 
> +     * @param args
> +     */
> +    public static void main( String[] args )
> +    {
> +        int nullArgs = 0;
> +        int emptyArgs = 0;
> +        int notEmptyArgs = 0;
> +        for ( int i = 0; i < args.length; i++ )
> +        {
> +            if( args[i] == null )
> +            {
> +                nullArgs++;
> +                System.out.println( "arg[" + i + "] is null, weird" );
> +            }
> +            else if( args[i] == "" )
> +            {
> +                emptyArgs++;
> +                System.out.println( "arg[" + i + "] is empty" );
> +            }
> +            else
> +            {
> +                notEmptyArgs++;
> +                System.out.println( "arg[" + i + "] is not empty" );
> +            }
> +            System.out.print( "Number of null args: " + nullArgs );
> +            System.out.print( "Number of empty args: " + emptyArgs );
> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
> +        }
> +    }
> +}
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,67 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +
> +<!--
> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> +  <modelVersion>4.0.0</modelVersion>
> +
> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
> +  <artifactId>mpmd-138-parent</artifactId>
> +  <version>1.0-SNAPSHOT</version>
> +  <packaging>pom</packaging>
> +
> +  <name>Parent</name>
> +  <description>
> +    Test proper report generation in a multi-module build.
> +  </description>
> +
> +  <modules>
> +    <module>mod-1</module>
> +    <module>mod-2</module>
> +    <module>mod-3</module>
> +    <module>mod-4</module>
> +  </modules>
> +
> +  <properties>
> +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> +  </properties>
> +
> +  <build>
> +    <plugins>
> +      <plugin>
> +        <artifactId>maven-pmd-plugin</artifactId>
> +        <version>@project.version@</version>
> +        <executions>
> +          <execution>
> +            <goals>
> +              <goal>check</goal>
> +              <goal>cpd-check</goal>
> +            </goals>
> +          </execution>
> +        </executions>
> +        <configuration>
> +          <verbose>true</verbose>
> +          <minimumTokens>25</minimumTokens>
> +          <failOnViolation>false</failOnViolation> <!-- force execution of both goals, will be checked with verify-script -->
> +        </configuration>
> +      </plugin>
> +    </plugins>
> +  </build>
> +</project>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,37 @@
> +
> +/*
> + * 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.
> + */
> +
> +File buildLog = new File( basedir, 'build.log' )
> +assert buildLog.exists()
> +
> +// Module 1
> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon) not part of a loop.')
> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary return statements.')
> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD violations. For more details see:')
> +
> +// Module 2
> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST: LOCAL-FILE-RULESET.')
> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD violation. For more details see:')
> +
> +// Module 3
> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD duplication. For more details see:')
> +
> +// Module 4
> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD duplications. For more details see:')
> \ No newline at end of file
> 
> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java (original)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
> @@ -23,19 +23,13 @@ import java.io.File;
>  import java.io.IOException;
>  import java.io.Reader;
>  import java.util.ArrayList;
> -import java.util.HashMap;
>  import java.util.List;
> -import java.util.Map;
>  
>  import org.apache.maven.plugin.AbstractMojo;
>  import org.apache.maven.plugin.MojoExecutionException;
>  import org.apache.maven.plugin.MojoFailureException;
>  import org.apache.maven.project.MavenProject;
>  import org.codehaus.plexus.util.IOUtil;
> -import org.codehaus.plexus.util.ReaderFactory;
> -import org.codehaus.plexus.util.StringUtils;
> -import org.codehaus.plexus.util.xml.pull.MXParser;
> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>  
>  /**
> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>   * @version $Id$
>   */
> -public abstract class AbstractPmdViolationCheckMojo
> +public abstract class AbstractPmdViolationCheckMojo<D>
>      extends AbstractMojo
>  {
> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
> -
> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
> -
>      /**
>       * The location of the XML report to check, as generated by the PMD report.
>       *
> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>                  Reader reader = null;
>                  try
>                  {
> -                    XmlPullParser xpp = new MXParser();
> -                    reader = ReaderFactory.newXmlReader( outputFile );
> -                    xpp.setInput( reader );
> -
> -                    Map<Boolean, List<Map<String, String>>> violations = getViolations( xpp, tagName, failurePriority );
> +                    ViolationDetails<D> violations = getViolations( outputFile, failurePriority );
>  
> -                    List<Map<String, String>> failures = violations.get( FAILURES_KEY );
> -                    List<Map<String, String>> warnings = violations.get( WARNINGS_KEY );
> +                    List<D> failures = violations.getFailureDetails();
> +                    List<D> warnings = violations.getWarningDetails();
>  
>                      if ( verbose )
>                      {
> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>       * @throws XmlPullParserException
>       * @throws IOException
>       */
> -    private Map<Boolean, List<Map<String, String>>> getViolations( XmlPullParser xpp, String tagName, int failurePriority )
> +    private ViolationDetails<D> getViolations( File analysisFile, int failurePriority )
>          throws XmlPullParserException, IOException
>      {
> -        int eventType = xpp.getEventType();
> -
> -        List<Map<String, String>> failures = new ArrayList<Map<String, String>>();
> -        List<Map<String, String>> warnings = new ArrayList<Map<String, String>>();
> -
> -        String fullpath = null;
> +        List<D> failures = new ArrayList<D>();
> +        List<D> warnings = new ArrayList<D>();
>  
> -        while ( eventType != XmlPullParser.END_DOCUMENT )
> +        List<D> violations = getErrorDetails( analysisFile );
> +        
> +        for( D violation : violations )
>          {
> -            if ( eventType == XmlPullParser.START_TAG && "file".equals( xpp.getName() ) )
> +            int priority = getPriority( violation );
> +            if ( priority <= failurePriority )
>              {
> -                fullpath = xpp.getAttributeValue( "", "name" );
> +                failures.add( violation );
>              }
> -            if ( eventType == XmlPullParser.START_TAG && tagName.equals( xpp.getName() ) )
> -            {
> -                Map<String, String> details = getErrorDetails( xpp );
> -
> -                if ( fullpath != null )
> -                {
> -                    details.put( "filename", getFilename( fullpath, details.get( "package" ) ) );
> -                }
> -
> -                try
> -                {
> -                    int priority = Integer.parseInt( details.get( "priority" ) );
> -                    if ( priority <= failurePriority )
> -                    {
> -                        failures.add( details );
> -                    }
> -                    else
> -                    {
> -                        warnings.add( details );
> -                    }
> -                }
> -                catch ( NumberFormatException e )
> -                {
> -                    // I don't know what priority this is. Treat it like a
> -                    // failure
> -                    failures.add( details );
> -                }
> -                catch ( NullPointerException e )
> -                {
> -                    // I don't know what priority this is. Treat it like a
> -                    // failure
> -                    failures.add( details );
> -                }
> -
> -            }
> -
> -            eventType = xpp.next();
> -        }
> -
> -        Map<Boolean, List<Map<String, String>>> map = new HashMap<Boolean, List<Map<String, String>>>( 2 );
> -        map.put( FAILURES_KEY, failures );
> -        map.put( WARNINGS_KEY, warnings );
> -        return map;
> -    }
> -
> -    private String getFilename( String fullpath, String pkg )
> -    {
> -        int index = fullpath.lastIndexOf( File.separatorChar );
> -
> -        while ( StringUtils.isNotEmpty( pkg ) )
> -        {
> -            index = fullpath.substring( 0, index ).lastIndexOf( File.separatorChar );
> -
> -            int dot = pkg.indexOf( '.' );
> -
> -            if ( dot < 0 )
> +            else
>              {
> -                break;
> +                warnings.add( violation );
>              }
> -            pkg = pkg.substring( dot + 1 );
>          }
> -
> -        return fullpath.substring( index + 1 );
> +        
> +        ViolationDetails<D> details = newViolationDetailsInstance();
> +        details.setFailureDetails( failures );
> +        details.setWarningDetails( warnings );
> +        return details;
>      }
> +    
> +    protected abstract int getPriority( D errorDetail );
> +    
> +    protected abstract ViolationDetails<D> newViolationDetailsInstance();
>  
>      /**
>       * Prints the warnings and failures
> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>       * @param warnings
>       *            list of warnings
>       */
> -    protected void printErrors( List<Map<String, String>> failures, List<Map<String, String>> warnings )
> +    protected void printErrors( List<D> failures, List<D> warnings )
>      {
> -        for ( Map<String, String> warning :  warnings )
> +        for ( D warning :  warnings )
>          {
>              printError( warning, "Warning" );
>          }
>  
> -        for ( Map<String, String> failure : failures )
> +        for ( D failure : failures )
>          {
>              printError( failure, "Failure" );
>          }
> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>       *
>       * @param item
>       */
> -    protected abstract void printError( Map<String, String> item, String severity );
> +    protected abstract void printError( D item, String severity );
>  
>      /**
>       * Gets the attributes and text for the violation tag and puts them in a
> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>       * @throws XmlPullParserException
>       * @throws IOException
>       */
> -    protected abstract Map<String, String> getErrorDetails( XmlPullParser xpp )
> +    protected abstract List<D> getErrorDetails( File analisysFile )
>          throws XmlPullParserException, IOException;
>  }
> \ No newline at end of file
> 
> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java (original)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>   * under the License.
>   */
>  
> +import java.io.File;
> +import java.io.FileReader;
>  import java.io.IOException;
> -import java.util.HashMap;
> -import java.util.Map;
> +import java.util.List;
>  
>  import org.apache.maven.plugin.MojoExecutionException;
>  import org.apache.maven.plugin.MojoFailureException;
> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
> +import org.apache.maven.plugin.pmd.model.CpdFile;
> +import org.apache.maven.plugin.pmd.model.Duplication;
> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>  
>  /**
> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>   * @threadSafe
>   */
>  public class CpdViolationCheckMojo
> -    extends AbstractPmdViolationCheckMojo
> +    extends AbstractPmdViolationCheckMojo<Duplication>
>  {
>  
>      /**
> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>      }
>  
>      /** {@inheritDoc} */
> -    protected void printError( Map item, String severity )
> +    protected void printError( Duplication item, String severity )
>      {
> -        String lines = (String) item.get( "lines" );
> +        int lines = item.getLines();
>  
>  
>          StringBuffer buff = new StringBuffer( 100 );
> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>          buff.append( lines ).append( " lines of duplicated code at locations:" );
>          this.getLog().info( buff.toString() );
>  
> -        buff.setLength( 0 );
> -        buff.append( "    " );
> -        Map file = (Map) item.get( "file" );
> -        buff.append( file.get( "path" ) );
> -        buff.append( " line " ).append( file.get( "line" ) );
> -        this.getLog().info( buff.toString() );
> -
> -        buff.setLength( 0 );
> -        buff.append( "    " );
> -        file = (Map) item.get( "file1" );
> -        buff.append( file.get( "path" ) );
> -        buff.append( " line " ).append( file.get( "line" ) );
> -        this.getLog().info( buff.toString() );
> +        
> +        for( CpdFile file : item.getFiles() )
> +        {
> +            buff.setLength( 0 );
> +            buff.append( "    " );
> +            buff.append( file.getPath() );
> +            buff.append( " line " ).append( file.getLine() );
> +            this.getLog().info( buff.toString() );
> +        }
>  
> -        Map codefrag = (Map) item.get( "codefragment" );
> -        String codefragstr = (String) codefrag.get( "text" );
>          this.getLog().debug( "CPD " + severity + ": Code Fragment " );
> -        this.getLog().debug( codefragstr );
> +        this.getLog().debug( item.getCodefragment() );
>      }
>  
>      /** {@inheritDoc} */
> -    protected Map getErrorDetails( XmlPullParser xpp )
> +    protected List<Duplication> getErrorDetails( File cpdFile )
>          throws XmlPullParserException, IOException
>      {
> -        int index = 0;
> -        int attributeCount = 0;
> -        HashMap msgs = new HashMap();
> -
> -        attributeCount = xpp.getAttributeCount();
> -        while ( index < attributeCount )
> -        {
> -            msgs.put( xpp.getAttributeName( index ), xpp.getAttributeValue( index ) );
> -
> -            index++;
> -        }
> -
> -        int tp = xpp.next();
> -        while ( tp != XmlPullParser.END_TAG )
> -        {
> -            // get the tag's text
> -            switch ( tp )
> -            {
> -            case XmlPullParser.TEXT:
> -                msgs.put( "text", xpp.getText().trim() );
> -                break;
> -            case XmlPullParser.START_TAG:
> -                String nm = xpp.getName();
> -                if ( msgs.containsKey( nm ) )
> -                {
> -                    int cnt = 1;
> -                    while ( msgs.containsKey( nm + cnt ) )
> -                    {
> -                        ++cnt;
> -                    }
> -                    nm = nm + cnt;
> -                }
> -                msgs.put( nm, getErrorDetails( xpp ) );
> -                break;
> -            default:
> -            }
> -            tp = xpp.next();
> -        }
> -        return msgs;
> +        CpdXpp3Reader reader = new CpdXpp3Reader();
> +        CpdErrorDetail details = reader.read( new FileReader( cpdFile ), false );
> +        return details.getDuplications();
> +    }
> +    
> +    @Override
> +    protected int getPriority( Duplication errorDetail )
> +    {
> +        return 0;
> +    }
> +    
> +    @Override
> +    protected ViolationDetails<Duplication> newViolationDetailsInstance()
> +    {
> +        return new ViolationDetails<Duplication>();
>      }
> -}
> +}
> \ No newline at end of file
> 
> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java (original)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>   * under the License.
>   */
>  
> +import java.io.File;
> +import java.io.FileReader;
>  import java.io.IOException;
> -import java.util.HashMap;
> -import java.util.Map;
> +import java.util.ArrayList;
> +import java.util.List;
>  
>  import org.apache.maven.plugin.MojoExecutionException;
>  import org.apache.maven.plugin.MojoFailureException;
> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
> +import org.apache.maven.plugin.pmd.model.PmdFile;
> +import org.apache.maven.plugin.pmd.model.Violation;
> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
> +import org.codehaus.plexus.util.StringUtils;
>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>  
> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>   * @threadSafe
>   */
>  public class PmdViolationCheckMojo
> -    extends AbstractPmdViolationCheckMojo
> +    extends AbstractPmdViolationCheckMojo<Violation>
>  {
>      /**
>       * What priority level to fail the build on. Failures at or above this level
> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>      }
>  
>      /** {@inheritDoc} */
> -    protected void printError( Map<String, String> item, String severity )
> +    protected void printError( Violation item, String severity )
>      {
>  
>          StringBuffer buff = new StringBuffer( 100 );
>          buff.append( "PMD " + severity + ": " );
> -        if ( item.containsKey( "class" ) )
> +        if ( item.getViolationClass() != null )
>          {
> -            if ( item.containsKey( "package" ) )
> +            if ( item.getViolationPackage() != null )
>              {
> -                buff.append( item.get( "package" ) );
> +                buff.append( item.getViolationPackage() );
>                  buff.append( "." );
>              }
> -            buff.append( item.get( "class" ) );
> +            buff.append( item.getViolationClass() );
>          }
>          else
>          {
> -            buff.append( item.get( "filename" ) );
> +            buff.append( item.getFileName() );
>          }
>          buff.append( ":" );
> -        buff.append( item.get( "beginline" ) );
> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
> -        buff.append( " Priority:" ).append( item.get( "priority" ) );
> -        buff.append( " " ).append( item.get( "text" ) ).append( "." );
> +        buff.append( item.getBeginline() );
> +        buff.append( " Rule:" ).append( item.getRule() );
> +        buff.append( " Priority:" ).append( item.getPriority() );
> +        buff.append( " " ).append( item.getText() ).append( "." );
>  
>          this.getLog().info( buff.toString() );
>      }
> -
> -    /** {@inheritDoc} */
> -    protected Map<String, String> getErrorDetails( XmlPullParser xpp )
> +    
> +    @Override
> +    protected List<Violation> getErrorDetails( File pmdFile )
>          throws XmlPullParserException, IOException
>      {
> -        int index = 0;
> -        int attributeCount = 0;
> -        Map<String, String> msgs = new HashMap<String, String>();
> +        PmdXpp3Reader reader = new PmdXpp3Reader();
> +        PmdErrorDetail details = reader.read( new FileReader( pmdFile ), false );
>  
> -        attributeCount = xpp.getAttributeCount();
> -        while ( index < attributeCount )
> +        List<Violation> violations = new ArrayList<Violation>();
> +        for( PmdFile file : details.getFiles() )
>          {
> -
> -            msgs.put( xpp.getAttributeName( index ), xpp.getAttributeValue( index ) );
> -
> -            index++;
> +            String fullPath = file.getName();
> +            
> +            for ( Violation violation : file.getViolations() )
> +            {
> +                violation.setFileName( getFilename( fullPath, violation.getViolationPackage() ) );
> +                violations.add( violation );
> +            }
>          }
> +        return violations;
> +    }
> +    
> +    @Override
> +    protected int getPriority( Violation errorDetail )
> +    {
> +        return errorDetail.getPriority();
> +    }
> +    
> +    @Override
> +    protected ViolationDetails<Violation> newViolationDetailsInstance()
> +    {
> +        return new ViolationDetails<Violation>();
> +    }
> +    
> +    private String getFilename( String fullpath, String pkg )
> +    {
> +        int index = fullpath.lastIndexOf( File.separatorChar );
>  
> -        // get the tag's text
> -        if ( xpp.next() == XmlPullParser.TEXT )
> +        while ( StringUtils.isNotEmpty( pkg ) )
>          {
> -            msgs.put( "text", xpp.getText().trim() );
> +            index = fullpath.substring( 0, index ).lastIndexOf( File.separatorChar );
> +
> +            int dot = pkg.indexOf( '.' );
> +
> +            if ( dot < 0 )
> +            {
> +                break;
> +            }
> +            pkg = pkg.substring( dot + 1 );
>          }
> -        return msgs;
> +
> +        return fullpath.substring( index + 1 );
>      }
>  }
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,69 @@
> +package org.apache.maven.plugin.pmd;
> +
> +/*
> + * 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.
> + */
> +
> +import java.util.ArrayList;
> +import java.util.List;
> +
> +/**
> + * Collector of warnings and failures.
> + * 
> + * @author Robert Scholte
> + * @param <D> 
> + * @since 2.7
> + */
> +public class ViolationDetails<D>
> +{
> +    private List<D> warningDetails = new ArrayList<D>();
> +    
> +    private List<D> failureDetails = new ArrayList<D>();
> +
> +    /**
> +     * @return the warningDetails, never {@code null}
> +     */
> +    public List<D> getWarningDetails()
> +    {
> +        return warningDetails;
> +    }
> +
> +    /**
> +     * @param warningDetails the warningDetails to set
> +     */
> +    public void setWarningDetails( List<D> warningDetails )
> +    {
> +        this.warningDetails = warningDetails;
> +    }
> +
> +    /**
> +     * @return the failureDetails, never {@code null}
> +     */
> +    public List<D> getFailureDetails()
> +    {
> +        return failureDetails;
> +    }
> +
> +    /**
> +     * @param failureDetails the failureDetails to set
> +     */
> +    public void setFailureDetails( List<D> failureDetails )
> +    {
> +        this.failureDetails = failureDetails;
> +    }
> +}
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,70 @@
> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
> +  
> +  <!-- Source: http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd -->
> +  
> +  <name>Cpd</name>
> +  
> +  <defaults>
> +    <default>
> +      <key>package</key>
> +      <value>org.apache.maven.plugin.pmd.model</value>
> +    </default>
> +  </defaults>
> +  <versionDefinition>
> +    <type>namespace</type>
> +    <value>1.0+</value>
> +  </versionDefinition>
> +  
> +  <classes>
> +    <class xml.tagName="pmd-cpd" rootElement="true">
> +      <name>CpdErrorDetail</name>
> +      <fields>
> +        <field>
> +          <name>duplications</name>
> +          <association xml.tagName="duplication" xml.itemsStyle="flat">
> +            <type>Duplication</type>
> +            <multiplicity>*</multiplicity>
> +          </association>
> +        </field>
> +      </fields>
> +    </class>
> +    <class>
> +      <name>Duplication</name>
> +      <fields>
> +        <field xml.attribute="true">
> +          <name>lines</name>
> +          <type>int</type>
> +        </field>
> +        <field xml.attribute="true">
> +          <name>tokens</name>
> +          <type>int</type>
> +        </field>
> +        <field xml.tagName="file">
> +          <name>files</name>
> +          <association xml.tagName="file" xml.itemsStyle="flat">
> +            <type>CpdFile</type>
> +            <multiplicity>*</multiplicity>
> +          </association>
> +        </field>
> +        <field>
> +          <name>codefragment</name>
> +          <type>String</type>
> +        </field>
> +      </fields>
> +    </class>
> +    <class xml.tagName="file">
> +      <name>CpdFile</name>
> +      <fields>
> +        <field xml.attribute="true">
> +          <name>line</name>
> +          <type>int</type>
> +        </field>
> +        <field xml.attribute="true">
> +          <name>path</name>
> +          <type>String</type>
> +        </field>
> +      </fields>
> +    </class>
> +  </classes>
> +</model>
> \ No newline at end of file
> 
> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
> ==============================================================================
> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed Jan 18 20:59:15 2012
> @@ -0,0 +1,109 @@
> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
> +
> +  <!-- Source: http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->
> +
> +  <name>Pmd</name>
> +  
> +  <defaults>
> +    <default>
> +      <key>package</key>
> +      <value>org.apache.maven.plugin.pmd.model</value>
> +    </default>
> +  </defaults>
> +  <versionDefinition>
> +    <type>namespace</type>
> +    <value>1.0+</value>
> +  </versionDefinition>
> + 
> +  <classes>
> +    <class rootElement="true" xml.tagName="pmd">
> +      <name>PmdErrorDetail</name>
> +      <fields>
> +        <field>
> +          <name>files</name>
> +          <association xml.tagName="file" xml.itemsStyle="flat">
> +            <type>PmdFile</type>
> +            <multiplicity>*</multiplicity>
> +          </association>
> +        </field>
> +        <!-- 
> +        <field>
> +          <name>errors</name>
> +          <association xml.tagName="error" xml.itemsStyle="flat">
> +            <type>PmdError</type>
> +            <multiplicity>*</multiplicity>
> +          </association>
> +        </field>
> +         -->
> +      </fields>
> +    </class>
> +    <class>
> +      <name>PmdFile</name>
> +      <fields>
> +        <field xml.attribute="true">
> +          <name>name</name>
> +          <type>String</type>
> +        </field>
> +        <field>
> +          <name>violations</name>
> +          <association xml.tagName="violation" xml.itemsStyle="flat">
> +            <type>Violation</type>
> +            <multiplicity>*</multiplicity>
> +          </association>
> +        </field>
> +      </fields>
> +    </class>
> +    <class>
> +      <name>Violation</name>
> +      <fields>
> +        <field xml.attribute="true">
> +          <name>beginline</name>
> +          <type>int</type>
> +        </field>
> +        <field xml.tagName="class" xml.attribute="true">
> +          <name>violationClass</name>
> +          <type>String</type>
> +        </field>
> +        <field xml.tagName="package" xml.attribute="true">
> +          <name>violationPackage</name>
> +          <type>String</type>
> +        </field>
> +        <field xml.attribute="true">
> +          <name>rule</name>
> +          <type>String</type>
> +        </field>
> +        <field  xml.attribute="true">
> +          <name>priority</name>
> +          <type>int</type>
> +        </field>
> +        <field xml.content="true">
> +          <name>text</name>
> +          <type>String</type>
> +        </field>
> +      </fields>
> +      <codeSegments>
> +        <codeSegment>
> +          <code>
> +          <![CDATA[
> +            private String fileName;
> +            
> +            public void setFileName( String fileName )
> +            {
> +              this.fileName = fileName;
> +            }
> +          
> +            public String getFileName()
> +            {
> +              return fileName;
> +            }
> +          ]]>
> +          </code>
> +        </codeSegment>
> +      </codeSegments>
> +    </class>
> +  </classes>   
> +    
> + 
> +    
> +</model>
> \ No newline at end of file
> 
> 
> 


-- 
Dennis Lundberg

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Posted by Dennis Lundberg <de...@apache.org>.
Hi Robert,

Confirmed that it's working now with Maven 2.2.1 and 3.0.3 on both
Windows 7 and Ubuntu. Thank a lot!


On 2012-01-26 22:36, Robert Scholte wrote:
> Hi Dennis,
> 
> Win7 with both M2.2.1 and M3.0.4 look fine now.
> Can you confirm the complete set?
> 
> -Robert
> 
> On Thu, 26 Jan 2012 22:22:55 +0100, Dennis Lundberg <de...@apache.org>
> wrote:
> 
>> Thanks Robert
>>
>> Let me know what I can do to help.
>>
>> On 2012-01-26 21:47, Robert Scholte wrote:
>>> Always nice, unstable tests :S
>>> Win7 + M3.0.4 sometimes fails, sometimes succeed.
>>>
>>> This shows there are not enough tests for the m-pmd-p.
>>> Easiest solution is to remove a few verification-lines, but actually I
>>> want to know what's going on.
>>>
>>> I'll dive into this.
>>>
>>> -Robert
>>>
>>> On Wed, 25 Jan 2012 23:10:30 +0100, Dennis Lundberg <de...@apache.org>
>>> wrote:
>>>
>>>> Some more data on my setup:
>>>>
>>>> On Ubuntu the IT fails with Maven 2.2.1, but it works with Maven 3.0.3
>>>>
>>>> On Windows 7 the IT fails with both Maven 2.2.1 and Maven 3.0.3
>>>>
>>>>
>>>> On 2012-01-25 23:06, Dennis Lundberg wrote:
>>>>> Hi Robert,
>>>>>
>>>>> The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:
>>>>>
>>>>> [INFO] Building: mpmd-138\pom.xml
>>>>> [INFO] ..FAILED (10.9 s)
>>>>> [INFO]   The post-build script did not succeed. Expression: (1 ==
>>>>> buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
>>>>> Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
>>>>> not part of a loop.))
>>>>>
>>>>> Can you have a look at it?
>>>>>
>>>>> On 2012-01-18 21:59, rfscholte@apache.org wrote:
>>>>>> Author: rfscholte
>>>>>> Date: Wed Jan 18 20:59:15 2012
>>>>>> New Revision: 1233066
>>>>>>
>>>>>> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
>>>>>> Log:
>>>>>> Fix MPMD-138: Use modello to generate models to read pmd and cpd
>>>>>> files
>>>>>>
>>>>>> Added:
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>>>>>>    
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>>>>>>    
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>>>>>>    
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>>>>>>    
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>>>    
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>>
>>>>>>
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>>>> Modified:
>>>>>>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>>
>>>>>> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
>>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15
>>>>>> 2012
>>>>>> @@ -68,6 +68,33 @@ under the License.
>>>>>>      <sitePluginVersion>3.0</sitePluginVersion>
>>>>>>    </properties>
>>>>>>
>>>>>> +  <build>
>>>>>> +    <plugins>
>>>>>> +      <plugin>
>>>>>> +        <groupId>org.codehaus.modello</groupId>
>>>>>> +        <artifactId>modello-maven-plugin</artifactId>
>>>>>> +        <version>1.4.1</version>
>>>>>> +        <configuration>
>>>>>> +          <useJava5>true</useJava5>
>>>>>> +          <models>
>>>>>> +            <model>src/main/mdo/pmd.mdo</model>
>>>>>> +            <model>src/main/mdo/cpd.mdo</model>
>>>>>> +          </models>
>>>>>> +          <version>1.0</version>
>>>>>> +        </configuration>
>>>>>> +        <executions>
>>>>>> +          <execution>
>>>>>> +            <phase>generate-sources</phase>
>>>>>> +            <goals>
>>>>>> +              <goal>java</goal>
>>>>>> +              <goal>xpp3-reader</goal>
>>>>>> +            </goals>
>>>>>> +          </execution>
>>>>>> +        </executions>
>>>>>> +      </plugin>
>>>>>> +    </plugins>
>>>>>> +  </build>
>>>>>> +
>>>>>>    <dependencies>
>>>>>>      <!-- maven -->
>>>>>>      <dependency>
>>>>>> @@ -124,7 +151,7 @@ under the License.
>>>>>>      <dependency>
>>>>>>        <groupId>org.codehaus.plexus</groupId>
>>>>>>        <artifactId>plexus-utils</artifactId>
>>>>>> -      <version>2.0.5</version>
>>>>>> +      <version>2.1</version>
>>>>>>      </dependency>
>>>>>>
>>>>>>      <!-- pmd -->
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1 @@
>>>>>> +invoker.goals = clean verify
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,39 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +
>>>>>> +<!--
>>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>>> +
>>>>>> +  <parent>
>>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>>> +  </parent>
>>>>>> +
>>>>>> +  <artifactId>mpmd-138-mod-1</artifactId>
>>>>>> +
>>>>>> +  <name>Module 1</name>
>>>>>> +
>>>>>> +  <properties>
>>>>>> +
>>>>>> <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
>>>>>>
>>>>>>
>>>>>> +  </properties>
>>>>>> +
>>>>>> +</project>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,12 @@
>>>>>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>>>>>> +<ruleset name="Custom ruleset"
>>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>>> +
>>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>>
>>>>>>
>>>>>> +  <description>
>>>>>> +    This ruleset is encoded with ISO-8859-1 to check proper
>>>>>> encoding handling.
>>>>>> +  </description>
>>>>>> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn"
>>>>>> message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>>>> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in
>>>>>> Latin 15, replaced by OE oe Y" and euro -->
>>>>>> +</ruleset>
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,11 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +<ruleset name="Custom ruleset"
>>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>>> +
>>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>>
>>>>>>
>>>>>> +  <description>
>>>>>> +    This ruleset is encoded with UTF-8 to check proper encoding
>>>>>> handling.
>>>>>> +  </description>
>>>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>>>> message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>>>> +</ruleset>
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,12 @@
>>>>>> +package test;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        ;
>>>>>> +        return;
>>>>>> +    }
>>>>>> +
>>>>>> +}
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,35 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +
>>>>>> +<!--
>>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>>> +
>>>>>> +  <parent>
>>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>>> +  </parent>
>>>>>> +
>>>>>> +  <artifactId>mpmd-138-mod-2</artifactId>
>>>>>> +
>>>>>> +  <name>Module 2</name>
>>>>>> +
>>>>>> +</project>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,11 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +<ruleset name="Custom ruleset"
>>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>>> +
>>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>>
>>>>>>
>>>>>> +  <description>
>>>>>> +    The relative path of this ruleset matches the built-in ruleset
>>>>>> "basic".
>>>>>> +  </description>
>>>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>>>> message="TEST: LOCAL-FILE-RULESET"/>
>>>>>> +</ruleset>
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,12 @@
>>>>>> +package test;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        ;
>>>>>> +        return;
>>>>>> +    }
>>>>>> +
>>>>>> +}
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,37 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +
>>>>>> +<!--
>>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>>> +
>>>>>> +  <parent>
>>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>>> +  </parent>
>>>>>> +
>>>>>> +  <artifactId>mpmd-138-mod-3</artifactId>
>>>>>> +
>>>>>> +  <name>Module 3</name>
>>>>>> +
>>>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>>>> +
>>>>>> +</project>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,39 @@
>>>>>> +package test;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +
>>>>>> +
>>>>>> +    /**
>>>>>> +     *
>>>>>> +     * @param args
>>>>>> +     */
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        int nullArgs = 0;
>>>>>> +        int emptyArgs = 0;
>>>>>> +        int notEmptyArgs = 0;
>>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>>> +        {
>>>>>> +            if( args[i] == null )
>>>>>> +            {
>>>>>> +                nullArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is null,
>>>>>> weird" );
>>>>>> +            }
>>>>>> +            else if( args[i] == "" )
>>>>>> +            {
>>>>>> +                emptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>>> +            }
>>>>>> +            else
>>>>>> +            {
>>>>>> +                notEmptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>>> +            }
>>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>>> +            System.out.print( "Number of empty args: " +
>>>>>> emptyArgs );
>>>>>> +            System.out.print( "Number of not empty args: " +
>>>>>> notEmptyArgs );
>>>>>> +        }
>>>>>> +    }
>>>>>> +
>>>>>> +}
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,40 @@
>>>>>> +package test.sub;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +
>>>>>> +
>>>>>> +
>>>>>> +
>>>>>> +    /**
>>>>>> +     *
>>>>>> +     * @param args
>>>>>> +     */
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        int nullArgs = 0;
>>>>>> +        int emptyArgs = 0;
>>>>>> +        int notEmptyArgs = 0;
>>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>>> +        {
>>>>>> +            if( args[i] == null )
>>>>>> +            {
>>>>>> +                nullArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is null,
>>>>>> weird" );
>>>>>> +            }
>>>>>> +            else if( args[i] == "" )
>>>>>> +            {
>>>>>> +                emptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>>> +            }
>>>>>> +            else
>>>>>> +            {
>>>>>> +                notEmptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>>> +            }
>>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>>> +            System.out.print( "Number of empty args: " +
>>>>>> emptyArgs );
>>>>>> +            System.out.print( "Number of not empty args: " +
>>>>>> notEmptyArgs );
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,37 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +
>>>>>> +<!--
>>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>>> +
>>>>>> +  <parent>
>>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>>> +  </parent>
>>>>>> +
>>>>>> +  <artifactId>mpmd-138-mod-4</artifactId>
>>>>>> +
>>>>>> +  <name>Module 4</name>
>>>>>> +
>>>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>>>> +
>>>>>> +</project>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,37 @@
>>>>>> +package test;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +
>>>>>> +    /**
>>>>>> +     *
>>>>>> +     * @param args
>>>>>> +     */
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        int nullArgs = 0;
>>>>>> +        int emptyArgs = 0;
>>>>>> +        int notEmptyArgs = 0;
>>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>>> +        {
>>>>>> +            if( args[i] == null )
>>>>>> +            {
>>>>>> +                nullArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is null,
>>>>>> weird" );
>>>>>> +            }
>>>>>> +            else if( args[i] == "" )
>>>>>> +            {
>>>>>> +                emptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>>> +            }
>>>>>> +            else
>>>>>> +            {
>>>>>> +                notEmptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>>> +            }
>>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>>> +            System.out.print( "Number of empty args: " +
>>>>>> emptyArgs );
>>>>>> +            System.out.print( "Number of not empty args: " +
>>>>>> notEmptyArgs );
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,40 @@
>>>>>> +package test;
>>>>>> +
>>>>>> +public class OtherClass
>>>>>> +{
>>>>>> +
>>>>>> +
>>>>>> +
>>>>>> +
>>>>>> +    /**
>>>>>> +     *
>>>>>> +     * @param args
>>>>>> +     */
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        int nullArgs = 0;
>>>>>> +        int emptyArgs = 0;
>>>>>> +        int notEmptyArgs = 0;
>>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>>> +        {
>>>>>> +            if( args[i] == null )
>>>>>> +            {
>>>>>> +                nullArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is null,
>>>>>> weird" );
>>>>>> +            }
>>>>>> +            else if( args[i] == "" )
>>>>>> +            {
>>>>>> +                emptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>>> +            }
>>>>>> +            else
>>>>>> +            {
>>>>>> +                notEmptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>>> +            }
>>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>>> +            System.out.print( "Number of empty args: " +
>>>>>> emptyArgs );
>>>>>> +            System.out.print( "Number of not empty args: " +
>>>>>> notEmptyArgs );
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,36 @@
>>>>>> +package test.sub;
>>>>>> +
>>>>>> +public class MyClass
>>>>>> +{
>>>>>> +    /**
>>>>>> +     *
>>>>>> +     * @param args
>>>>>> +     */
>>>>>> +    public static void main( String[] args )
>>>>>> +    {
>>>>>> +        int nullArgs = 0;
>>>>>> +        int emptyArgs = 0;
>>>>>> +        int notEmptyArgs = 0;
>>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>>> +        {
>>>>>> +            if( args[i] == null )
>>>>>> +            {
>>>>>> +                nullArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is null,
>>>>>> weird" );
>>>>>> +            }
>>>>>> +            else if( args[i] == "" )
>>>>>> +            {
>>>>>> +                emptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>>> +            }
>>>>>> +            else
>>>>>> +            {
>>>>>> +                notEmptyArgs++;
>>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>>> +            }
>>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>>> +            System.out.print( "Number of empty args: " +
>>>>>> emptyArgs );
>>>>>> +            System.out.print( "Number of not empty args: " +
>>>>>> notEmptyArgs );
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>>> (added)
>>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed
>>>>>> Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,67 @@
>>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>>> +
>>>>>> +<!--
>>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>>> +
>>>>>> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>>> +  <artifactId>mpmd-138-parent</artifactId>
>>>>>> +  <version>1.0-SNAPSHOT</version>
>>>>>> +  <packaging>pom</packaging>
>>>>>> +
>>>>>> +  <name>Parent</name>
>>>>>> +  <description>
>>>>>> +    Test proper report generation in a multi-module build.
>>>>>> +  </description>
>>>>>> +
>>>>>> +  <modules>
>>>>>> +    <module>mod-1</module>
>>>>>> +    <module>mod-2</module>
>>>>>> +    <module>mod-3</module>
>>>>>> +    <module>mod-4</module>
>>>>>> +  </modules>
>>>>>> +
>>>>>> +  <properties>
>>>>>> +   
>>>>>> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>>>>> +  </properties>
>>>>>> +
>>>>>> +  <build>
>>>>>> +    <plugins>
>>>>>> +      <plugin>
>>>>>> +        <artifactId>maven-pmd-plugin</artifactId>
>>>>>> +        <version>@project.version@</version>
>>>>>> +        <executions>
>>>>>> +          <execution>
>>>>>> +            <goals>
>>>>>> +              <goal>check</goal>
>>>>>> +              <goal>cpd-check</goal>
>>>>>> +            </goals>
>>>>>> +          </execution>
>>>>>> +        </executions>
>>>>>> +        <configuration>
>>>>>> +          <verbose>true</verbose>
>>>>>> +          <minimumTokens>25</minimumTokens>
>>>>>> +          <failOnViolation>false</failOnViolation> <!-- force
>>>>>> execution of both goals, will be checked with verify-script -->
>>>>>> +        </configuration>
>>>>>> +      </plugin>
>>>>>> +    </plugins>
>>>>>> +  </build>
>>>>>> +</project>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,37 @@
>>>>>> +
>>>>>> +/*
>>>>>> + * 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.
>>>>>> + */
>>>>>> +
>>>>>> +File buildLog = new File( basedir, 'build.log' )
>>>>>> +assert buildLog.exists()
>>>>>> +
>>>>>> +// Module 1
>>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty
>>>>>> statement (semicolon) not part of a loop.')
>>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>>> test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary
>>>>>> return statements.')
>>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD
>>>>>> violations. For more details see:')
>>>>>> +
>>>>>> +// Module 2
>>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST:
>>>>>> LOCAL-FILE-RULESET.')
>>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD
>>>>>> violation. For more details see:')
>>>>>> +
>>>>>> +// Module 3
>>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD
>>>>>> duplication. For more details see:')
>>>>>> +
>>>>>> +// Module 4
>>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD
>>>>>> duplications. For more details see:')
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Modified:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>>
>>>>>> (original)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -23,19 +23,13 @@ import java.io.File;
>>>>>>  import java.io.IOException;
>>>>>>  import java.io.Reader;
>>>>>>  import java.util.ArrayList;
>>>>>> -import java.util.HashMap;
>>>>>>  import java.util.List;
>>>>>> -import java.util.Map;
>>>>>>
>>>>>>  import org.apache.maven.plugin.AbstractMojo;
>>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>>>  import org.apache.maven.project.MavenProject;
>>>>>>  import org.codehaus.plexus.util.IOUtil;
>>>>>> -import org.codehaus.plexus.util.ReaderFactory;
>>>>>> -import org.codehaus.plexus.util.StringUtils;
>>>>>> -import org.codehaus.plexus.util.xml.pull.MXParser;
>>>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>>
>>>>>>  /**
>>>>>> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>>>>>>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>>>>>>   * @version $Id$
>>>>>>   */
>>>>>> -public abstract class AbstractPmdViolationCheckMojo
>>>>>> +public abstract class AbstractPmdViolationCheckMojo<D>
>>>>>>      extends AbstractMojo
>>>>>>  {
>>>>>> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
>>>>>> -
>>>>>> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
>>>>>> -
>>>>>>      /**
>>>>>>       * The location of the XML report to check, as generated by the
>>>>>> PMD report.
>>>>>>       *
>>>>>> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>>>>>>                  Reader reader = null;
>>>>>>                  try
>>>>>>                  {
>>>>>> -                    XmlPullParser xpp = new MXParser();
>>>>>> -                    reader = ReaderFactory.newXmlReader(
>>>>>> outputFile );
>>>>>> -                    xpp.setInput( reader );
>>>>>> -
>>>>>> -                    Map<Boolean, List<Map<String, String>>>
>>>>>> violations = getViolations( xpp, tagName, failurePriority );
>>>>>> +                    ViolationDetails<D> violations = getViolations(
>>>>>> outputFile, failurePriority );
>>>>>>
>>>>>> -                    List<Map<String, String>> failures =
>>>>>> violations.get( FAILURES_KEY );
>>>>>> -                    List<Map<String, String>> warnings =
>>>>>> violations.get( WARNINGS_KEY );
>>>>>> +                    List<D> failures =
>>>>>> violations.getFailureDetails();
>>>>>> +                    List<D> warnings =
>>>>>> violations.getWarningDetails();
>>>>>>
>>>>>>                      if ( verbose )
>>>>>>                      {
>>>>>> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>>>>>>       * @throws XmlPullParserException
>>>>>>       * @throws IOException
>>>>>>       */
>>>>>> -    private Map<Boolean, List<Map<String, String>>> getViolations(
>>>>>> XmlPullParser xpp, String tagName, int failurePriority )
>>>>>> +    private ViolationDetails<D> getViolations( File analysisFile,
>>>>>> int failurePriority )
>>>>>>          throws XmlPullParserException, IOException
>>>>>>      {
>>>>>> -        int eventType = xpp.getEventType();
>>>>>> -
>>>>>> -        List<Map<String, String>> failures = new
>>>>>> ArrayList<Map<String, String>>();
>>>>>> -        List<Map<String, String>> warnings = new
>>>>>> ArrayList<Map<String, String>>();
>>>>>> -
>>>>>> -        String fullpath = null;
>>>>>> +        List<D> failures = new ArrayList<D>();
>>>>>> +        List<D> warnings = new ArrayList<D>();
>>>>>>
>>>>>> -        while ( eventType != XmlPullParser.END_DOCUMENT )
>>>>>> +        List<D> violations = getErrorDetails( analysisFile );
>>>>>> +
>>>>>> +        for( D violation : violations )
>>>>>>          {
>>>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>>>> "file".equals( xpp.getName() ) )
>>>>>> +            int priority = getPriority( violation );
>>>>>> +            if ( priority <= failurePriority )
>>>>>>              {
>>>>>> -                fullpath = xpp.getAttributeValue( "", "name" );
>>>>>> +                failures.add( violation );
>>>>>>              }
>>>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>>>> tagName.equals( xpp.getName() ) )
>>>>>> -            {
>>>>>> -                Map<String, String> details = getErrorDetails(
>>>>>> xpp );
>>>>>> -
>>>>>> -                if ( fullpath != null )
>>>>>> -                {
>>>>>> -                    details.put( "filename", getFilename( fullpath,
>>>>>> details.get( "package" ) ) );
>>>>>> -                }
>>>>>> -
>>>>>> -                try
>>>>>> -                {
>>>>>> -                    int priority = Integer.parseInt( details.get(
>>>>>> "priority" ) );
>>>>>> -                    if ( priority <= failurePriority )
>>>>>> -                    {
>>>>>> -                        failures.add( details );
>>>>>> -                    }
>>>>>> -                    else
>>>>>> -                    {
>>>>>> -                        warnings.add( details );
>>>>>> -                    }
>>>>>> -                }
>>>>>> -                catch ( NumberFormatException e )
>>>>>> -                {
>>>>>> -                    // I don't know what priority this is. Treat it
>>>>>> like a
>>>>>> -                    // failure
>>>>>> -                    failures.add( details );
>>>>>> -                }
>>>>>> -                catch ( NullPointerException e )
>>>>>> -                {
>>>>>> -                    // I don't know what priority this is. Treat it
>>>>>> like a
>>>>>> -                    // failure
>>>>>> -                    failures.add( details );
>>>>>> -                }
>>>>>> -
>>>>>> -            }
>>>>>> -
>>>>>> -            eventType = xpp.next();
>>>>>> -        }
>>>>>> -
>>>>>> -        Map<Boolean, List<Map<String, String>>> map = new
>>>>>> HashMap<Boolean, List<Map<String, String>>>( 2 );
>>>>>> -        map.put( FAILURES_KEY, failures );
>>>>>> -        map.put( WARNINGS_KEY, warnings );
>>>>>> -        return map;
>>>>>> -    }
>>>>>> -
>>>>>> -    private String getFilename( String fullpath, String pkg )
>>>>>> -    {
>>>>>> -        int index = fullpath.lastIndexOf( File.separatorChar );
>>>>>> -
>>>>>> -        while ( StringUtils.isNotEmpty( pkg ) )
>>>>>> -        {
>>>>>> -            index = fullpath.substring( 0, index ).lastIndexOf(
>>>>>> File.separatorChar );
>>>>>> -
>>>>>> -            int dot = pkg.indexOf( '.' );
>>>>>> -
>>>>>> -            if ( dot < 0 )
>>>>>> +            else
>>>>>>              {
>>>>>> -                break;
>>>>>> +                warnings.add( violation );
>>>>>>              }
>>>>>> -            pkg = pkg.substring( dot + 1 );
>>>>>>          }
>>>>>> -
>>>>>> -        return fullpath.substring( index + 1 );
>>>>>> +
>>>>>> +        ViolationDetails<D> details = newViolationDetailsInstance();
>>>>>> +        details.setFailureDetails( failures );
>>>>>> +        details.setWarningDetails( warnings );
>>>>>> +        return details;
>>>>>>      }
>>>>>> +
>>>>>> +    protected abstract int getPriority( D errorDetail );
>>>>>> +
>>>>>> +    protected abstract ViolationDetails<D>
>>>>>> newViolationDetailsInstance();
>>>>>>
>>>>>>      /**
>>>>>>       * Prints the warnings and failures
>>>>>> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>>>>>>       * @param warnings
>>>>>>       *            list of warnings
>>>>>>       */
>>>>>> -    protected void printErrors( List<Map<String, String>> failures,
>>>>>> List<Map<String, String>> warnings )
>>>>>> +    protected void printErrors( List<D> failures, List<D> warnings )
>>>>>>      {
>>>>>> -        for ( Map<String, String> warning :  warnings )
>>>>>> +        for ( D warning :  warnings )
>>>>>>          {
>>>>>>              printError( warning, "Warning" );
>>>>>>          }
>>>>>>
>>>>>> -        for ( Map<String, String> failure : failures )
>>>>>> +        for ( D failure : failures )
>>>>>>          {
>>>>>>              printError( failure, "Failure" );
>>>>>>          }
>>>>>> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>>>>>>       *
>>>>>>       * @param item
>>>>>>       */
>>>>>> -    protected abstract void printError( Map<String, String> item,
>>>>>> String severity );
>>>>>> +    protected abstract void printError( D item, String severity );
>>>>>>
>>>>>>      /**
>>>>>>       * Gets the attributes and text for the violation tag and puts
>>>>>> them in a
>>>>>> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>>>>>>       * @throws XmlPullParserException
>>>>>>       * @throws IOException
>>>>>>       */
>>>>>> -    protected abstract Map<String, String> getErrorDetails(
>>>>>> XmlPullParser xpp )
>>>>>> +    protected abstract List<D> getErrorDetails( File analisysFile )
>>>>>>          throws XmlPullParserException, IOException;
>>>>>>  }
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Modified:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>>
>>>>>> (original)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>>>>>>   * under the License.
>>>>>>   */
>>>>>>
>>>>>> +import java.io.File;
>>>>>> +import java.io.FileReader;
>>>>>>  import java.io.IOException;
>>>>>> -import java.util.HashMap;
>>>>>> -import java.util.Map;
>>>>>> +import java.util.List;
>>>>>>
>>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>>> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
>>>>>> +import org.apache.maven.plugin.pmd.model.CpdFile;
>>>>>> +import org.apache.maven.plugin.pmd.model.Duplication;
>>>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>>
>>>>>>  /**
>>>>>> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>>>   * @threadSafe
>>>>>>   */
>>>>>>  public class CpdViolationCheckMojo
>>>>>> -    extends AbstractPmdViolationCheckMojo
>>>>>> +    extends AbstractPmdViolationCheckMojo<Duplication>
>>>>>>  {
>>>>>>
>>>>>>      /**
>>>>>> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>>>>>>      }
>>>>>>
>>>>>>      /** {@inheritDoc} */
>>>>>> -    protected void printError( Map item, String severity )
>>>>>> +    protected void printError( Duplication item, String severity )
>>>>>>      {
>>>>>> -        String lines = (String) item.get( "lines" );
>>>>>> +        int lines = item.getLines();
>>>>>>
>>>>>>
>>>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>>>> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>>>>>>          buff.append( lines ).append( " lines of duplicated code at
>>>>>> locations:" );
>>>>>>          this.getLog().info( buff.toString() );
>>>>>>
>>>>>> -        buff.setLength( 0 );
>>>>>> -        buff.append( "    " );
>>>>>> -        Map file = (Map) item.get( "file" );
>>>>>> -        buff.append( file.get( "path" ) );
>>>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>>>> -        this.getLog().info( buff.toString() );
>>>>>> -
>>>>>> -        buff.setLength( 0 );
>>>>>> -        buff.append( "    " );
>>>>>> -        file = (Map) item.get( "file1" );
>>>>>> -        buff.append( file.get( "path" ) );
>>>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>>>> -        this.getLog().info( buff.toString() );
>>>>>> +
>>>>>> +        for( CpdFile file : item.getFiles() )
>>>>>> +        {
>>>>>> +            buff.setLength( 0 );
>>>>>> +            buff.append( "    " );
>>>>>> +            buff.append( file.getPath() );
>>>>>> +            buff.append( " line " ).append( file.getLine() );
>>>>>> +            this.getLog().info( buff.toString() );
>>>>>> +        }
>>>>>>
>>>>>> -        Map codefrag = (Map) item.get( "codefragment" );
>>>>>> -        String codefragstr = (String) codefrag.get( "text" );
>>>>>>          this.getLog().debug( "CPD " + severity + ": Code Fragment
>>>>>> " );
>>>>>> -        this.getLog().debug( codefragstr );
>>>>>> +        this.getLog().debug( item.getCodefragment() );
>>>>>>      }
>>>>>>
>>>>>>      /** {@inheritDoc} */
>>>>>> -    protected Map getErrorDetails( XmlPullParser xpp )
>>>>>> +    protected List<Duplication> getErrorDetails( File cpdFile )
>>>>>>          throws XmlPullParserException, IOException
>>>>>>      {
>>>>>> -        int index = 0;
>>>>>> -        int attributeCount = 0;
>>>>>> -        HashMap msgs = new HashMap();
>>>>>> -
>>>>>> -        attributeCount = xpp.getAttributeCount();
>>>>>> -        while ( index < attributeCount )
>>>>>> -        {
>>>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>>>> xpp.getAttributeValue( index ) );
>>>>>> -
>>>>>> -            index++;
>>>>>> -        }
>>>>>> -
>>>>>> -        int tp = xpp.next();
>>>>>> -        while ( tp != XmlPullParser.END_TAG )
>>>>>> -        {
>>>>>> -            // get the tag's text
>>>>>> -            switch ( tp )
>>>>>> -            {
>>>>>> -            case XmlPullParser.TEXT:
>>>>>> -                msgs.put( "text", xpp.getText().trim() );
>>>>>> -                break;
>>>>>> -            case XmlPullParser.START_TAG:
>>>>>> -                String nm = xpp.getName();
>>>>>> -                if ( msgs.containsKey( nm ) )
>>>>>> -                {
>>>>>> -                    int cnt = 1;
>>>>>> -                    while ( msgs.containsKey( nm + cnt ) )
>>>>>> -                    {
>>>>>> -                        ++cnt;
>>>>>> -                    }
>>>>>> -                    nm = nm + cnt;
>>>>>> -                }
>>>>>> -                msgs.put( nm, getErrorDetails( xpp ) );
>>>>>> -                break;
>>>>>> -            default:
>>>>>> -            }
>>>>>> -            tp = xpp.next();
>>>>>> -        }
>>>>>> -        return msgs;
>>>>>> +        CpdXpp3Reader reader = new CpdXpp3Reader();
>>>>>> +        CpdErrorDetail details = reader.read( new FileReader(
>>>>>> cpdFile ), false );
>>>>>> +        return details.getDuplications();
>>>>>> +    }
>>>>>> +
>>>>>> +    @Override
>>>>>> +    protected int getPriority( Duplication errorDetail )
>>>>>> +    {
>>>>>> +        return 0;
>>>>>> +    }
>>>>>> +
>>>>>> +    @Override
>>>>>> +    protected ViolationDetails<Duplication>
>>>>>> newViolationDetailsInstance()
>>>>>> +    {
>>>>>> +        return new ViolationDetails<Duplication>();
>>>>>>      }
>>>>>> -}
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Modified:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>>
>>>>>> (original)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>>>>>>   * under the License.
>>>>>>   */
>>>>>>
>>>>>> +import java.io.File;
>>>>>> +import java.io.FileReader;
>>>>>>  import java.io.IOException;
>>>>>> -import java.util.HashMap;
>>>>>> -import java.util.Map;
>>>>>> +import java.util.ArrayList;
>>>>>> +import java.util.List;
>>>>>>
>>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>>> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
>>>>>> +import org.apache.maven.plugin.pmd.model.PmdFile;
>>>>>> +import org.apache.maven.plugin.pmd.model.Violation;
>>>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
>>>>>> +import org.codehaus.plexus.util.StringUtils;
>>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>>
>>>>>> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>>>   * @threadSafe
>>>>>>   */
>>>>>>  public class PmdViolationCheckMojo
>>>>>> -    extends AbstractPmdViolationCheckMojo
>>>>>> +    extends AbstractPmdViolationCheckMojo<Violation>
>>>>>>  {
>>>>>>      /**
>>>>>>       * What priority level to fail the build on. Failures at or
>>>>>> above this level
>>>>>> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>>>>>>      }
>>>>>>
>>>>>>      /** {@inheritDoc} */
>>>>>> -    protected void printError( Map<String, String> item, String
>>>>>> severity )
>>>>>> +    protected void printError( Violation item, String severity )
>>>>>>      {
>>>>>>
>>>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>>>>          buff.append( "PMD " + severity + ": " );
>>>>>> -        if ( item.containsKey( "class" ) )
>>>>>> +        if ( item.getViolationClass() != null )
>>>>>>          {
>>>>>> -            if ( item.containsKey( "package" ) )
>>>>>> +            if ( item.getViolationPackage() != null )
>>>>>>              {
>>>>>> -                buff.append( item.get( "package" ) );
>>>>>> +                buff.append( item.getViolationPackage() );
>>>>>>                  buff.append( "." );
>>>>>>              }
>>>>>> -            buff.append( item.get( "class" ) );
>>>>>> +            buff.append( item.getViolationClass() );
>>>>>>          }
>>>>>>          else
>>>>>>          {
>>>>>> -            buff.append( item.get( "filename" ) );
>>>>>> +            buff.append( item.getFileName() );
>>>>>>          }
>>>>>>          buff.append( ":" );
>>>>>> -        buff.append( item.get( "beginline" ) );
>>>>>> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
>>>>>> -        buff.append( " Priority:" ).append( item.get( "priority"
>>>>>> ) );
>>>>>> -        buff.append( " " ).append( item.get( "text" ) ).append(
>>>>>> "." );
>>>>>> +        buff.append( item.getBeginline() );
>>>>>> +        buff.append( " Rule:" ).append( item.getRule() );
>>>>>> +        buff.append( " Priority:" ).append( item.getPriority() );
>>>>>> +        buff.append( " " ).append( item.getText() ).append( "." );
>>>>>>
>>>>>>          this.getLog().info( buff.toString() );
>>>>>>      }
>>>>>> -
>>>>>> -    /** {@inheritDoc} */
>>>>>> -    protected Map<String, String> getErrorDetails( XmlPullParser
>>>>>> xpp )
>>>>>> +
>>>>>> +    @Override
>>>>>> +    protected List<Violation> getErrorDetails( File pmdFile )
>>>>>>          throws XmlPullParserException, IOException
>>>>>>      {
>>>>>> -        int index = 0;
>>>>>> -        int attributeCount = 0;
>>>>>> -        Map<String, String> msgs = new HashMap<String, String>();
>>>>>> +        PmdXpp3Reader reader = new PmdXpp3Reader();
>>>>>> +        PmdErrorDetail details = reader.read( new FileReader(
>>>>>> pmdFile ), false );
>>>>>>
>>>>>> -        attributeCount = xpp.getAttributeCount();
>>>>>> -        while ( index < attributeCount )
>>>>>> +        List<Violation> violations = new ArrayList<Violation>();
>>>>>> +        for( PmdFile file : details.getFiles() )
>>>>>>          {
>>>>>> -
>>>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>>>> xpp.getAttributeValue( index ) );
>>>>>> -
>>>>>> -            index++;
>>>>>> +            String fullPath = file.getName();
>>>>>> +
>>>>>> +            for ( Violation violation : file.getViolations() )
>>>>>> +            {
>>>>>> +                violation.setFileName( getFilename( fullPath,
>>>>>> violation.getViolationPackage() ) );
>>>>>> +                violations.add( violation );
>>>>>> +            }
>>>>>>          }
>>>>>> +        return violations;
>>>>>> +    }
>>>>>> +
>>>>>> +    @Override
>>>>>> +    protected int getPriority( Violation errorDetail )
>>>>>> +    {
>>>>>> +        return errorDetail.getPriority();
>>>>>> +    }
>>>>>> +
>>>>>> +    @Override
>>>>>> +    protected ViolationDetails<Violation>
>>>>>> newViolationDetailsInstance()
>>>>>> +    {
>>>>>> +        return new ViolationDetails<Violation>();
>>>>>> +    }
>>>>>> +
>>>>>> +    private String getFilename( String fullpath, String pkg )
>>>>>> +    {
>>>>>> +        int index = fullpath.lastIndexOf( File.separatorChar );
>>>>>>
>>>>>> -        // get the tag's text
>>>>>> -        if ( xpp.next() == XmlPullParser.TEXT )
>>>>>> +        while ( StringUtils.isNotEmpty( pkg ) )
>>>>>>          {
>>>>>> -            msgs.put( "text", xpp.getText().trim() );
>>>>>> +            index = fullpath.substring( 0, index ).lastIndexOf(
>>>>>> File.separatorChar );
>>>>>> +
>>>>>> +            int dot = pkg.indexOf( '.' );
>>>>>> +
>>>>>> +            if ( dot < 0 )
>>>>>> +            {
>>>>>> +                break;
>>>>>> +            }
>>>>>> +            pkg = pkg.substring( dot + 1 );
>>>>>>          }
>>>>>> -        return msgs;
>>>>>> +
>>>>>> +        return fullpath.substring( index + 1 );
>>>>>>      }
>>>>>>  }
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added:
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>>
>>>>>>
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> ---
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>>
>>>>>> (added)
>>>>>> +++
>>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>>
>>>>>> Wed Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,69 @@
>>>>>> +package org.apache.maven.plugin.pmd;
>>>>>> +
>>>>>> +/*
>>>>>> + * 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.
>>>>>> + */
>>>>>> +
>>>>>> +import java.util.ArrayList;
>>>>>> +import java.util.List;
>>>>>> +
>>>>>> +/**
>>>>>> + * Collector of warnings and failures.
>>>>>> + *
>>>>>> + * @author Robert Scholte
>>>>>> + * @param <D>
>>>>>> + * @since 2.7
>>>>>> + */
>>>>>> +public class ViolationDetails<D>
>>>>>> +{
>>>>>> +    private List<D> warningDetails = new ArrayList<D>();
>>>>>> +
>>>>>> +    private List<D> failureDetails = new ArrayList<D>();
>>>>>> +
>>>>>> +    /**
>>>>>> +     * @return the warningDetails, never {@code null}
>>>>>> +     */
>>>>>> +    public List<D> getWarningDetails()
>>>>>> +    {
>>>>>> +        return warningDetails;
>>>>>> +    }
>>>>>> +
>>>>>> +    /**
>>>>>> +     * @param warningDetails the warningDetails to set
>>>>>> +     */
>>>>>> +    public void setWarningDetails( List<D> warningDetails )
>>>>>> +    {
>>>>>> +        this.warningDetails = warningDetails;
>>>>>> +    }
>>>>>> +
>>>>>> +    /**
>>>>>> +     * @return the failureDetails, never {@code null}
>>>>>> +     */
>>>>>> +    public List<D> getFailureDetails()
>>>>>> +    {
>>>>>> +        return failureDetails;
>>>>>> +    }
>>>>>> +
>>>>>> +    /**
>>>>>> +     * @param failureDetails the failureDetails to set
>>>>>> +     */
>>>>>> +    public void setFailureDetails( List<D> failureDetails )
>>>>>> +    {
>>>>>> +        this.failureDetails = failureDetails;
>>>>>> +    }
>>>>>> +}
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
>>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed
>>>>>> Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,70 @@
>>>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>>>> +
>>>>>> +  <!-- Source:
>>>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd
>>>>>> -->
>>>>>> +
>>>>>> +  <name>Cpd</name>
>>>>>> +
>>>>>> +  <defaults>
>>>>>> +    <default>
>>>>>> +      <key>package</key>
>>>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>>>> +    </default>
>>>>>> +  </defaults>
>>>>>> +  <versionDefinition>
>>>>>> +    <type>namespace</type>
>>>>>> +    <value>1.0+</value>
>>>>>> +  </versionDefinition>
>>>>>> +
>>>>>> +  <classes>
>>>>>> +    <class xml.tagName="pmd-cpd" rootElement="true">
>>>>>> +      <name>CpdErrorDetail</name>
>>>>>> +      <fields>
>>>>>> +        <field>
>>>>>> +          <name>duplications</name>
>>>>>> +          <association xml.tagName="duplication"
>>>>>> xml.itemsStyle="flat">
>>>>>> +            <type>Duplication</type>
>>>>>> +            <multiplicity>*</multiplicity>
>>>>>> +          </association>
>>>>>> +        </field>
>>>>>> +      </fields>
>>>>>> +    </class>
>>>>>> +    <class>
>>>>>> +      <name>Duplication</name>
>>>>>> +      <fields>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>lines</name>
>>>>>> +          <type>int</type>
>>>>>> +        </field>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>tokens</name>
>>>>>> +          <type>int</type>
>>>>>> +        </field>
>>>>>> +        <field xml.tagName="file">
>>>>>> +          <name>files</name>
>>>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>>>> +            <type>CpdFile</type>
>>>>>> +            <multiplicity>*</multiplicity>
>>>>>> +          </association>
>>>>>> +        </field>
>>>>>> +        <field>
>>>>>> +          <name>codefragment</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +      </fields>
>>>>>> +    </class>
>>>>>> +    <class xml.tagName="file">
>>>>>> +      <name>CpdFile</name>
>>>>>> +      <fields>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>line</name>
>>>>>> +          <type>int</type>
>>>>>> +        </field>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>path</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +      </fields>
>>>>>> +    </class>
>>>>>> +  </classes>
>>>>>> +</model>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>>>> URL:
>>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
>>>>>>
>>>>>>
>>>>>> ==============================================================================
>>>>>>
>>>>>>
>>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
>>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed
>>>>>> Jan 18 20:59:15 2012
>>>>>> @@ -0,0 +1,109 @@
>>>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>>>> +
>>>>>> +  <!-- Source:
>>>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->
>>>>>>
>>>>>> +
>>>>>> +  <name>Pmd</name>
>>>>>> +
>>>>>> +  <defaults>
>>>>>> +    <default>
>>>>>> +      <key>package</key>
>>>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>>>> +    </default>
>>>>>> +  </defaults>
>>>>>> +  <versionDefinition>
>>>>>> +    <type>namespace</type>
>>>>>> +    <value>1.0+</value>
>>>>>> +  </versionDefinition>
>>>>>> +
>>>>>> +  <classes>
>>>>>> +    <class rootElement="true" xml.tagName="pmd">
>>>>>> +      <name>PmdErrorDetail</name>
>>>>>> +      <fields>
>>>>>> +        <field>
>>>>>> +          <name>files</name>
>>>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>>>> +            <type>PmdFile</type>
>>>>>> +            <multiplicity>*</multiplicity>
>>>>>> +          </association>
>>>>>> +        </field>
>>>>>> +        <!--
>>>>>> +        <field>
>>>>>> +          <name>errors</name>
>>>>>> +          <association xml.tagName="error" xml.itemsStyle="flat">
>>>>>> +            <type>PmdError</type>
>>>>>> +            <multiplicity>*</multiplicity>
>>>>>> +          </association>
>>>>>> +        </field>
>>>>>> +         -->
>>>>>> +      </fields>
>>>>>> +    </class>
>>>>>> +    <class>
>>>>>> +      <name>PmdFile</name>
>>>>>> +      <fields>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>name</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +        <field>
>>>>>> +          <name>violations</name>
>>>>>> +          <association xml.tagName="violation"
>>>>>> xml.itemsStyle="flat">
>>>>>> +            <type>Violation</type>
>>>>>> +            <multiplicity>*</multiplicity>
>>>>>> +          </association>
>>>>>> +        </field>
>>>>>> +      </fields>
>>>>>> +    </class>
>>>>>> +    <class>
>>>>>> +      <name>Violation</name>
>>>>>> +      <fields>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>beginline</name>
>>>>>> +          <type>int</type>
>>>>>> +        </field>
>>>>>> +        <field xml.tagName="class" xml.attribute="true">
>>>>>> +          <name>violationClass</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +        <field xml.tagName="package" xml.attribute="true">
>>>>>> +          <name>violationPackage</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +        <field xml.attribute="true">
>>>>>> +          <name>rule</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +        <field  xml.attribute="true">
>>>>>> +          <name>priority</name>
>>>>>> +          <type>int</type>
>>>>>> +        </field>
>>>>>> +        <field xml.content="true">
>>>>>> +          <name>text</name>
>>>>>> +          <type>String</type>
>>>>>> +        </field>
>>>>>> +      </fields>
>>>>>> +      <codeSegments>
>>>>>> +        <codeSegment>
>>>>>> +          <code>
>>>>>> +          <![CDATA[
>>>>>> +            private String fileName;
>>>>>> +
>>>>>> +            public void setFileName( String fileName )
>>>>>> +            {
>>>>>> +              this.fileName = fileName;
>>>>>> +            }
>>>>>> +
>>>>>> +            public String getFileName()
>>>>>> +            {
>>>>>> +              return fileName;
>>>>>> +            }
>>>>>> +          ]]>
>>>>>> +          </code>
>>>>>> +        </codeSegment>
>>>>>> +      </codeSegments>
>>>>>> +    </class>
>>>>>> +  </classes>
>>>>>> +
>>>>>> +
>>>>>> +
>>>>>> +</model>
>>>>>> \ No newline at end of file
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>>> For additional commands, e-mail: dev-help@maven.apache.org
>>>
>>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 
> 


-- 
Dennis Lundberg

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Posted by Robert Scholte <ap...@sourcegrounds.com>.
Hi Dennis,

Win7 with both M2.2.1 and M3.0.4 look fine now.
Can you confirm the complete set?

-Robert

On Thu, 26 Jan 2012 22:22:55 +0100, Dennis Lundberg <de...@apache.org>  
wrote:

> Thanks Robert
>
> Let me know what I can do to help.
>
> On 2012-01-26 21:47, Robert Scholte wrote:
>> Always nice, unstable tests :S
>> Win7 + M3.0.4 sometimes fails, sometimes succeed.
>>
>> This shows there are not enough tests for the m-pmd-p.
>> Easiest solution is to remove a few verification-lines, but actually I
>> want to know what's going on.
>>
>> I'll dive into this.
>>
>> -Robert
>>
>> On Wed, 25 Jan 2012 23:10:30 +0100, Dennis Lundberg <de...@apache.org>
>> wrote:
>>
>>> Some more data on my setup:
>>>
>>> On Ubuntu the IT fails with Maven 2.2.1, but it works with Maven 3.0.3
>>>
>>> On Windows 7 the IT fails with both Maven 2.2.1 and Maven 3.0.3
>>>
>>>
>>> On 2012-01-25 23:06, Dennis Lundberg wrote:
>>>> Hi Robert,
>>>>
>>>> The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:
>>>>
>>>> [INFO] Building: mpmd-138\pom.xml
>>>> [INFO] ..FAILED (10.9 s)
>>>> [INFO]   The post-build script did not succeed. Expression: (1 ==
>>>> buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
>>>> Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
>>>> not part of a loop.))
>>>>
>>>> Can you have a look at it?
>>>>
>>>> On 2012-01-18 21:59, rfscholte@apache.org wrote:
>>>>> Author: rfscholte
>>>>> Date: Wed Jan 18 20:59:15 2012
>>>>> New Revision: 1233066
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
>>>>> Log:
>>>>> Fix MPMD-138: Use modello to generate models to read pmd and cpd  
>>>>> files
>>>>>
>>>>> Added:
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>>> Modified:
>>>>>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>
>>>>>
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>
>>>>>
>>>>> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15
>>>>> 2012
>>>>> @@ -68,6 +68,33 @@ under the License.
>>>>>      <sitePluginVersion>3.0</sitePluginVersion>
>>>>>    </properties>
>>>>>
>>>>> +  <build>
>>>>> +    <plugins>
>>>>> +      <plugin>
>>>>> +        <groupId>org.codehaus.modello</groupId>
>>>>> +        <artifactId>modello-maven-plugin</artifactId>
>>>>> +        <version>1.4.1</version>
>>>>> +        <configuration>
>>>>> +          <useJava5>true</useJava5>
>>>>> +          <models>
>>>>> +            <model>src/main/mdo/pmd.mdo</model>
>>>>> +            <model>src/main/mdo/cpd.mdo</model>
>>>>> +          </models>
>>>>> +          <version>1.0</version>
>>>>> +        </configuration>
>>>>> +        <executions>
>>>>> +          <execution>
>>>>> +            <phase>generate-sources</phase>
>>>>> +            <goals>
>>>>> +              <goal>java</goal>
>>>>> +              <goal>xpp3-reader</goal>
>>>>> +            </goals>
>>>>> +          </execution>
>>>>> +        </executions>
>>>>> +      </plugin>
>>>>> +    </plugins>
>>>>> +  </build>
>>>>> +
>>>>>    <dependencies>
>>>>>      <!-- maven -->
>>>>>      <dependency>
>>>>> @@ -124,7 +151,7 @@ under the License.
>>>>>      <dependency>
>>>>>        <groupId>org.codehaus.plexus</groupId>
>>>>>        <artifactId>plexus-utils</artifactId>
>>>>> -      <version>2.0.5</version>
>>>>> +      <version>2.1</version>
>>>>>      </dependency>
>>>>>
>>>>>      <!-- pmd -->
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1 @@
>>>>> +invoker.goals = clean verify
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,39 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +
>>>>> +<!--
>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>> +
>>>>> +  <parent>
>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>> +  </parent>
>>>>> +
>>>>> +  <artifactId>mpmd-138-mod-1</artifactId>
>>>>> +
>>>>> +  <name>Module 1</name>
>>>>> +
>>>>> +  <properties>
>>>>> +
>>>>> <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
>>>>>
>>>>> +  </properties>
>>>>> +
>>>>> +</project>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,12 @@
>>>>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>>>>> +<ruleset name="Custom ruleset"
>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>> +
>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>
>>>>> +  <description>
>>>>> +    This ruleset is encoded with ISO-8859-1 to check proper
>>>>> encoding handling.
>>>>> +  </description>
>>>>> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn"
>>>>> message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>>> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in
>>>>> Latin 15, replaced by OE oe Y" and euro -->
>>>>> +</ruleset>
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,11 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +<ruleset name="Custom ruleset"
>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>> +
>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>
>>>>> +  <description>
>>>>> +    This ruleset is encoded with UTF-8 to check proper encoding
>>>>> handling.
>>>>> +  </description>
>>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>>> message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>>> +</ruleset>
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,12 @@
>>>>> +package test;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        ;
>>>>> +        return;
>>>>> +    }
>>>>> +
>>>>> +}
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,35 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +
>>>>> +<!--
>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>> +
>>>>> +  <parent>
>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>> +  </parent>
>>>>> +
>>>>> +  <artifactId>mpmd-138-mod-2</artifactId>
>>>>> +
>>>>> +  <name>Module 2</name>
>>>>> +
>>>>> +</project>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,11 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +<ruleset name="Custom ruleset"
>>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>>> +
>>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>>
>>>>> +  <description>
>>>>> +    The relative path of this ruleset matches the built-in ruleset
>>>>> "basic".
>>>>> +  </description>
>>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>>> message="TEST: LOCAL-FILE-RULESET"/>
>>>>> +</ruleset>
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,12 @@
>>>>> +package test;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        ;
>>>>> +        return;
>>>>> +    }
>>>>> +
>>>>> +}
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,37 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +
>>>>> +<!--
>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>> +
>>>>> +  <parent>
>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>> +  </parent>
>>>>> +
>>>>> +  <artifactId>mpmd-138-mod-3</artifactId>
>>>>> +
>>>>> +  <name>Module 3</name>
>>>>> +
>>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>>> +
>>>>> +</project>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,39 @@
>>>>> +package test;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +
>>>>> +
>>>>> +    /**
>>>>> +     *
>>>>> +     * @param args
>>>>> +     */
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        int nullArgs = 0;
>>>>> +        int emptyArgs = 0;
>>>>> +        int notEmptyArgs = 0;
>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>> +        {
>>>>> +            if( args[i] == null )
>>>>> +            {
>>>>> +                nullArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is null, weird"  
>>>>> );
>>>>> +            }
>>>>> +            else if( args[i] == "" )
>>>>> +            {
>>>>> +                emptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>> +            }
>>>>> +            else
>>>>> +            {
>>>>> +                notEmptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>> +            }
>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>> +            System.out.print( "Number of empty args: " + emptyArgs  
>>>>> );
>>>>> +            System.out.print( "Number of not empty args: " +
>>>>> notEmptyArgs );
>>>>> +        }
>>>>> +    }
>>>>> +
>>>>> +}
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,40 @@
>>>>> +package test.sub;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +
>>>>> +
>>>>> +
>>>>> +
>>>>> +    /**
>>>>> +     *
>>>>> +     * @param args
>>>>> +     */
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        int nullArgs = 0;
>>>>> +        int emptyArgs = 0;
>>>>> +        int notEmptyArgs = 0;
>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>> +        {
>>>>> +            if( args[i] == null )
>>>>> +            {
>>>>> +                nullArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is null, weird"  
>>>>> );
>>>>> +            }
>>>>> +            else if( args[i] == "" )
>>>>> +            {
>>>>> +                emptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>> +            }
>>>>> +            else
>>>>> +            {
>>>>> +                notEmptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>> +            }
>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>> +            System.out.print( "Number of empty args: " + emptyArgs  
>>>>> );
>>>>> +            System.out.print( "Number of not empty args: " +
>>>>> notEmptyArgs );
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,37 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +
>>>>> +<!--
>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>> +
>>>>> +  <parent>
>>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>>> +      <version>1.0-SNAPSHOT</version>
>>>>> +  </parent>
>>>>> +
>>>>> +  <artifactId>mpmd-138-mod-4</artifactId>
>>>>> +
>>>>> +  <name>Module 4</name>
>>>>> +
>>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>>> +
>>>>> +</project>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,37 @@
>>>>> +package test;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +
>>>>> +    /**
>>>>> +     *
>>>>> +     * @param args
>>>>> +     */
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        int nullArgs = 0;
>>>>> +        int emptyArgs = 0;
>>>>> +        int notEmptyArgs = 0;
>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>> +        {
>>>>> +            if( args[i] == null )
>>>>> +            {
>>>>> +                nullArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is null, weird"  
>>>>> );
>>>>> +            }
>>>>> +            else if( args[i] == "" )
>>>>> +            {
>>>>> +                emptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>> +            }
>>>>> +            else
>>>>> +            {
>>>>> +                notEmptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>> +            }
>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>> +            System.out.print( "Number of empty args: " + emptyArgs  
>>>>> );
>>>>> +            System.out.print( "Number of not empty args: " +
>>>>> notEmptyArgs );
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,40 @@
>>>>> +package test;
>>>>> +
>>>>> +public class OtherClass
>>>>> +{
>>>>> +
>>>>> +
>>>>> +
>>>>> +
>>>>> +    /**
>>>>> +     *
>>>>> +     * @param args
>>>>> +     */
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        int nullArgs = 0;
>>>>> +        int emptyArgs = 0;
>>>>> +        int notEmptyArgs = 0;
>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>> +        {
>>>>> +            if( args[i] == null )
>>>>> +            {
>>>>> +                nullArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is null, weird"  
>>>>> );
>>>>> +            }
>>>>> +            else if( args[i] == "" )
>>>>> +            {
>>>>> +                emptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>> +            }
>>>>> +            else
>>>>> +            {
>>>>> +                notEmptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>> +            }
>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>> +            System.out.print( "Number of empty args: " + emptyArgs  
>>>>> );
>>>>> +            System.out.print( "Number of not empty args: " +
>>>>> notEmptyArgs );
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,36 @@
>>>>> +package test.sub;
>>>>> +
>>>>> +public class MyClass
>>>>> +{
>>>>> +    /**
>>>>> +     *
>>>>> +     * @param args
>>>>> +     */
>>>>> +    public static void main( String[] args )
>>>>> +    {
>>>>> +        int nullArgs = 0;
>>>>> +        int emptyArgs = 0;
>>>>> +        int notEmptyArgs = 0;
>>>>> +        for ( int i = 0; i < args.length; i++ )
>>>>> +        {
>>>>> +            if( args[i] == null )
>>>>> +            {
>>>>> +                nullArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is null, weird"  
>>>>> );
>>>>> +            }
>>>>> +            else if( args[i] == "" )
>>>>> +            {
>>>>> +                emptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>>> +            }
>>>>> +            else
>>>>> +            {
>>>>> +                notEmptyArgs++;
>>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>>> +            }
>>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>>> +            System.out.print( "Number of empty args: " + emptyArgs  
>>>>> );
>>>>> +            System.out.print( "Number of not empty args: " +
>>>>> notEmptyArgs );
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>> (added)
>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed
>>>>> Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,67 @@
>>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>>> +
>>>>> +<!--
>>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>>> +  <modelVersion>4.0.0</modelVersion>
>>>>> +
>>>>> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>>> +  <artifactId>mpmd-138-parent</artifactId>
>>>>> +  <version>1.0-SNAPSHOT</version>
>>>>> +  <packaging>pom</packaging>
>>>>> +
>>>>> +  <name>Parent</name>
>>>>> +  <description>
>>>>> +    Test proper report generation in a multi-module build.
>>>>> +  </description>
>>>>> +
>>>>> +  <modules>
>>>>> +    <module>mod-1</module>
>>>>> +    <module>mod-2</module>
>>>>> +    <module>mod-3</module>
>>>>> +    <module>mod-4</module>
>>>>> +  </modules>
>>>>> +
>>>>> +  <properties>
>>>>> +     
>>>>> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>>>> +  </properties>
>>>>> +
>>>>> +  <build>
>>>>> +    <plugins>
>>>>> +      <plugin>
>>>>> +        <artifactId>maven-pmd-plugin</artifactId>
>>>>> +        <version>@project.version@</version>
>>>>> +        <executions>
>>>>> +          <execution>
>>>>> +            <goals>
>>>>> +              <goal>check</goal>
>>>>> +              <goal>cpd-check</goal>
>>>>> +            </goals>
>>>>> +          </execution>
>>>>> +        </executions>
>>>>> +        <configuration>
>>>>> +          <verbose>true</verbose>
>>>>> +          <minimumTokens>25</minimumTokens>
>>>>> +          <failOnViolation>false</failOnViolation> <!-- force
>>>>> execution of both goals, will be checked with verify-script -->
>>>>> +        </configuration>
>>>>> +      </plugin>
>>>>> +    </plugins>
>>>>> +  </build>
>>>>> +</project>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,37 @@
>>>>> +
>>>>> +/*
>>>>> + * 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.
>>>>> + */
>>>>> +
>>>>> +File buildLog = new File( basedir, 'build.log' )
>>>>> +assert buildLog.exists()
>>>>> +
>>>>> +// Module 1
>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty
>>>>> statement (semicolon) not part of a loop.')
>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>> test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary
>>>>> return statements.')
>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD
>>>>> violations. For more details see:')
>>>>> +
>>>>> +// Module 2
>>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST:
>>>>> LOCAL-FILE-RULESET.')
>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD
>>>>> violation. For more details see:')
>>>>> +
>>>>> +// Module 3
>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD
>>>>> duplication. For more details see:')
>>>>> +
>>>>> +// Module 4
>>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD
>>>>> duplications. For more details see:')
>>>>> \ No newline at end of file
>>>>>
>>>>> Modified:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>> (original)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -23,19 +23,13 @@ import java.io.File;
>>>>>  import java.io.IOException;
>>>>>  import java.io.Reader;
>>>>>  import java.util.ArrayList;
>>>>> -import java.util.HashMap;
>>>>>  import java.util.List;
>>>>> -import java.util.Map;
>>>>>
>>>>>  import org.apache.maven.plugin.AbstractMojo;
>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>>  import org.apache.maven.project.MavenProject;
>>>>>  import org.codehaus.plexus.util.IOUtil;
>>>>> -import org.codehaus.plexus.util.ReaderFactory;
>>>>> -import org.codehaus.plexus.util.StringUtils;
>>>>> -import org.codehaus.plexus.util.xml.pull.MXParser;
>>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>
>>>>>  /**
>>>>> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>>>>>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>>>>>   * @version $Id$
>>>>>   */
>>>>> -public abstract class AbstractPmdViolationCheckMojo
>>>>> +public abstract class AbstractPmdViolationCheckMojo<D>
>>>>>      extends AbstractMojo
>>>>>  {
>>>>> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
>>>>> -
>>>>> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
>>>>> -
>>>>>      /**
>>>>>       * The location of the XML report to check, as generated by the
>>>>> PMD report.
>>>>>       *
>>>>> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>>>>>                  Reader reader = null;
>>>>>                  try
>>>>>                  {
>>>>> -                    XmlPullParser xpp = new MXParser();
>>>>> -                    reader = ReaderFactory.newXmlReader( outputFile  
>>>>> );
>>>>> -                    xpp.setInput( reader );
>>>>> -
>>>>> -                    Map<Boolean, List<Map<String, String>>>
>>>>> violations = getViolations( xpp, tagName, failurePriority );
>>>>> +                    ViolationDetails<D> violations = getViolations(
>>>>> outputFile, failurePriority );
>>>>>
>>>>> -                    List<Map<String, String>> failures =
>>>>> violations.get( FAILURES_KEY );
>>>>> -                    List<Map<String, String>> warnings =
>>>>> violations.get( WARNINGS_KEY );
>>>>> +                    List<D> failures =  
>>>>> violations.getFailureDetails();
>>>>> +                    List<D> warnings =  
>>>>> violations.getWarningDetails();
>>>>>
>>>>>                      if ( verbose )
>>>>>                      {
>>>>> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>>>>>       * @throws XmlPullParserException
>>>>>       * @throws IOException
>>>>>       */
>>>>> -    private Map<Boolean, List<Map<String, String>>> getViolations(
>>>>> XmlPullParser xpp, String tagName, int failurePriority )
>>>>> +    private ViolationDetails<D> getViolations( File analysisFile,
>>>>> int failurePriority )
>>>>>          throws XmlPullParserException, IOException
>>>>>      {
>>>>> -        int eventType = xpp.getEventType();
>>>>> -
>>>>> -        List<Map<String, String>> failures = new
>>>>> ArrayList<Map<String, String>>();
>>>>> -        List<Map<String, String>> warnings = new
>>>>> ArrayList<Map<String, String>>();
>>>>> -
>>>>> -        String fullpath = null;
>>>>> +        List<D> failures = new ArrayList<D>();
>>>>> +        List<D> warnings = new ArrayList<D>();
>>>>>
>>>>> -        while ( eventType != XmlPullParser.END_DOCUMENT )
>>>>> +        List<D> violations = getErrorDetails( analysisFile );
>>>>> +
>>>>> +        for( D violation : violations )
>>>>>          {
>>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>>> "file".equals( xpp.getName() ) )
>>>>> +            int priority = getPriority( violation );
>>>>> +            if ( priority <= failurePriority )
>>>>>              {
>>>>> -                fullpath = xpp.getAttributeValue( "", "name" );
>>>>> +                failures.add( violation );
>>>>>              }
>>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>>> tagName.equals( xpp.getName() ) )
>>>>> -            {
>>>>> -                Map<String, String> details = getErrorDetails( xpp  
>>>>> );
>>>>> -
>>>>> -                if ( fullpath != null )
>>>>> -                {
>>>>> -                    details.put( "filename", getFilename( fullpath,
>>>>> details.get( "package" ) ) );
>>>>> -                }
>>>>> -
>>>>> -                try
>>>>> -                {
>>>>> -                    int priority = Integer.parseInt( details.get(
>>>>> "priority" ) );
>>>>> -                    if ( priority <= failurePriority )
>>>>> -                    {
>>>>> -                        failures.add( details );
>>>>> -                    }
>>>>> -                    else
>>>>> -                    {
>>>>> -                        warnings.add( details );
>>>>> -                    }
>>>>> -                }
>>>>> -                catch ( NumberFormatException e )
>>>>> -                {
>>>>> -                    // I don't know what priority this is. Treat it
>>>>> like a
>>>>> -                    // failure
>>>>> -                    failures.add( details );
>>>>> -                }
>>>>> -                catch ( NullPointerException e )
>>>>> -                {
>>>>> -                    // I don't know what priority this is. Treat it
>>>>> like a
>>>>> -                    // failure
>>>>> -                    failures.add( details );
>>>>> -                }
>>>>> -
>>>>> -            }
>>>>> -
>>>>> -            eventType = xpp.next();
>>>>> -        }
>>>>> -
>>>>> -        Map<Boolean, List<Map<String, String>>> map = new
>>>>> HashMap<Boolean, List<Map<String, String>>>( 2 );
>>>>> -        map.put( FAILURES_KEY, failures );
>>>>> -        map.put( WARNINGS_KEY, warnings );
>>>>> -        return map;
>>>>> -    }
>>>>> -
>>>>> -    private String getFilename( String fullpath, String pkg )
>>>>> -    {
>>>>> -        int index = fullpath.lastIndexOf( File.separatorChar );
>>>>> -
>>>>> -        while ( StringUtils.isNotEmpty( pkg ) )
>>>>> -        {
>>>>> -            index = fullpath.substring( 0, index ).lastIndexOf(
>>>>> File.separatorChar );
>>>>> -
>>>>> -            int dot = pkg.indexOf( '.' );
>>>>> -
>>>>> -            if ( dot < 0 )
>>>>> +            else
>>>>>              {
>>>>> -                break;
>>>>> +                warnings.add( violation );
>>>>>              }
>>>>> -            pkg = pkg.substring( dot + 1 );
>>>>>          }
>>>>> -
>>>>> -        return fullpath.substring( index + 1 );
>>>>> +
>>>>> +        ViolationDetails<D> details = newViolationDetailsInstance();
>>>>> +        details.setFailureDetails( failures );
>>>>> +        details.setWarningDetails( warnings );
>>>>> +        return details;
>>>>>      }
>>>>> +
>>>>> +    protected abstract int getPriority( D errorDetail );
>>>>> +
>>>>> +    protected abstract ViolationDetails<D>
>>>>> newViolationDetailsInstance();
>>>>>
>>>>>      /**
>>>>>       * Prints the warnings and failures
>>>>> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>>>>>       * @param warnings
>>>>>       *            list of warnings
>>>>>       */
>>>>> -    protected void printErrors( List<Map<String, String>> failures,
>>>>> List<Map<String, String>> warnings )
>>>>> +    protected void printErrors( List<D> failures, List<D> warnings )
>>>>>      {
>>>>> -        for ( Map<String, String> warning :  warnings )
>>>>> +        for ( D warning :  warnings )
>>>>>          {
>>>>>              printError( warning, "Warning" );
>>>>>          }
>>>>>
>>>>> -        for ( Map<String, String> failure : failures )
>>>>> +        for ( D failure : failures )
>>>>>          {
>>>>>              printError( failure, "Failure" );
>>>>>          }
>>>>> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>>>>>       *
>>>>>       * @param item
>>>>>       */
>>>>> -    protected abstract void printError( Map<String, String> item,
>>>>> String severity );
>>>>> +    protected abstract void printError( D item, String severity );
>>>>>
>>>>>      /**
>>>>>       * Gets the attributes and text for the violation tag and puts
>>>>> them in a
>>>>> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>>>>>       * @throws XmlPullParserException
>>>>>       * @throws IOException
>>>>>       */
>>>>> -    protected abstract Map<String, String> getErrorDetails(
>>>>> XmlPullParser xpp )
>>>>> +    protected abstract List<D> getErrorDetails( File analisysFile )
>>>>>          throws XmlPullParserException, IOException;
>>>>>  }
>>>>> \ No newline at end of file
>>>>>
>>>>> Modified:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>> (original)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>>>>>   * under the License.
>>>>>   */
>>>>>
>>>>> +import java.io.File;
>>>>> +import java.io.FileReader;
>>>>>  import java.io.IOException;
>>>>> -import java.util.HashMap;
>>>>> -import java.util.Map;
>>>>> +import java.util.List;
>>>>>
>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
>>>>> +import org.apache.maven.plugin.pmd.model.CpdFile;
>>>>> +import org.apache.maven.plugin.pmd.model.Duplication;
>>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>
>>>>>  /**
>>>>> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>>   * @threadSafe
>>>>>   */
>>>>>  public class CpdViolationCheckMojo
>>>>> -    extends AbstractPmdViolationCheckMojo
>>>>> +    extends AbstractPmdViolationCheckMojo<Duplication>
>>>>>  {
>>>>>
>>>>>      /**
>>>>> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>>>>>      }
>>>>>
>>>>>      /** {@inheritDoc} */
>>>>> -    protected void printError( Map item, String severity )
>>>>> +    protected void printError( Duplication item, String severity )
>>>>>      {
>>>>> -        String lines = (String) item.get( "lines" );
>>>>> +        int lines = item.getLines();
>>>>>
>>>>>
>>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>>> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>>>>>          buff.append( lines ).append( " lines of duplicated code at
>>>>> locations:" );
>>>>>          this.getLog().info( buff.toString() );
>>>>>
>>>>> -        buff.setLength( 0 );
>>>>> -        buff.append( "    " );
>>>>> -        Map file = (Map) item.get( "file" );
>>>>> -        buff.append( file.get( "path" ) );
>>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>>> -        this.getLog().info( buff.toString() );
>>>>> -
>>>>> -        buff.setLength( 0 );
>>>>> -        buff.append( "    " );
>>>>> -        file = (Map) item.get( "file1" );
>>>>> -        buff.append( file.get( "path" ) );
>>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>>> -        this.getLog().info( buff.toString() );
>>>>> +
>>>>> +        for( CpdFile file : item.getFiles() )
>>>>> +        {
>>>>> +            buff.setLength( 0 );
>>>>> +            buff.append( "    " );
>>>>> +            buff.append( file.getPath() );
>>>>> +            buff.append( " line " ).append( file.getLine() );
>>>>> +            this.getLog().info( buff.toString() );
>>>>> +        }
>>>>>
>>>>> -        Map codefrag = (Map) item.get( "codefragment" );
>>>>> -        String codefragstr = (String) codefrag.get( "text" );
>>>>>          this.getLog().debug( "CPD " + severity + ": Code Fragment "  
>>>>> );
>>>>> -        this.getLog().debug( codefragstr );
>>>>> +        this.getLog().debug( item.getCodefragment() );
>>>>>      }
>>>>>
>>>>>      /** {@inheritDoc} */
>>>>> -    protected Map getErrorDetails( XmlPullParser xpp )
>>>>> +    protected List<Duplication> getErrorDetails( File cpdFile )
>>>>>          throws XmlPullParserException, IOException
>>>>>      {
>>>>> -        int index = 0;
>>>>> -        int attributeCount = 0;
>>>>> -        HashMap msgs = new HashMap();
>>>>> -
>>>>> -        attributeCount = xpp.getAttributeCount();
>>>>> -        while ( index < attributeCount )
>>>>> -        {
>>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>>> xpp.getAttributeValue( index ) );
>>>>> -
>>>>> -            index++;
>>>>> -        }
>>>>> -
>>>>> -        int tp = xpp.next();
>>>>> -        while ( tp != XmlPullParser.END_TAG )
>>>>> -        {
>>>>> -            // get the tag's text
>>>>> -            switch ( tp )
>>>>> -            {
>>>>> -            case XmlPullParser.TEXT:
>>>>> -                msgs.put( "text", xpp.getText().trim() );
>>>>> -                break;
>>>>> -            case XmlPullParser.START_TAG:
>>>>> -                String nm = xpp.getName();
>>>>> -                if ( msgs.containsKey( nm ) )
>>>>> -                {
>>>>> -                    int cnt = 1;
>>>>> -                    while ( msgs.containsKey( nm + cnt ) )
>>>>> -                    {
>>>>> -                        ++cnt;
>>>>> -                    }
>>>>> -                    nm = nm + cnt;
>>>>> -                }
>>>>> -                msgs.put( nm, getErrorDetails( xpp ) );
>>>>> -                break;
>>>>> -            default:
>>>>> -            }
>>>>> -            tp = xpp.next();
>>>>> -        }
>>>>> -        return msgs;
>>>>> +        CpdXpp3Reader reader = new CpdXpp3Reader();
>>>>> +        CpdErrorDetail details = reader.read( new FileReader(
>>>>> cpdFile ), false );
>>>>> +        return details.getDuplications();
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    protected int getPriority( Duplication errorDetail )
>>>>> +    {
>>>>> +        return 0;
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    protected ViolationDetails<Duplication>
>>>>> newViolationDetailsInstance()
>>>>> +    {
>>>>> +        return new ViolationDetails<Duplication>();
>>>>>      }
>>>>> -}
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Modified:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>> (original)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>>>>>   * under the License.
>>>>>   */
>>>>>
>>>>> +import java.io.File;
>>>>> +import java.io.FileReader;
>>>>>  import java.io.IOException;
>>>>> -import java.util.HashMap;
>>>>> -import java.util.Map;
>>>>> +import java.util.ArrayList;
>>>>> +import java.util.List;
>>>>>
>>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
>>>>> +import org.apache.maven.plugin.pmd.model.PmdFile;
>>>>> +import org.apache.maven.plugin.pmd.model.Violation;
>>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
>>>>> +import org.codehaus.plexus.util.StringUtils;
>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>>
>>>>> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>>   * @threadSafe
>>>>>   */
>>>>>  public class PmdViolationCheckMojo
>>>>> -    extends AbstractPmdViolationCheckMojo
>>>>> +    extends AbstractPmdViolationCheckMojo<Violation>
>>>>>  {
>>>>>      /**
>>>>>       * What priority level to fail the build on. Failures at or
>>>>> above this level
>>>>> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>>>>>      }
>>>>>
>>>>>      /** {@inheritDoc} */
>>>>> -    protected void printError( Map<String, String> item, String
>>>>> severity )
>>>>> +    protected void printError( Violation item, String severity )
>>>>>      {
>>>>>
>>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>>>          buff.append( "PMD " + severity + ": " );
>>>>> -        if ( item.containsKey( "class" ) )
>>>>> +        if ( item.getViolationClass() != null )
>>>>>          {
>>>>> -            if ( item.containsKey( "package" ) )
>>>>> +            if ( item.getViolationPackage() != null )
>>>>>              {
>>>>> -                buff.append( item.get( "package" ) );
>>>>> +                buff.append( item.getViolationPackage() );
>>>>>                  buff.append( "." );
>>>>>              }
>>>>> -            buff.append( item.get( "class" ) );
>>>>> +            buff.append( item.getViolationClass() );
>>>>>          }
>>>>>          else
>>>>>          {
>>>>> -            buff.append( item.get( "filename" ) );
>>>>> +            buff.append( item.getFileName() );
>>>>>          }
>>>>>          buff.append( ":" );
>>>>> -        buff.append( item.get( "beginline" ) );
>>>>> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
>>>>> -        buff.append( " Priority:" ).append( item.get( "priority" )  
>>>>> );
>>>>> -        buff.append( " " ).append( item.get( "text" ) ).append( "."  
>>>>> );
>>>>> +        buff.append( item.getBeginline() );
>>>>> +        buff.append( " Rule:" ).append( item.getRule() );
>>>>> +        buff.append( " Priority:" ).append( item.getPriority() );
>>>>> +        buff.append( " " ).append( item.getText() ).append( "." );
>>>>>
>>>>>          this.getLog().info( buff.toString() );
>>>>>      }
>>>>> -
>>>>> -    /** {@inheritDoc} */
>>>>> -    protected Map<String, String> getErrorDetails( XmlPullParser  
>>>>> xpp )
>>>>> +
>>>>> +    @Override
>>>>> +    protected List<Violation> getErrorDetails( File pmdFile )
>>>>>          throws XmlPullParserException, IOException
>>>>>      {
>>>>> -        int index = 0;
>>>>> -        int attributeCount = 0;
>>>>> -        Map<String, String> msgs = new HashMap<String, String>();
>>>>> +        PmdXpp3Reader reader = new PmdXpp3Reader();
>>>>> +        PmdErrorDetail details = reader.read( new FileReader(
>>>>> pmdFile ), false );
>>>>>
>>>>> -        attributeCount = xpp.getAttributeCount();
>>>>> -        while ( index < attributeCount )
>>>>> +        List<Violation> violations = new ArrayList<Violation>();
>>>>> +        for( PmdFile file : details.getFiles() )
>>>>>          {
>>>>> -
>>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>>> xpp.getAttributeValue( index ) );
>>>>> -
>>>>> -            index++;
>>>>> +            String fullPath = file.getName();
>>>>> +
>>>>> +            for ( Violation violation : file.getViolations() )
>>>>> +            {
>>>>> +                violation.setFileName( getFilename( fullPath,
>>>>> violation.getViolationPackage() ) );
>>>>> +                violations.add( violation );
>>>>> +            }
>>>>>          }
>>>>> +        return violations;
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    protected int getPriority( Violation errorDetail )
>>>>> +    {
>>>>> +        return errorDetail.getPriority();
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    protected ViolationDetails<Violation>
>>>>> newViolationDetailsInstance()
>>>>> +    {
>>>>> +        return new ViolationDetails<Violation>();
>>>>> +    }
>>>>> +
>>>>> +    private String getFilename( String fullpath, String pkg )
>>>>> +    {
>>>>> +        int index = fullpath.lastIndexOf( File.separatorChar );
>>>>>
>>>>> -        // get the tag's text
>>>>> -        if ( xpp.next() == XmlPullParser.TEXT )
>>>>> +        while ( StringUtils.isNotEmpty( pkg ) )
>>>>>          {
>>>>> -            msgs.put( "text", xpp.getText().trim() );
>>>>> +            index = fullpath.substring( 0, index ).lastIndexOf(
>>>>> File.separatorChar );
>>>>> +
>>>>> +            int dot = pkg.indexOf( '.' );
>>>>> +
>>>>> +            if ( dot < 0 )
>>>>> +            {
>>>>> +                break;
>>>>> +            }
>>>>> +            pkg = pkg.substring( dot + 1 );
>>>>>          }
>>>>> -        return msgs;
>>>>> +
>>>>> +        return fullpath.substring( index + 1 );
>>>>>      }
>>>>>  }
>>>>> \ No newline at end of file
>>>>>
>>>>> Added:
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>>
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> ---
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>> (added)
>>>>> +++
>>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>> Wed Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,69 @@
>>>>> +package org.apache.maven.plugin.pmd;
>>>>> +
>>>>> +/*
>>>>> + * 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.
>>>>> + */
>>>>> +
>>>>> +import java.util.ArrayList;
>>>>> +import java.util.List;
>>>>> +
>>>>> +/**
>>>>> + * Collector of warnings and failures.
>>>>> + *
>>>>> + * @author Robert Scholte
>>>>> + * @param <D>
>>>>> + * @since 2.7
>>>>> + */
>>>>> +public class ViolationDetails<D>
>>>>> +{
>>>>> +    private List<D> warningDetails = new ArrayList<D>();
>>>>> +
>>>>> +    private List<D> failureDetails = new ArrayList<D>();
>>>>> +
>>>>> +    /**
>>>>> +     * @return the warningDetails, never {@code null}
>>>>> +     */
>>>>> +    public List<D> getWarningDetails()
>>>>> +    {
>>>>> +        return warningDetails;
>>>>> +    }
>>>>> +
>>>>> +    /**
>>>>> +     * @param warningDetails the warningDetails to set
>>>>> +     */
>>>>> +    public void setWarningDetails( List<D> warningDetails )
>>>>> +    {
>>>>> +        this.warningDetails = warningDetails;
>>>>> +    }
>>>>> +
>>>>> +    /**
>>>>> +     * @return the failureDetails, never {@code null}
>>>>> +     */
>>>>> +    public List<D> getFailureDetails()
>>>>> +    {
>>>>> +        return failureDetails;
>>>>> +    }
>>>>> +
>>>>> +    /**
>>>>> +     * @param failureDetails the failureDetails to set
>>>>> +     */
>>>>> +    public void setFailureDetails( List<D> failureDetails )
>>>>> +    {
>>>>> +        this.failureDetails = failureDetails;
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed
>>>>> Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,70 @@
>>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>>> +
>>>>> +  <!-- Source:
>>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd  
>>>>> -->
>>>>> +
>>>>> +  <name>Cpd</name>
>>>>> +
>>>>> +  <defaults>
>>>>> +    <default>
>>>>> +      <key>package</key>
>>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>>> +    </default>
>>>>> +  </defaults>
>>>>> +  <versionDefinition>
>>>>> +    <type>namespace</type>
>>>>> +    <value>1.0+</value>
>>>>> +  </versionDefinition>
>>>>> +
>>>>> +  <classes>
>>>>> +    <class xml.tagName="pmd-cpd" rootElement="true">
>>>>> +      <name>CpdErrorDetail</name>
>>>>> +      <fields>
>>>>> +        <field>
>>>>> +          <name>duplications</name>
>>>>> +          <association xml.tagName="duplication"
>>>>> xml.itemsStyle="flat">
>>>>> +            <type>Duplication</type>
>>>>> +            <multiplicity>*</multiplicity>
>>>>> +          </association>
>>>>> +        </field>
>>>>> +      </fields>
>>>>> +    </class>
>>>>> +    <class>
>>>>> +      <name>Duplication</name>
>>>>> +      <fields>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>lines</name>
>>>>> +          <type>int</type>
>>>>> +        </field>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>tokens</name>
>>>>> +          <type>int</type>
>>>>> +        </field>
>>>>> +        <field xml.tagName="file">
>>>>> +          <name>files</name>
>>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>>> +            <type>CpdFile</type>
>>>>> +            <multiplicity>*</multiplicity>
>>>>> +          </association>
>>>>> +        </field>
>>>>> +        <field>
>>>>> +          <name>codefragment</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +      </fields>
>>>>> +    </class>
>>>>> +    <class xml.tagName="file">
>>>>> +      <name>CpdFile</name>
>>>>> +      <fields>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>line</name>
>>>>> +          <type>int</type>
>>>>> +        </field>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>path</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +      </fields>
>>>>> +    </class>
>>>>> +  </classes>
>>>>> +</model>
>>>>> \ No newline at end of file
>>>>>
>>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
>>>>>
>>>>> ==============================================================================
>>>>>
>>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
>>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed
>>>>> Jan 18 20:59:15 2012
>>>>> @@ -0,0 +1,109 @@
>>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>>> +
>>>>> +  <!-- Source:
>>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd   
>>>>> -->
>>>>> +
>>>>> +  <name>Pmd</name>
>>>>> +
>>>>> +  <defaults>
>>>>> +    <default>
>>>>> +      <key>package</key>
>>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>>> +    </default>
>>>>> +  </defaults>
>>>>> +  <versionDefinition>
>>>>> +    <type>namespace</type>
>>>>> +    <value>1.0+</value>
>>>>> +  </versionDefinition>
>>>>> +
>>>>> +  <classes>
>>>>> +    <class rootElement="true" xml.tagName="pmd">
>>>>> +      <name>PmdErrorDetail</name>
>>>>> +      <fields>
>>>>> +        <field>
>>>>> +          <name>files</name>
>>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>>> +            <type>PmdFile</type>
>>>>> +            <multiplicity>*</multiplicity>
>>>>> +          </association>
>>>>> +        </field>
>>>>> +        <!--
>>>>> +        <field>
>>>>> +          <name>errors</name>
>>>>> +          <association xml.tagName="error" xml.itemsStyle="flat">
>>>>> +            <type>PmdError</type>
>>>>> +            <multiplicity>*</multiplicity>
>>>>> +          </association>
>>>>> +        </field>
>>>>> +         -->
>>>>> +      </fields>
>>>>> +    </class>
>>>>> +    <class>
>>>>> +      <name>PmdFile</name>
>>>>> +      <fields>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>name</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +        <field>
>>>>> +          <name>violations</name>
>>>>> +          <association xml.tagName="violation"  
>>>>> xml.itemsStyle="flat">
>>>>> +            <type>Violation</type>
>>>>> +            <multiplicity>*</multiplicity>
>>>>> +          </association>
>>>>> +        </field>
>>>>> +      </fields>
>>>>> +    </class>
>>>>> +    <class>
>>>>> +      <name>Violation</name>
>>>>> +      <fields>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>beginline</name>
>>>>> +          <type>int</type>
>>>>> +        </field>
>>>>> +        <field xml.tagName="class" xml.attribute="true">
>>>>> +          <name>violationClass</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +        <field xml.tagName="package" xml.attribute="true">
>>>>> +          <name>violationPackage</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +        <field xml.attribute="true">
>>>>> +          <name>rule</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +        <field  xml.attribute="true">
>>>>> +          <name>priority</name>
>>>>> +          <type>int</type>
>>>>> +        </field>
>>>>> +        <field xml.content="true">
>>>>> +          <name>text</name>
>>>>> +          <type>String</type>
>>>>> +        </field>
>>>>> +      </fields>
>>>>> +      <codeSegments>
>>>>> +        <codeSegment>
>>>>> +          <code>
>>>>> +          <![CDATA[
>>>>> +            private String fileName;
>>>>> +
>>>>> +            public void setFileName( String fileName )
>>>>> +            {
>>>>> +              this.fileName = fileName;
>>>>> +            }
>>>>> +
>>>>> +            public String getFileName()
>>>>> +            {
>>>>> +              return fileName;
>>>>> +            }
>>>>> +          ]]>
>>>>> +          </code>
>>>>> +        </codeSegment>
>>>>> +      </codeSegments>
>>>>> +    </class>
>>>>> +  </classes>
>>>>> +
>>>>> +
>>>>> +
>>>>> +</model>
>>>>> \ No newline at end of file
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
>> For additional commands, e-mail: dev-help@maven.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Posted by Dennis Lundberg <de...@apache.org>.
Thanks Robert

Let me know what I can do to help.

On 2012-01-26 21:47, Robert Scholte wrote:
> Always nice, unstable tests :S
> Win7 + M3.0.4 sometimes fails, sometimes succeed.
> 
> This shows there are not enough tests for the m-pmd-p.
> Easiest solution is to remove a few verification-lines, but actually I
> want to know what's going on.
> 
> I'll dive into this.
> 
> -Robert
> 
> On Wed, 25 Jan 2012 23:10:30 +0100, Dennis Lundberg <de...@apache.org>
> wrote:
> 
>> Some more data on my setup:
>>
>> On Ubuntu the IT fails with Maven 2.2.1, but it works with Maven 3.0.3
>>
>> On Windows 7 the IT fails with both Maven 2.2.1 and Maven 3.0.3
>>
>>
>> On 2012-01-25 23:06, Dennis Lundberg wrote:
>>> Hi Robert,
>>>
>>> The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:
>>>
>>> [INFO] Building: mpmd-138\pom.xml
>>> [INFO] ..FAILED (10.9 s)
>>> [INFO]   The post-build script did not succeed. Expression: (1 ==
>>> buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
>>> Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
>>> not part of a loop.))
>>>
>>> Can you have a look at it?
>>>
>>> On 2012-01-18 21:59, rfscholte@apache.org wrote:
>>>> Author: rfscholte
>>>> Date: Wed Jan 18 20:59:15 2012
>>>> New Revision: 1233066
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
>>>> Log:
>>>> Fix MPMD-138: Use modello to generate models to read pmd and cpd files
>>>>
>>>> Added:
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>> Modified:
>>>>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>
>>>>    
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>
>>>>
>>>> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
>>>> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15
>>>> 2012
>>>> @@ -68,6 +68,33 @@ under the License.
>>>>      <sitePluginVersion>3.0</sitePluginVersion>
>>>>    </properties>
>>>>
>>>> +  <build>
>>>> +    <plugins>
>>>> +      <plugin>
>>>> +        <groupId>org.codehaus.modello</groupId>
>>>> +        <artifactId>modello-maven-plugin</artifactId>
>>>> +        <version>1.4.1</version>
>>>> +        <configuration>
>>>> +          <useJava5>true</useJava5>
>>>> +          <models>
>>>> +            <model>src/main/mdo/pmd.mdo</model>
>>>> +            <model>src/main/mdo/cpd.mdo</model>
>>>> +          </models>
>>>> +          <version>1.0</version>
>>>> +        </configuration>
>>>> +        <executions>
>>>> +          <execution>
>>>> +            <phase>generate-sources</phase>
>>>> +            <goals>
>>>> +              <goal>java</goal>
>>>> +              <goal>xpp3-reader</goal>
>>>> +            </goals>
>>>> +          </execution>
>>>> +        </executions>
>>>> +      </plugin>
>>>> +    </plugins>
>>>> +  </build>
>>>> +
>>>>    <dependencies>
>>>>      <!-- maven -->
>>>>      <dependency>
>>>> @@ -124,7 +151,7 @@ under the License.
>>>>      <dependency>
>>>>        <groupId>org.codehaus.plexus</groupId>
>>>>        <artifactId>plexus-utils</artifactId>
>>>> -      <version>2.0.5</version>
>>>> +      <version>2.1</version>
>>>>      </dependency>
>>>>
>>>>      <!-- pmd -->
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1 @@
>>>> +invoker.goals = clean verify
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,39 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +
>>>> +<!--
>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +
>>>> +  <parent>
>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>> +      <version>1.0-SNAPSHOT</version>
>>>> +  </parent>
>>>> +
>>>> +  <artifactId>mpmd-138-mod-1</artifactId>
>>>> +
>>>> +  <name>Module 1</name>
>>>> +
>>>> +  <properties>
>>>> +   
>>>> <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
>>>>
>>>> +  </properties>
>>>> +
>>>> +</project>
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,12 @@
>>>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>>>> +<ruleset name="Custom ruleset"
>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>> +   
>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>
>>>> +  <description>
>>>> +    This ruleset is encoded with ISO-8859-1 to check proper
>>>> encoding handling.
>>>> +  </description>
>>>> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn"
>>>> message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in
>>>> Latin 15, replaced by OE oe Y" and euro -->
>>>> +</ruleset>
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,11 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<ruleset name="Custom ruleset"
>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>> +   
>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>
>>>> +  <description>
>>>> +    This ruleset is encoded with UTF-8 to check proper encoding
>>>> handling.
>>>> +  </description>
>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>> message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>>> +</ruleset>
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,12 @@
>>>> +package test;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        ;
>>>> +        return;
>>>> +    }
>>>> +
>>>> +}
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,35 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +
>>>> +<!--
>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +
>>>> +  <parent>
>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>> +      <version>1.0-SNAPSHOT</version>
>>>> +  </parent>
>>>> +
>>>> +  <artifactId>mpmd-138-mod-2</artifactId>
>>>> +
>>>> +  <name>Module 2</name>
>>>> +
>>>> +</project>
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,11 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +<ruleset name="Custom ruleset"
>>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
>>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>>> +   
>>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>>>
>>>> +  <description>
>>>> +    The relative path of this ruleset matches the built-in ruleset
>>>> "basic".
>>>> +  </description>
>>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"
>>>> message="TEST: LOCAL-FILE-RULESET"/>
>>>> +</ruleset>
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,12 @@
>>>> +package test;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        ;
>>>> +        return;
>>>> +    }
>>>> +
>>>> +}
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,37 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +
>>>> +<!--
>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +
>>>> +  <parent>
>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>> +      <version>1.0-SNAPSHOT</version>
>>>> +  </parent>
>>>> +
>>>> +  <artifactId>mpmd-138-mod-3</artifactId>
>>>> +
>>>> +  <name>Module 3</name>
>>>> +
>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>> +
>>>> +</project>
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,39 @@
>>>> +package test;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +
>>>> +
>>>> +    /**
>>>> +     *
>>>> +     * @param args
>>>> +     */
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        int nullArgs = 0;
>>>> +        int emptyArgs = 0;
>>>> +        int notEmptyArgs = 0;
>>>> +        for ( int i = 0; i < args.length; i++ )
>>>> +        {
>>>> +            if( args[i] == null )
>>>> +            {
>>>> +                nullArgs++;
>>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>>> +            }
>>>> +            else if( args[i] == "" )
>>>> +            {
>>>> +                emptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                notEmptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>> +            }
>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>>> +            System.out.print( "Number of not empty args: " +
>>>> notEmptyArgs );
>>>> +        }
>>>> +    }
>>>> +
>>>> +}
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,40 @@
>>>> +package test.sub;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +
>>>> +
>>>> +
>>>> +
>>>> +    /**
>>>> +     *
>>>> +     * @param args
>>>> +     */
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        int nullArgs = 0;
>>>> +        int emptyArgs = 0;
>>>> +        int notEmptyArgs = 0;
>>>> +        for ( int i = 0; i < args.length; i++ )
>>>> +        {
>>>> +            if( args[i] == null )
>>>> +            {
>>>> +                nullArgs++;
>>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>>> +            }
>>>> +            else if( args[i] == "" )
>>>> +            {
>>>> +                emptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                notEmptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>> +            }
>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>>> +            System.out.print( "Number of not empty args: " +
>>>> notEmptyArgs );
>>>> +        }
>>>> +    }
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,37 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +
>>>> +<!--
>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +
>>>> +  <parent>
>>>> +      <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>> +      <artifactId>mpmd-138-parent</artifactId>
>>>> +      <version>1.0-SNAPSHOT</version>
>>>> +  </parent>
>>>> +
>>>> +  <artifactId>mpmd-138-mod-4</artifactId>
>>>> +
>>>> +  <name>Module 4</name>
>>>> +
>>>> +  <description>Test 3 classes with copy-paste block</description>
>>>> +
>>>> +</project>
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,37 @@
>>>> +package test;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +
>>>> +    /**
>>>> +     *
>>>> +     * @param args
>>>> +     */
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        int nullArgs = 0;
>>>> +        int emptyArgs = 0;
>>>> +        int notEmptyArgs = 0;
>>>> +        for ( int i = 0; i < args.length; i++ )
>>>> +        {
>>>> +            if( args[i] == null )
>>>> +            {
>>>> +                nullArgs++;
>>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>>> +            }
>>>> +            else if( args[i] == "" )
>>>> +            {
>>>> +                emptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                notEmptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>> +            }
>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>>> +            System.out.print( "Number of not empty args: " +
>>>> notEmptyArgs );
>>>> +        }
>>>> +    }
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,40 @@
>>>> +package test;
>>>> +
>>>> +public class OtherClass
>>>> +{
>>>> +
>>>> +
>>>> +
>>>> +
>>>> +    /**
>>>> +     *
>>>> +     * @param args
>>>> +     */
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        int nullArgs = 0;
>>>> +        int emptyArgs = 0;
>>>> +        int notEmptyArgs = 0;
>>>> +        for ( int i = 0; i < args.length; i++ )
>>>> +        {
>>>> +            if( args[i] == null )
>>>> +            {
>>>> +                nullArgs++;
>>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>>> +            }
>>>> +            else if( args[i] == "" )
>>>> +            {
>>>> +                emptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                notEmptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>> +            }
>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>>> +            System.out.print( "Number of not empty args: " +
>>>> notEmptyArgs );
>>>> +        }
>>>> +    }
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,36 @@
>>>> +package test.sub;
>>>> +
>>>> +public class MyClass
>>>> +{
>>>> +    /**
>>>> +     *
>>>> +     * @param args
>>>> +     */
>>>> +    public static void main( String[] args )
>>>> +    {
>>>> +        int nullArgs = 0;
>>>> +        int emptyArgs = 0;
>>>> +        int notEmptyArgs = 0;
>>>> +        for ( int i = 0; i < args.length; i++ )
>>>> +        {
>>>> +            if( args[i] == null )
>>>> +            {
>>>> +                nullArgs++;
>>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>>> +            }
>>>> +            else if( args[i] == "" )
>>>> +            {
>>>> +                emptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is empty" );
>>>> +            }
>>>> +            else
>>>> +            {
>>>> +                notEmptyArgs++;
>>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>>> +            }
>>>> +            System.out.print( "Number of null args: " + nullArgs );
>>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>>> +            System.out.print( "Number of not empty args: " +
>>>> notEmptyArgs );
>>>> +        }
>>>> +    }
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>> (added)
>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed
>>>> Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,67 @@
>>>> +<?xml version="1.0" encoding="UTF-8"?>
>>>> +
>>>> +<!--
>>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> +  <modelVersion>4.0.0</modelVersion>
>>>> +
>>>> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>>> +  <artifactId>mpmd-138-parent</artifactId>
>>>> +  <version>1.0-SNAPSHOT</version>
>>>> +  <packaging>pom</packaging>
>>>> +
>>>> +  <name>Parent</name>
>>>> +  <description>
>>>> +    Test proper report generation in a multi-module build.
>>>> +  </description>
>>>> +
>>>> +  <modules>
>>>> +    <module>mod-1</module>
>>>> +    <module>mod-2</module>
>>>> +    <module>mod-3</module>
>>>> +    <module>mod-4</module>
>>>> +  </modules>
>>>> +
>>>> +  <properties>
>>>> +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>>> +  </properties>
>>>> +
>>>> +  <build>
>>>> +    <plugins>
>>>> +      <plugin>
>>>> +        <artifactId>maven-pmd-plugin</artifactId>
>>>> +        <version>@project.version@</version>
>>>> +        <executions>
>>>> +          <execution>
>>>> +            <goals>
>>>> +              <goal>check</goal>
>>>> +              <goal>cpd-check</goal>
>>>> +            </goals>
>>>> +          </execution>
>>>> +        </executions>
>>>> +        <configuration>
>>>> +          <verbose>true</verbose>
>>>> +          <minimumTokens>25</minimumTokens>
>>>> +          <failOnViolation>false</failOnViolation> <!-- force
>>>> execution of both goals, will be checked with verify-script -->
>>>> +        </configuration>
>>>> +      </plugin>
>>>> +    </plugins>
>>>> +  </build>
>>>> +</project>
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,37 @@
>>>> +
>>>> +/*
>>>> + * 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.
>>>> + */
>>>> +
>>>> +File buildLog = new File( basedir, 'build.log' )
>>>> +assert buildLog.exists()
>>>> +
>>>> +// Module 1
>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty
>>>> statement (semicolon) not part of a loop.')
>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>> test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary
>>>> return statements.')
>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD
>>>> violations. For more details see:')
>>>> +
>>>> +// Module 2
>>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:
>>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST:
>>>> LOCAL-FILE-RULESET.')
>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD
>>>> violation. For more details see:')
>>>> +
>>>> +// Module 3
>>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD
>>>> duplication. For more details see:')
>>>> +
>>>> +// Module 4
>>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD
>>>> duplications. For more details see:')
>>>> \ No newline at end of file
>>>>
>>>> Modified:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>> (original)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -23,19 +23,13 @@ import java.io.File;
>>>>  import java.io.IOException;
>>>>  import java.io.Reader;
>>>>  import java.util.ArrayList;
>>>> -import java.util.HashMap;
>>>>  import java.util.List;
>>>> -import java.util.Map;
>>>>
>>>>  import org.apache.maven.plugin.AbstractMojo;
>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>>  import org.apache.maven.project.MavenProject;
>>>>  import org.codehaus.plexus.util.IOUtil;
>>>> -import org.codehaus.plexus.util.ReaderFactory;
>>>> -import org.codehaus.plexus.util.StringUtils;
>>>> -import org.codehaus.plexus.util.xml.pull.MXParser;
>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>
>>>>  /**
>>>> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>>>>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>>>>   * @version $Id$
>>>>   */
>>>> -public abstract class AbstractPmdViolationCheckMojo
>>>> +public abstract class AbstractPmdViolationCheckMojo<D>
>>>>      extends AbstractMojo
>>>>  {
>>>> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
>>>> -
>>>> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
>>>> -
>>>>      /**
>>>>       * The location of the XML report to check, as generated by the
>>>> PMD report.
>>>>       *
>>>> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>>>>                  Reader reader = null;
>>>>                  try
>>>>                  {
>>>> -                    XmlPullParser xpp = new MXParser();
>>>> -                    reader = ReaderFactory.newXmlReader( outputFile );
>>>> -                    xpp.setInput( reader );
>>>> -
>>>> -                    Map<Boolean, List<Map<String, String>>>
>>>> violations = getViolations( xpp, tagName, failurePriority );
>>>> +                    ViolationDetails<D> violations = getViolations(
>>>> outputFile, failurePriority );
>>>>
>>>> -                    List<Map<String, String>> failures =
>>>> violations.get( FAILURES_KEY );
>>>> -                    List<Map<String, String>> warnings =
>>>> violations.get( WARNINGS_KEY );
>>>> +                    List<D> failures = violations.getFailureDetails();
>>>> +                    List<D> warnings = violations.getWarningDetails();
>>>>
>>>>                      if ( verbose )
>>>>                      {
>>>> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>>>>       * @throws XmlPullParserException
>>>>       * @throws IOException
>>>>       */
>>>> -    private Map<Boolean, List<Map<String, String>>> getViolations(
>>>> XmlPullParser xpp, String tagName, int failurePriority )
>>>> +    private ViolationDetails<D> getViolations( File analysisFile,
>>>> int failurePriority )
>>>>          throws XmlPullParserException, IOException
>>>>      {
>>>> -        int eventType = xpp.getEventType();
>>>> -
>>>> -        List<Map<String, String>> failures = new
>>>> ArrayList<Map<String, String>>();
>>>> -        List<Map<String, String>> warnings = new
>>>> ArrayList<Map<String, String>>();
>>>> -
>>>> -        String fullpath = null;
>>>> +        List<D> failures = new ArrayList<D>();
>>>> +        List<D> warnings = new ArrayList<D>();
>>>>
>>>> -        while ( eventType != XmlPullParser.END_DOCUMENT )
>>>> +        List<D> violations = getErrorDetails( analysisFile );
>>>> +
>>>> +        for( D violation : violations )
>>>>          {
>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>> "file".equals( xpp.getName() ) )
>>>> +            int priority = getPriority( violation );
>>>> +            if ( priority <= failurePriority )
>>>>              {
>>>> -                fullpath = xpp.getAttributeValue( "", "name" );
>>>> +                failures.add( violation );
>>>>              }
>>>> -            if ( eventType == XmlPullParser.START_TAG &&
>>>> tagName.equals( xpp.getName() ) )
>>>> -            {
>>>> -                Map<String, String> details = getErrorDetails( xpp );
>>>> -
>>>> -                if ( fullpath != null )
>>>> -                {
>>>> -                    details.put( "filename", getFilename( fullpath,
>>>> details.get( "package" ) ) );
>>>> -                }
>>>> -
>>>> -                try
>>>> -                {
>>>> -                    int priority = Integer.parseInt( details.get(
>>>> "priority" ) );
>>>> -                    if ( priority <= failurePriority )
>>>> -                    {
>>>> -                        failures.add( details );
>>>> -                    }
>>>> -                    else
>>>> -                    {
>>>> -                        warnings.add( details );
>>>> -                    }
>>>> -                }
>>>> -                catch ( NumberFormatException e )
>>>> -                {
>>>> -                    // I don't know what priority this is. Treat it
>>>> like a
>>>> -                    // failure
>>>> -                    failures.add( details );
>>>> -                }
>>>> -                catch ( NullPointerException e )
>>>> -                {
>>>> -                    // I don't know what priority this is. Treat it
>>>> like a
>>>> -                    // failure
>>>> -                    failures.add( details );
>>>> -                }
>>>> -
>>>> -            }
>>>> -
>>>> -            eventType = xpp.next();
>>>> -        }
>>>> -
>>>> -        Map<Boolean, List<Map<String, String>>> map = new
>>>> HashMap<Boolean, List<Map<String, String>>>( 2 );
>>>> -        map.put( FAILURES_KEY, failures );
>>>> -        map.put( WARNINGS_KEY, warnings );
>>>> -        return map;
>>>> -    }
>>>> -
>>>> -    private String getFilename( String fullpath, String pkg )
>>>> -    {
>>>> -        int index = fullpath.lastIndexOf( File.separatorChar );
>>>> -
>>>> -        while ( StringUtils.isNotEmpty( pkg ) )
>>>> -        {
>>>> -            index = fullpath.substring( 0, index ).lastIndexOf(
>>>> File.separatorChar );
>>>> -
>>>> -            int dot = pkg.indexOf( '.' );
>>>> -
>>>> -            if ( dot < 0 )
>>>> +            else
>>>>              {
>>>> -                break;
>>>> +                warnings.add( violation );
>>>>              }
>>>> -            pkg = pkg.substring( dot + 1 );
>>>>          }
>>>> -
>>>> -        return fullpath.substring( index + 1 );
>>>> +
>>>> +        ViolationDetails<D> details = newViolationDetailsInstance();
>>>> +        details.setFailureDetails( failures );
>>>> +        details.setWarningDetails( warnings );
>>>> +        return details;
>>>>      }
>>>> +
>>>> +    protected abstract int getPriority( D errorDetail );
>>>> +
>>>> +    protected abstract ViolationDetails<D>
>>>> newViolationDetailsInstance();
>>>>
>>>>      /**
>>>>       * Prints the warnings and failures
>>>> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>>>>       * @param warnings
>>>>       *            list of warnings
>>>>       */
>>>> -    protected void printErrors( List<Map<String, String>> failures,
>>>> List<Map<String, String>> warnings )
>>>> +    protected void printErrors( List<D> failures, List<D> warnings )
>>>>      {
>>>> -        for ( Map<String, String> warning :  warnings )
>>>> +        for ( D warning :  warnings )
>>>>          {
>>>>              printError( warning, "Warning" );
>>>>          }
>>>>
>>>> -        for ( Map<String, String> failure : failures )
>>>> +        for ( D failure : failures )
>>>>          {
>>>>              printError( failure, "Failure" );
>>>>          }
>>>> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>>>>       *
>>>>       * @param item
>>>>       */
>>>> -    protected abstract void printError( Map<String, String> item,
>>>> String severity );
>>>> +    protected abstract void printError( D item, String severity );
>>>>
>>>>      /**
>>>>       * Gets the attributes and text for the violation tag and puts
>>>> them in a
>>>> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>>>>       * @throws XmlPullParserException
>>>>       * @throws IOException
>>>>       */
>>>> -    protected abstract Map<String, String> getErrorDetails(
>>>> XmlPullParser xpp )
>>>> +    protected abstract List<D> getErrorDetails( File analisysFile )
>>>>          throws XmlPullParserException, IOException;
>>>>  }
>>>> \ No newline at end of file
>>>>
>>>> Modified:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>> (original)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>>>>   * under the License.
>>>>   */
>>>>
>>>> +import java.io.File;
>>>> +import java.io.FileReader;
>>>>  import java.io.IOException;
>>>> -import java.util.HashMap;
>>>> -import java.util.Map;
>>>> +import java.util.List;
>>>>
>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
>>>> +import org.apache.maven.plugin.pmd.model.CpdFile;
>>>> +import org.apache.maven.plugin.pmd.model.Duplication;
>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>
>>>>  /**
>>>> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>   * @threadSafe
>>>>   */
>>>>  public class CpdViolationCheckMojo
>>>> -    extends AbstractPmdViolationCheckMojo
>>>> +    extends AbstractPmdViolationCheckMojo<Duplication>
>>>>  {
>>>>
>>>>      /**
>>>> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>>>>      }
>>>>
>>>>      /** {@inheritDoc} */
>>>> -    protected void printError( Map item, String severity )
>>>> +    protected void printError( Duplication item, String severity )
>>>>      {
>>>> -        String lines = (String) item.get( "lines" );
>>>> +        int lines = item.getLines();
>>>>
>>>>
>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>>>>          buff.append( lines ).append( " lines of duplicated code at
>>>> locations:" );
>>>>          this.getLog().info( buff.toString() );
>>>>
>>>> -        buff.setLength( 0 );
>>>> -        buff.append( "    " );
>>>> -        Map file = (Map) item.get( "file" );
>>>> -        buff.append( file.get( "path" ) );
>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>> -        this.getLog().info( buff.toString() );
>>>> -
>>>> -        buff.setLength( 0 );
>>>> -        buff.append( "    " );
>>>> -        file = (Map) item.get( "file1" );
>>>> -        buff.append( file.get( "path" ) );
>>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>>> -        this.getLog().info( buff.toString() );
>>>> +
>>>> +        for( CpdFile file : item.getFiles() )
>>>> +        {
>>>> +            buff.setLength( 0 );
>>>> +            buff.append( "    " );
>>>> +            buff.append( file.getPath() );
>>>> +            buff.append( " line " ).append( file.getLine() );
>>>> +            this.getLog().info( buff.toString() );
>>>> +        }
>>>>
>>>> -        Map codefrag = (Map) item.get( "codefragment" );
>>>> -        String codefragstr = (String) codefrag.get( "text" );
>>>>          this.getLog().debug( "CPD " + severity + ": Code Fragment " );
>>>> -        this.getLog().debug( codefragstr );
>>>> +        this.getLog().debug( item.getCodefragment() );
>>>>      }
>>>>
>>>>      /** {@inheritDoc} */
>>>> -    protected Map getErrorDetails( XmlPullParser xpp )
>>>> +    protected List<Duplication> getErrorDetails( File cpdFile )
>>>>          throws XmlPullParserException, IOException
>>>>      {
>>>> -        int index = 0;
>>>> -        int attributeCount = 0;
>>>> -        HashMap msgs = new HashMap();
>>>> -
>>>> -        attributeCount = xpp.getAttributeCount();
>>>> -        while ( index < attributeCount )
>>>> -        {
>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>> xpp.getAttributeValue( index ) );
>>>> -
>>>> -            index++;
>>>> -        }
>>>> -
>>>> -        int tp = xpp.next();
>>>> -        while ( tp != XmlPullParser.END_TAG )
>>>> -        {
>>>> -            // get the tag's text
>>>> -            switch ( tp )
>>>> -            {
>>>> -            case XmlPullParser.TEXT:
>>>> -                msgs.put( "text", xpp.getText().trim() );
>>>> -                break;
>>>> -            case XmlPullParser.START_TAG:
>>>> -                String nm = xpp.getName();
>>>> -                if ( msgs.containsKey( nm ) )
>>>> -                {
>>>> -                    int cnt = 1;
>>>> -                    while ( msgs.containsKey( nm + cnt ) )
>>>> -                    {
>>>> -                        ++cnt;
>>>> -                    }
>>>> -                    nm = nm + cnt;
>>>> -                }
>>>> -                msgs.put( nm, getErrorDetails( xpp ) );
>>>> -                break;
>>>> -            default:
>>>> -            }
>>>> -            tp = xpp.next();
>>>> -        }
>>>> -        return msgs;
>>>> +        CpdXpp3Reader reader = new CpdXpp3Reader();
>>>> +        CpdErrorDetail details = reader.read( new FileReader(
>>>> cpdFile ), false );
>>>> +        return details.getDuplications();
>>>> +    }
>>>> +
>>>> +    @Override
>>>> +    protected int getPriority( Duplication errorDetail )
>>>> +    {
>>>> +        return 0;
>>>> +    }
>>>> +
>>>> +    @Override
>>>> +    protected ViolationDetails<Duplication>
>>>> newViolationDetailsInstance()
>>>> +    {
>>>> +        return new ViolationDetails<Duplication>();
>>>>      }
>>>> -}
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Modified:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>> (original)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>>>>   * under the License.
>>>>   */
>>>>
>>>> +import java.io.File;
>>>> +import java.io.FileReader;
>>>>  import java.io.IOException;
>>>> -import java.util.HashMap;
>>>> -import java.util.Map;
>>>> +import java.util.ArrayList;
>>>> +import java.util.List;
>>>>
>>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>>  import org.apache.maven.plugin.MojoFailureException;
>>>> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
>>>> +import org.apache.maven.plugin.pmd.model.PmdFile;
>>>> +import org.apache.maven.plugin.pmd.model.Violation;
>>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
>>>> +import org.codehaus.plexus.util.StringUtils;
>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>>
>>>> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>>>>   * @threadSafe
>>>>   */
>>>>  public class PmdViolationCheckMojo
>>>> -    extends AbstractPmdViolationCheckMojo
>>>> +    extends AbstractPmdViolationCheckMojo<Violation>
>>>>  {
>>>>      /**
>>>>       * What priority level to fail the build on. Failures at or
>>>> above this level
>>>> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>>>>      }
>>>>
>>>>      /** {@inheritDoc} */
>>>> -    protected void printError( Map<String, String> item, String
>>>> severity )
>>>> +    protected void printError( Violation item, String severity )
>>>>      {
>>>>
>>>>          StringBuffer buff = new StringBuffer( 100 );
>>>>          buff.append( "PMD " + severity + ": " );
>>>> -        if ( item.containsKey( "class" ) )
>>>> +        if ( item.getViolationClass() != null )
>>>>          {
>>>> -            if ( item.containsKey( "package" ) )
>>>> +            if ( item.getViolationPackage() != null )
>>>>              {
>>>> -                buff.append( item.get( "package" ) );
>>>> +                buff.append( item.getViolationPackage() );
>>>>                  buff.append( "." );
>>>>              }
>>>> -            buff.append( item.get( "class" ) );
>>>> +            buff.append( item.getViolationClass() );
>>>>          }
>>>>          else
>>>>          {
>>>> -            buff.append( item.get( "filename" ) );
>>>> +            buff.append( item.getFileName() );
>>>>          }
>>>>          buff.append( ":" );
>>>> -        buff.append( item.get( "beginline" ) );
>>>> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
>>>> -        buff.append( " Priority:" ).append( item.get( "priority" ) );
>>>> -        buff.append( " " ).append( item.get( "text" ) ).append( "." );
>>>> +        buff.append( item.getBeginline() );
>>>> +        buff.append( " Rule:" ).append( item.getRule() );
>>>> +        buff.append( " Priority:" ).append( item.getPriority() );
>>>> +        buff.append( " " ).append( item.getText() ).append( "." );
>>>>
>>>>          this.getLog().info( buff.toString() );
>>>>      }
>>>> -
>>>> -    /** {@inheritDoc} */
>>>> -    protected Map<String, String> getErrorDetails( XmlPullParser xpp )
>>>> +
>>>> +    @Override
>>>> +    protected List<Violation> getErrorDetails( File pmdFile )
>>>>          throws XmlPullParserException, IOException
>>>>      {
>>>> -        int index = 0;
>>>> -        int attributeCount = 0;
>>>> -        Map<String, String> msgs = new HashMap<String, String>();
>>>> +        PmdXpp3Reader reader = new PmdXpp3Reader();
>>>> +        PmdErrorDetail details = reader.read( new FileReader(
>>>> pmdFile ), false );
>>>>
>>>> -        attributeCount = xpp.getAttributeCount();
>>>> -        while ( index < attributeCount )
>>>> +        List<Violation> violations = new ArrayList<Violation>();
>>>> +        for( PmdFile file : details.getFiles() )
>>>>          {
>>>> -
>>>> -            msgs.put( xpp.getAttributeName( index ),
>>>> xpp.getAttributeValue( index ) );
>>>> -
>>>> -            index++;
>>>> +            String fullPath = file.getName();
>>>> +
>>>> +            for ( Violation violation : file.getViolations() )
>>>> +            {
>>>> +                violation.setFileName( getFilename( fullPath,
>>>> violation.getViolationPackage() ) );
>>>> +                violations.add( violation );
>>>> +            }
>>>>          }
>>>> +        return violations;
>>>> +    }
>>>> +
>>>> +    @Override
>>>> +    protected int getPriority( Violation errorDetail )
>>>> +    {
>>>> +        return errorDetail.getPriority();
>>>> +    }
>>>> +
>>>> +    @Override
>>>> +    protected ViolationDetails<Violation>
>>>> newViolationDetailsInstance()
>>>> +    {
>>>> +        return new ViolationDetails<Violation>();
>>>> +    }
>>>> +
>>>> +    private String getFilename( String fullpath, String pkg )
>>>> +    {
>>>> +        int index = fullpath.lastIndexOf( File.separatorChar );
>>>>
>>>> -        // get the tag's text
>>>> -        if ( xpp.next() == XmlPullParser.TEXT )
>>>> +        while ( StringUtils.isNotEmpty( pkg ) )
>>>>          {
>>>> -            msgs.put( "text", xpp.getText().trim() );
>>>> +            index = fullpath.substring( 0, index ).lastIndexOf(
>>>> File.separatorChar );
>>>> +
>>>> +            int dot = pkg.indexOf( '.' );
>>>> +
>>>> +            if ( dot < 0 )
>>>> +            {
>>>> +                break;
>>>> +            }
>>>> +            pkg = pkg.substring( dot + 1 );
>>>>          }
>>>> -        return msgs;
>>>> +
>>>> +        return fullpath.substring( index + 1 );
>>>>      }
>>>>  }
>>>> \ No newline at end of file
>>>>
>>>> Added:
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>>
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> ---
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>> (added)
>>>> +++
>>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>> Wed Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,69 @@
>>>> +package org.apache.maven.plugin.pmd;
>>>> +
>>>> +/*
>>>> + * 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.
>>>> + */
>>>> +
>>>> +import java.util.ArrayList;
>>>> +import java.util.List;
>>>> +
>>>> +/**
>>>> + * Collector of warnings and failures.
>>>> + *
>>>> + * @author Robert Scholte
>>>> + * @param <D>
>>>> + * @since 2.7
>>>> + */
>>>> +public class ViolationDetails<D>
>>>> +{
>>>> +    private List<D> warningDetails = new ArrayList<D>();
>>>> +
>>>> +    private List<D> failureDetails = new ArrayList<D>();
>>>> +
>>>> +    /**
>>>> +     * @return the warningDetails, never {@code null}
>>>> +     */
>>>> +    public List<D> getWarningDetails()
>>>> +    {
>>>> +        return warningDetails;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * @param warningDetails the warningDetails to set
>>>> +     */
>>>> +    public void setWarningDetails( List<D> warningDetails )
>>>> +    {
>>>> +        this.warningDetails = warningDetails;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * @return the failureDetails, never {@code null}
>>>> +     */
>>>> +    public List<D> getFailureDetails()
>>>> +    {
>>>> +        return failureDetails;
>>>> +    }
>>>> +
>>>> +    /**
>>>> +     * @param failureDetails the failureDetails to set
>>>> +     */
>>>> +    public void setFailureDetails( List<D> failureDetails )
>>>> +    {
>>>> +        this.failureDetails = failureDetails;
>>>> +    }
>>>> +}
>>>> \ No newline at end of file
>>>>
>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed
>>>> Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,70 @@
>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>> +
>>>> +  <!-- Source:
>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd -->
>>>> +
>>>> +  <name>Cpd</name>
>>>> +
>>>> +  <defaults>
>>>> +    <default>
>>>> +      <key>package</key>
>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>> +    </default>
>>>> +  </defaults>
>>>> +  <versionDefinition>
>>>> +    <type>namespace</type>
>>>> +    <value>1.0+</value>
>>>> +  </versionDefinition>
>>>> +
>>>> +  <classes>
>>>> +    <class xml.tagName="pmd-cpd" rootElement="true">
>>>> +      <name>CpdErrorDetail</name>
>>>> +      <fields>
>>>> +        <field>
>>>> +          <name>duplications</name>
>>>> +          <association xml.tagName="duplication"
>>>> xml.itemsStyle="flat">
>>>> +            <type>Duplication</type>
>>>> +            <multiplicity>*</multiplicity>
>>>> +          </association>
>>>> +        </field>
>>>> +      </fields>
>>>> +    </class>
>>>> +    <class>
>>>> +      <name>Duplication</name>
>>>> +      <fields>
>>>> +        <field xml.attribute="true">
>>>> +          <name>lines</name>
>>>> +          <type>int</type>
>>>> +        </field>
>>>> +        <field xml.attribute="true">
>>>> +          <name>tokens</name>
>>>> +          <type>int</type>
>>>> +        </field>
>>>> +        <field xml.tagName="file">
>>>> +          <name>files</name>
>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>> +            <type>CpdFile</type>
>>>> +            <multiplicity>*</multiplicity>
>>>> +          </association>
>>>> +        </field>
>>>> +        <field>
>>>> +          <name>codefragment</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +      </fields>
>>>> +    </class>
>>>> +    <class xml.tagName="file">
>>>> +      <name>CpdFile</name>
>>>> +      <fields>
>>>> +        <field xml.attribute="true">
>>>> +          <name>line</name>
>>>> +          <type>int</type>
>>>> +        </field>
>>>> +        <field xml.attribute="true">
>>>> +          <name>path</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +      </fields>
>>>> +    </class>
>>>> +  </classes>
>>>> +</model>
>>>> \ No newline at end of file
>>>>
>>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>>> URL:
>>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
>>>>
>>>> ==============================================================================
>>>>
>>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
>>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed
>>>> Jan 18 20:59:15 2012
>>>> @@ -0,0 +1,109 @@
>>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0
>>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>>> +
>>>> +  <!-- Source:
>>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->
>>>> +
>>>> +  <name>Pmd</name>
>>>> +
>>>> +  <defaults>
>>>> +    <default>
>>>> +      <key>package</key>
>>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>>> +    </default>
>>>> +  </defaults>
>>>> +  <versionDefinition>
>>>> +    <type>namespace</type>
>>>> +    <value>1.0+</value>
>>>> +  </versionDefinition>
>>>> +
>>>> +  <classes>
>>>> +    <class rootElement="true" xml.tagName="pmd">
>>>> +      <name>PmdErrorDetail</name>
>>>> +      <fields>
>>>> +        <field>
>>>> +          <name>files</name>
>>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>>> +            <type>PmdFile</type>
>>>> +            <multiplicity>*</multiplicity>
>>>> +          </association>
>>>> +        </field>
>>>> +        <!--
>>>> +        <field>
>>>> +          <name>errors</name>
>>>> +          <association xml.tagName="error" xml.itemsStyle="flat">
>>>> +            <type>PmdError</type>
>>>> +            <multiplicity>*</multiplicity>
>>>> +          </association>
>>>> +        </field>
>>>> +         -->
>>>> +      </fields>
>>>> +    </class>
>>>> +    <class>
>>>> +      <name>PmdFile</name>
>>>> +      <fields>
>>>> +        <field xml.attribute="true">
>>>> +          <name>name</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +        <field>
>>>> +          <name>violations</name>
>>>> +          <association xml.tagName="violation" xml.itemsStyle="flat">
>>>> +            <type>Violation</type>
>>>> +            <multiplicity>*</multiplicity>
>>>> +          </association>
>>>> +        </field>
>>>> +      </fields>
>>>> +    </class>
>>>> +    <class>
>>>> +      <name>Violation</name>
>>>> +      <fields>
>>>> +        <field xml.attribute="true">
>>>> +          <name>beginline</name>
>>>> +          <type>int</type>
>>>> +        </field>
>>>> +        <field xml.tagName="class" xml.attribute="true">
>>>> +          <name>violationClass</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +        <field xml.tagName="package" xml.attribute="true">
>>>> +          <name>violationPackage</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +        <field xml.attribute="true">
>>>> +          <name>rule</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +        <field  xml.attribute="true">
>>>> +          <name>priority</name>
>>>> +          <type>int</type>
>>>> +        </field>
>>>> +        <field xml.content="true">
>>>> +          <name>text</name>
>>>> +          <type>String</type>
>>>> +        </field>
>>>> +      </fields>
>>>> +      <codeSegments>
>>>> +        <codeSegment>
>>>> +          <code>
>>>> +          <![CDATA[
>>>> +            private String fileName;
>>>> +
>>>> +            public void setFileName( String fileName )
>>>> +            {
>>>> +              this.fileName = fileName;
>>>> +            }
>>>> +
>>>> +            public String getFileName()
>>>> +            {
>>>> +              return fileName;
>>>> +            }
>>>> +          ]]>
>>>> +          </code>
>>>> +        </codeSegment>
>>>> +      </codeSegments>
>>>> +    </class>
>>>> +  </classes>
>>>> +
>>>> +
>>>> +
>>>> +</model>
>>>> \ No newline at end of file
>>>>
>>>>
>>>>
>>>
>>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 
> 


-- 
Dennis Lundberg

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Posted by Robert Scholte <ap...@sourcegrounds.com>.
Always nice, unstable tests :S
Win7 + M3.0.4 sometimes fails, sometimes succeed.

This shows there are not enough tests for the m-pmd-p.
Easiest solution is to remove a few verification-lines, but actually I  
want to know what's going on.

I'll dive into this.

-Robert

On Wed, 25 Jan 2012 23:10:30 +0100, Dennis Lundberg <de...@apache.org>  
wrote:

> Some more data on my setup:
>
> On Ubuntu the IT fails with Maven 2.2.1, but it works with Maven 3.0.3
>
> On Windows 7 the IT fails with both Maven 2.2.1 and Maven 3.0.3
>
>
> On 2012-01-25 23:06, Dennis Lundberg wrote:
>> Hi Robert,
>>
>> The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:
>>
>> [INFO] Building: mpmd-138\pom.xml
>> [INFO] ..FAILED (10.9 s)
>> [INFO]   The post-build script did not succeed. Expression: (1 ==
>> buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
>> Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
>> not part of a loop.))
>>
>> Can you have a look at it?
>>
>> On 2012-01-18 21:59, rfscholte@apache.org wrote:
>>> Author: rfscholte
>>> Date: Wed Jan 18 20:59:15 2012
>>> New Revision: 1233066
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
>>> Log:
>>> Fix MPMD-138: Use modello to generate models to read pmd and cpd files
>>>
>>> Added:
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>> Modified:
>>>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>>
>>> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15  
>>> 2012
>>> @@ -68,6 +68,33 @@ under the License.
>>>      <sitePluginVersion>3.0</sitePluginVersion>
>>>    </properties>
>>>
>>> +  <build>
>>> +    <plugins>
>>> +      <plugin>
>>> +        <groupId>org.codehaus.modello</groupId>
>>> +        <artifactId>modello-maven-plugin</artifactId>
>>> +        <version>1.4.1</version>
>>> +        <configuration>
>>> +          <useJava5>true</useJava5>
>>> +          <models>
>>> +            <model>src/main/mdo/pmd.mdo</model>
>>> +            <model>src/main/mdo/cpd.mdo</model>
>>> +          </models>
>>> +          <version>1.0</version>
>>> +        </configuration>
>>> +        <executions>
>>> +          <execution>
>>> +            <phase>generate-sources</phase>
>>> +            <goals>
>>> +              <goal>java</goal>
>>> +              <goal>xpp3-reader</goal>
>>> +            </goals>
>>> +          </execution>
>>> +        </executions>
>>> +      </plugin>
>>> +    </plugins>
>>> +  </build>
>>> +
>>>    <dependencies>
>>>      <!-- maven -->
>>>      <dependency>
>>> @@ -124,7 +151,7 @@ under the License.
>>>      <dependency>
>>>        <groupId>org.codehaus.plexus</groupId>
>>>        <artifactId>plexus-utils</artifactId>
>>> -      <version>2.0.5</version>
>>> +      <version>2.1</version>
>>>      </dependency>
>>>
>>>      <!-- pmd -->
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1 @@
>>> +invoker.goals = clean verify
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,39 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +
>>> +<!--
>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> +  <modelVersion>4.0.0</modelVersion>
>>> +
>>> +  <parent>
>>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>> +	  <artifactId>mpmd-138-parent</artifactId>
>>> +	  <version>1.0-SNAPSHOT</version>
>>> +  </parent>
>>> +
>>> +  <artifactId>mpmd-138-mod-1</artifactId>
>>> +
>>> +  <name>Module 1</name>
>>> +
>>> +  <properties>
>>> +     
>>> <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
>>> +  </properties>
>>> +
>>> +</project>
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,12 @@
>>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>>> +<ruleset name="Custom ruleset"
>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0  
>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>> +     
>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>> +  <description>
>>> +    This ruleset is encoded with ISO-8859-1 to check proper encoding  
>>> handling.
>>> +  </description>
>>> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn"  
>>> message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in Latin  
>>> 15, replaced by OE oe Y" and euro -->
>>> +</ruleset>
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,11 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<ruleset name="Custom ruleset"
>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0  
>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>> +     
>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>> +  <description>
>>> +    This ruleset is encoded with UTF-8 to check proper encoding  
>>> handling.
>>> +  </description>
>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"  
>>> message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
>>> +</ruleset>
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,12 @@
>>> +package test;
>>> +
>>> +public class MyClass
>>> +{
>>> +
>>> +    public static void main( String[] args )
>>> +    {
>>> +        ;
>>> +        return;
>>> +    }
>>> +
>>> +}
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,35 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +
>>> +<!--
>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> +  <modelVersion>4.0.0</modelVersion>
>>> +
>>> +  <parent>
>>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>> +	  <artifactId>mpmd-138-parent</artifactId>
>>> +	  <version>1.0-SNAPSHOT</version>
>>> +  </parent>
>>> +
>>> +  <artifactId>mpmd-138-mod-2</artifactId>
>>> +
>>> +  <name>Module 2</name>
>>> +
>>> +</project>
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,11 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +<ruleset name="Custom ruleset"
>>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0  
>>> http://pmd.sf.net/ruleset_xml_schema.xsd"
>>> +     
>>> xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>>> +  <description>
>>> +    The relative path of this ruleset matches the built-in ruleset  
>>> "basic".
>>> +  </description>
>>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"  
>>> message="TEST: LOCAL-FILE-RULESET"/>
>>> +</ruleset>
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,12 @@
>>> +package test;
>>> +
>>> +public class MyClass
>>> +{
>>> +
>>> +    public static void main( String[] args )
>>> +    {
>>> +        ;
>>> +        return;
>>> +    }
>>> +
>>> +}
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,37 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +
>>> +<!--
>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> +  <modelVersion>4.0.0</modelVersion>
>>> +
>>> +  <parent>
>>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>> +	  <artifactId>mpmd-138-parent</artifactId>
>>> +	  <version>1.0-SNAPSHOT</version>
>>> +  </parent>
>>> +
>>> +  <artifactId>mpmd-138-mod-3</artifactId>
>>> +
>>> +  <name>Module 3</name>
>>> +
>>> +  <description>Test 3 classes with copy-paste block</description>
>>> +
>>> +</project>
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,39 @@
>>> +package test;
>>> +
>>> +public class MyClass
>>> +{
>>> +
>>> +
>>> +    /**
>>> +     *
>>> +     * @param args
>>> +     */
>>> +    public static void main( String[] args )
>>> +    {
>>> +        int nullArgs = 0;
>>> +        int emptyArgs = 0;
>>> +        int notEmptyArgs = 0;
>>> +        for ( int i = 0; i < args.length; i++ )
>>> +        {
>>> +            if( args[i] == null )
>>> +            {
>>> +                nullArgs++;
>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>> +            }
>>> +            else if( args[i] == "" )
>>> +            {
>>> +                emptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is empty" );
>>> +            }
>>> +            else
>>> +            {
>>> +                notEmptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>> +            }
>>> +            System.out.print( "Number of null args: " + nullArgs );
>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>> +            System.out.print( "Number of not empty args: " +  
>>> notEmptyArgs );
>>> +        }
>>> +    }
>>> +
>>> +}
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,40 @@
>>> +package test.sub;
>>> +
>>> +public class MyClass
>>> +{
>>> +
>>> +
>>> +
>>> +
>>> +    /**
>>> +     *
>>> +     * @param args
>>> +     */
>>> +    public static void main( String[] args )
>>> +    {
>>> +        int nullArgs = 0;
>>> +        int emptyArgs = 0;
>>> +        int notEmptyArgs = 0;
>>> +        for ( int i = 0; i < args.length; i++ )
>>> +        {
>>> +            if( args[i] == null )
>>> +            {
>>> +                nullArgs++;
>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>> +            }
>>> +            else if( args[i] == "" )
>>> +            {
>>> +                emptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is empty" );
>>> +            }
>>> +            else
>>> +            {
>>> +                notEmptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>> +            }
>>> +            System.out.print( "Number of null args: " + nullArgs );
>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>> +            System.out.print( "Number of not empty args: " +  
>>> notEmptyArgs );
>>> +        }
>>> +    }
>>> +}
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,37 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +
>>> +<!--
>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> +  <modelVersion>4.0.0</modelVersion>
>>> +
>>> +  <parent>
>>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>> +	  <artifactId>mpmd-138-parent</artifactId>
>>> +	  <version>1.0-SNAPSHOT</version>
>>> +  </parent>
>>> +
>>> +  <artifactId>mpmd-138-mod-4</artifactId>
>>> +
>>> +  <name>Module 4</name>
>>> +
>>> +  <description>Test 3 classes with copy-paste block</description>
>>> +
>>> +</project>
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,37 @@
>>> +package test;
>>> +
>>> +public class MyClass
>>> +{
>>> +
>>> +    /**
>>> +     *
>>> +     * @param args
>>> +     */
>>> +    public static void main( String[] args )
>>> +    {
>>> +        int nullArgs = 0;
>>> +        int emptyArgs = 0;
>>> +        int notEmptyArgs = 0;
>>> +        for ( int i = 0; i < args.length; i++ )
>>> +        {
>>> +            if( args[i] == null )
>>> +            {
>>> +                nullArgs++;
>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>> +            }
>>> +            else if( args[i] == "" )
>>> +            {
>>> +                emptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is empty" );
>>> +            }
>>> +            else
>>> +            {
>>> +                notEmptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>> +            }
>>> +            System.out.print( "Number of null args: " + nullArgs );
>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>> +            System.out.print( "Number of not empty args: " +  
>>> notEmptyArgs );
>>> +        }
>>> +    }
>>> +}
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,40 @@
>>> +package test;
>>> +
>>> +public class OtherClass
>>> +{
>>> +
>>> +
>>> +
>>> +
>>> +    /**
>>> +     *
>>> +     * @param args
>>> +     */
>>> +    public static void main( String[] args )
>>> +    {
>>> +        int nullArgs = 0;
>>> +        int emptyArgs = 0;
>>> +        int notEmptyArgs = 0;
>>> +        for ( int i = 0; i < args.length; i++ )
>>> +        {
>>> +            if( args[i] == null )
>>> +            {
>>> +                nullArgs++;
>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>> +            }
>>> +            else if( args[i] == "" )
>>> +            {
>>> +                emptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is empty" );
>>> +            }
>>> +            else
>>> +            {
>>> +                notEmptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>> +            }
>>> +            System.out.print( "Number of null args: " + nullArgs );
>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>> +            System.out.print( "Number of not empty args: " +  
>>> notEmptyArgs );
>>> +        }
>>> +    }
>>> +}
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,36 @@
>>> +package test.sub;
>>> +
>>> +public class MyClass
>>> +{
>>> +    /**
>>> +     *
>>> +     * @param args
>>> +     */
>>> +    public static void main( String[] args )
>>> +    {
>>> +        int nullArgs = 0;
>>> +        int emptyArgs = 0;
>>> +        int notEmptyArgs = 0;
>>> +        for ( int i = 0; i < args.length; i++ )
>>> +        {
>>> +            if( args[i] == null )
>>> +            {
>>> +                nullArgs++;
>>> +                System.out.println( "arg[" + i + "] is null, weird" );
>>> +            }
>>> +            else if( args[i] == "" )
>>> +            {
>>> +                emptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is empty" );
>>> +            }
>>> +            else
>>> +            {
>>> +                notEmptyArgs++;
>>> +                System.out.println( "arg[" + i + "] is not empty" );
>>> +            }
>>> +            System.out.print( "Number of null args: " + nullArgs );
>>> +            System.out.print( "Number of empty args: " + emptyArgs );
>>> +            System.out.print( "Number of not empty args: " +  
>>> notEmptyArgs );
>>> +        }
>>> +    }
>>> +}
>>> \ No newline at end of file
>>>
>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed  
>>> Jan 18 20:59:15 2012
>>> @@ -0,0 +1,67 @@
>>> +<?xml version="1.0" encoding="UTF-8"?>
>>> +
>>> +<!--
>>> +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 xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> +  <modelVersion>4.0.0</modelVersion>
>>> +
>>> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>>> +  <artifactId>mpmd-138-parent</artifactId>
>>> +  <version>1.0-SNAPSHOT</version>
>>> +  <packaging>pom</packaging>
>>> +
>>> +  <name>Parent</name>
>>> +  <description>
>>> +    Test proper report generation in a multi-module build.
>>> +  </description>
>>> +
>>> +  <modules>
>>> +    <module>mod-1</module>
>>> +    <module>mod-2</module>
>>> +    <module>mod-3</module>
>>> +    <module>mod-4</module>
>>> +  </modules>
>>> +
>>> +  <properties>
>>> +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>> +  </properties>
>>> +
>>> +  <build>
>>> +    <plugins>
>>> +      <plugin>
>>> +        <artifactId>maven-pmd-plugin</artifactId>
>>> +        <version>@project.version@</version>
>>> +        <executions>
>>> +          <execution>
>>> +            <goals>
>>> +              <goal>check</goal>
>>> +              <goal>cpd-check</goal>
>>> +            </goals>
>>> +          </execution>
>>> +        </executions>
>>> +        <configuration>
>>> +          <verbose>true</verbose>
>>> +          <minimumTokens>25</minimumTokens>
>>> +          <failOnViolation>false</failOnViolation> <!-- force  
>>> execution of both goals, will be checked with verify-script -->
>>> +        </configuration>
>>> +      </plugin>
>>> +    </plugins>
>>> +  </build>
>>> +</project>
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy  
>>> (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,37 @@
>>> +
>>> +/*
>>> + * 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.
>>> + */
>>> +
>>> +File buildLog = new File( basedir, 'build.log' )
>>> +assert buildLog.exists()
>>> +
>>> +// Module 1
>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:  
>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty  
>>> statement (semicolon) not part of a loop.')
>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:  
>>> test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary  
>>> return statements.')
>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD  
>>> violations. For more details see:')
>>> +
>>> +// Module 2
>>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure:  
>>> test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST:  
>>> LOCAL-FILE-RULESET.')
>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD  
>>> violation. For more details see:')
>>> +
>>> +// Module 3
>>> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD  
>>> duplication. For more details see:')
>>> +
>>> +// Module 4
>>> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD  
>>> duplications. For more details see:')
>>> \ No newline at end of file
>>>
>>> Modified:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java  
>>> (original)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -23,19 +23,13 @@ import java.io.File;
>>>  import java.io.IOException;
>>>  import java.io.Reader;
>>>  import java.util.ArrayList;
>>> -import java.util.HashMap;
>>>  import java.util.List;
>>> -import java.util.Map;
>>>
>>>  import org.apache.maven.plugin.AbstractMojo;
>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>  import org.apache.maven.plugin.MojoFailureException;
>>>  import org.apache.maven.project.MavenProject;
>>>  import org.codehaus.plexus.util.IOUtil;
>>> -import org.codehaus.plexus.util.ReaderFactory;
>>> -import org.codehaus.plexus.util.StringUtils;
>>> -import org.codehaus.plexus.util.xml.pull.MXParser;
>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>
>>>  /**
>>> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>>>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>>>   * @version $Id$
>>>   */
>>> -public abstract class AbstractPmdViolationCheckMojo
>>> +public abstract class AbstractPmdViolationCheckMojo<D>
>>>      extends AbstractMojo
>>>  {
>>> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
>>> -
>>> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
>>> -
>>>      /**
>>>       * The location of the XML report to check, as generated by the  
>>> PMD report.
>>>       *
>>> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>>>                  Reader reader = null;
>>>                  try
>>>                  {
>>> -                    XmlPullParser xpp = new MXParser();
>>> -                    reader = ReaderFactory.newXmlReader( outputFile );
>>> -                    xpp.setInput( reader );
>>> -
>>> -                    Map<Boolean, List<Map<String, String>>>  
>>> violations = getViolations( xpp, tagName, failurePriority );
>>> +                    ViolationDetails<D> violations = getViolations(  
>>> outputFile, failurePriority );
>>>
>>> -                    List<Map<String, String>> failures =  
>>> violations.get( FAILURES_KEY );
>>> -                    List<Map<String, String>> warnings =  
>>> violations.get( WARNINGS_KEY );
>>> +                    List<D> failures = violations.getFailureDetails();
>>> +                    List<D> warnings = violations.getWarningDetails();
>>>
>>>                      if ( verbose )
>>>                      {
>>> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>>>       * @throws XmlPullParserException
>>>       * @throws IOException
>>>       */
>>> -    private Map<Boolean, List<Map<String, String>>> getViolations(  
>>> XmlPullParser xpp, String tagName, int failurePriority )
>>> +    private ViolationDetails<D> getViolations( File analysisFile, int  
>>> failurePriority )
>>>          throws XmlPullParserException, IOException
>>>      {
>>> -        int eventType = xpp.getEventType();
>>> -
>>> -        List<Map<String, String>> failures = new  
>>> ArrayList<Map<String, String>>();
>>> -        List<Map<String, String>> warnings = new  
>>> ArrayList<Map<String, String>>();
>>> -
>>> -        String fullpath = null;
>>> +        List<D> failures = new ArrayList<D>();
>>> +        List<D> warnings = new ArrayList<D>();
>>>
>>> -        while ( eventType != XmlPullParser.END_DOCUMENT )
>>> +        List<D> violations = getErrorDetails( analysisFile );
>>> +
>>> +        for( D violation : violations )
>>>          {
>>> -            if ( eventType == XmlPullParser.START_TAG &&  
>>> "file".equals( xpp.getName() ) )
>>> +            int priority = getPriority( violation );
>>> +            if ( priority <= failurePriority )
>>>              {
>>> -                fullpath = xpp.getAttributeValue( "", "name" );
>>> +                failures.add( violation );
>>>              }
>>> -            if ( eventType == XmlPullParser.START_TAG &&  
>>> tagName.equals( xpp.getName() ) )
>>> -            {
>>> -                Map<String, String> details = getErrorDetails( xpp );
>>> -
>>> -                if ( fullpath != null )
>>> -                {
>>> -                    details.put( "filename", getFilename( fullpath,  
>>> details.get( "package" ) ) );
>>> -                }
>>> -
>>> -                try
>>> -                {
>>> -                    int priority = Integer.parseInt( details.get(  
>>> "priority" ) );
>>> -                    if ( priority <= failurePriority )
>>> -                    {
>>> -                        failures.add( details );
>>> -                    }
>>> -                    else
>>> -                    {
>>> -                        warnings.add( details );
>>> -                    }
>>> -                }
>>> -                catch ( NumberFormatException e )
>>> -                {
>>> -                    // I don't know what priority this is. Treat it  
>>> like a
>>> -                    // failure
>>> -                    failures.add( details );
>>> -                }
>>> -                catch ( NullPointerException e )
>>> -                {
>>> -                    // I don't know what priority this is. Treat it  
>>> like a
>>> -                    // failure
>>> -                    failures.add( details );
>>> -                }
>>> -
>>> -            }
>>> -
>>> -            eventType = xpp.next();
>>> -        }
>>> -
>>> -        Map<Boolean, List<Map<String, String>>> map = new  
>>> HashMap<Boolean, List<Map<String, String>>>( 2 );
>>> -        map.put( FAILURES_KEY, failures );
>>> -        map.put( WARNINGS_KEY, warnings );
>>> -        return map;
>>> -    }
>>> -
>>> -    private String getFilename( String fullpath, String pkg )
>>> -    {
>>> -        int index = fullpath.lastIndexOf( File.separatorChar );
>>> -
>>> -        while ( StringUtils.isNotEmpty( pkg ) )
>>> -        {
>>> -            index = fullpath.substring( 0, index ).lastIndexOf(  
>>> File.separatorChar );
>>> -
>>> -            int dot = pkg.indexOf( '.' );
>>> -
>>> -            if ( dot < 0 )
>>> +            else
>>>              {
>>> -                break;
>>> +                warnings.add( violation );
>>>              }
>>> -            pkg = pkg.substring( dot + 1 );
>>>          }
>>> -
>>> -        return fullpath.substring( index + 1 );
>>> +
>>> +        ViolationDetails<D> details = newViolationDetailsInstance();
>>> +        details.setFailureDetails( failures );
>>> +        details.setWarningDetails( warnings );
>>> +        return details;
>>>      }
>>> +
>>> +    protected abstract int getPriority( D errorDetail );
>>> +
>>> +    protected abstract ViolationDetails<D>  
>>> newViolationDetailsInstance();
>>>
>>>      /**
>>>       * Prints the warnings and failures
>>> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>>>       * @param warnings
>>>       *            list of warnings
>>>       */
>>> -    protected void printErrors( List<Map<String, String>> failures,  
>>> List<Map<String, String>> warnings )
>>> +    protected void printErrors( List<D> failures, List<D> warnings )
>>>      {
>>> -        for ( Map<String, String> warning :  warnings )
>>> +        for ( D warning :  warnings )
>>>          {
>>>              printError( warning, "Warning" );
>>>          }
>>>
>>> -        for ( Map<String, String> failure : failures )
>>> +        for ( D failure : failures )
>>>          {
>>>              printError( failure, "Failure" );
>>>          }
>>> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>>>       *
>>>       * @param item
>>>       */
>>> -    protected abstract void printError( Map<String, String> item,  
>>> String severity );
>>> +    protected abstract void printError( D item, String severity );
>>>
>>>      /**
>>>       * Gets the attributes and text for the violation tag and puts  
>>> them in a
>>> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>>>       * @throws XmlPullParserException
>>>       * @throws IOException
>>>       */
>>> -    protected abstract Map<String, String> getErrorDetails(  
>>> XmlPullParser xpp )
>>> +    protected abstract List<D> getErrorDetails( File analisysFile )
>>>          throws XmlPullParserException, IOException;
>>>  }
>>> \ No newline at end of file
>>>
>>> Modified:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java  
>>> (original)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>>>   * under the License.
>>>   */
>>>
>>> +import java.io.File;
>>> +import java.io.FileReader;
>>>  import java.io.IOException;
>>> -import java.util.HashMap;
>>> -import java.util.Map;
>>> +import java.util.List;
>>>
>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>  import org.apache.maven.plugin.MojoFailureException;
>>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
>>> +import org.apache.maven.plugin.pmd.model.CpdFile;
>>> +import org.apache.maven.plugin.pmd.model.Duplication;
>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>
>>>  /**
>>> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>>>   * @threadSafe
>>>   */
>>>  public class CpdViolationCheckMojo
>>> -    extends AbstractPmdViolationCheckMojo
>>> +    extends AbstractPmdViolationCheckMojo<Duplication>
>>>  {
>>>
>>>      /**
>>> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>>>      }
>>>
>>>      /** {@inheritDoc} */
>>> -    protected void printError( Map item, String severity )
>>> +    protected void printError( Duplication item, String severity )
>>>      {
>>> -        String lines = (String) item.get( "lines" );
>>> +        int lines = item.getLines();
>>>
>>>
>>>          StringBuffer buff = new StringBuffer( 100 );
>>> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>>>          buff.append( lines ).append( " lines of duplicated code at  
>>> locations:" );
>>>          this.getLog().info( buff.toString() );
>>>
>>> -        buff.setLength( 0 );
>>> -        buff.append( "    " );
>>> -        Map file = (Map) item.get( "file" );
>>> -        buff.append( file.get( "path" ) );
>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>> -        this.getLog().info( buff.toString() );
>>> -
>>> -        buff.setLength( 0 );
>>> -        buff.append( "    " );
>>> -        file = (Map) item.get( "file1" );
>>> -        buff.append( file.get( "path" ) );
>>> -        buff.append( " line " ).append( file.get( "line" ) );
>>> -        this.getLog().info( buff.toString() );
>>> +
>>> +        for( CpdFile file : item.getFiles() )
>>> +        {
>>> +            buff.setLength( 0 );
>>> +            buff.append( "    " );
>>> +            buff.append( file.getPath() );
>>> +            buff.append( " line " ).append( file.getLine() );
>>> +            this.getLog().info( buff.toString() );
>>> +        }
>>>
>>> -        Map codefrag = (Map) item.get( "codefragment" );
>>> -        String codefragstr = (String) codefrag.get( "text" );
>>>          this.getLog().debug( "CPD " + severity + ": Code Fragment " );
>>> -        this.getLog().debug( codefragstr );
>>> +        this.getLog().debug( item.getCodefragment() );
>>>      }
>>>
>>>      /** {@inheritDoc} */
>>> -    protected Map getErrorDetails( XmlPullParser xpp )
>>> +    protected List<Duplication> getErrorDetails( File cpdFile )
>>>          throws XmlPullParserException, IOException
>>>      {
>>> -        int index = 0;
>>> -        int attributeCount = 0;
>>> -        HashMap msgs = new HashMap();
>>> -
>>> -        attributeCount = xpp.getAttributeCount();
>>> -        while ( index < attributeCount )
>>> -        {
>>> -            msgs.put( xpp.getAttributeName( index ),  
>>> xpp.getAttributeValue( index ) );
>>> -
>>> -            index++;
>>> -        }
>>> -
>>> -        int tp = xpp.next();
>>> -        while ( tp != XmlPullParser.END_TAG )
>>> -        {
>>> -            // get the tag's text
>>> -            switch ( tp )
>>> -            {
>>> -            case XmlPullParser.TEXT:
>>> -                msgs.put( "text", xpp.getText().trim() );
>>> -                break;
>>> -            case XmlPullParser.START_TAG:
>>> -                String nm = xpp.getName();
>>> -                if ( msgs.containsKey( nm ) )
>>> -                {
>>> -                    int cnt = 1;
>>> -                    while ( msgs.containsKey( nm + cnt ) )
>>> -                    {
>>> -                        ++cnt;
>>> -                    }
>>> -                    nm = nm + cnt;
>>> -                }
>>> -                msgs.put( nm, getErrorDetails( xpp ) );
>>> -                break;
>>> -            default:
>>> -            }
>>> -            tp = xpp.next();
>>> -        }
>>> -        return msgs;
>>> +        CpdXpp3Reader reader = new CpdXpp3Reader();
>>> +        CpdErrorDetail details = reader.read( new FileReader( cpdFile  
>>> ), false );
>>> +        return details.getDuplications();
>>> +    }
>>> +
>>> +    @Override
>>> +    protected int getPriority( Duplication errorDetail )
>>> +    {
>>> +        return 0;
>>> +    }
>>> +
>>> +    @Override
>>> +    protected ViolationDetails<Duplication>  
>>> newViolationDetailsInstance()
>>> +    {
>>> +        return new ViolationDetails<Duplication>();
>>>      }
>>> -}
>>> +}
>>> \ No newline at end of file
>>>
>>> Modified:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java  
>>> (original)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>>>   * under the License.
>>>   */
>>>
>>> +import java.io.File;
>>> +import java.io.FileReader;
>>>  import java.io.IOException;
>>> -import java.util.HashMap;
>>> -import java.util.Map;
>>> +import java.util.ArrayList;
>>> +import java.util.List;
>>>
>>>  import org.apache.maven.plugin.MojoExecutionException;
>>>  import org.apache.maven.plugin.MojoFailureException;
>>> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
>>> +import org.apache.maven.plugin.pmd.model.PmdFile;
>>> +import org.apache.maven.plugin.pmd.model.Violation;
>>> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
>>> +import org.codehaus.plexus.util.StringUtils;
>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>>
>>> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>>>   * @threadSafe
>>>   */
>>>  public class PmdViolationCheckMojo
>>> -    extends AbstractPmdViolationCheckMojo
>>> +    extends AbstractPmdViolationCheckMojo<Violation>
>>>  {
>>>      /**
>>>       * What priority level to fail the build on. Failures at or above  
>>> this level
>>> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>>>      }
>>>
>>>      /** {@inheritDoc} */
>>> -    protected void printError( Map<String, String> item, String  
>>> severity )
>>> +    protected void printError( Violation item, String severity )
>>>      {
>>>
>>>          StringBuffer buff = new StringBuffer( 100 );
>>>          buff.append( "PMD " + severity + ": " );
>>> -        if ( item.containsKey( "class" ) )
>>> +        if ( item.getViolationClass() != null )
>>>          {
>>> -            if ( item.containsKey( "package" ) )
>>> +            if ( item.getViolationPackage() != null )
>>>              {
>>> -                buff.append( item.get( "package" ) );
>>> +                buff.append( item.getViolationPackage() );
>>>                  buff.append( "." );
>>>              }
>>> -            buff.append( item.get( "class" ) );
>>> +            buff.append( item.getViolationClass() );
>>>          }
>>>          else
>>>          {
>>> -            buff.append( item.get( "filename" ) );
>>> +            buff.append( item.getFileName() );
>>>          }
>>>          buff.append( ":" );
>>> -        buff.append( item.get( "beginline" ) );
>>> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
>>> -        buff.append( " Priority:" ).append( item.get( "priority" ) );
>>> -        buff.append( " " ).append( item.get( "text" ) ).append( "." );
>>> +        buff.append( item.getBeginline() );
>>> +        buff.append( " Rule:" ).append( item.getRule() );
>>> +        buff.append( " Priority:" ).append( item.getPriority() );
>>> +        buff.append( " " ).append( item.getText() ).append( "." );
>>>
>>>          this.getLog().info( buff.toString() );
>>>      }
>>> -
>>> -    /** {@inheritDoc} */
>>> -    protected Map<String, String> getErrorDetails( XmlPullParser xpp )
>>> +
>>> +    @Override
>>> +    protected List<Violation> getErrorDetails( File pmdFile )
>>>          throws XmlPullParserException, IOException
>>>      {
>>> -        int index = 0;
>>> -        int attributeCount = 0;
>>> -        Map<String, String> msgs = new HashMap<String, String>();
>>> +        PmdXpp3Reader reader = new PmdXpp3Reader();
>>> +        PmdErrorDetail details = reader.read( new FileReader( pmdFile  
>>> ), false );
>>>
>>> -        attributeCount = xpp.getAttributeCount();
>>> -        while ( index < attributeCount )
>>> +        List<Violation> violations = new ArrayList<Violation>();
>>> +        for( PmdFile file : details.getFiles() )
>>>          {
>>> -
>>> -            msgs.put( xpp.getAttributeName( index ),  
>>> xpp.getAttributeValue( index ) );
>>> -
>>> -            index++;
>>> +            String fullPath = file.getName();
>>> +
>>> +            for ( Violation violation : file.getViolations() )
>>> +            {
>>> +                violation.setFileName( getFilename( fullPath,  
>>> violation.getViolationPackage() ) );
>>> +                violations.add( violation );
>>> +            }
>>>          }
>>> +        return violations;
>>> +    }
>>> +
>>> +    @Override
>>> +    protected int getPriority( Violation errorDetail )
>>> +    {
>>> +        return errorDetail.getPriority();
>>> +    }
>>> +
>>> +    @Override
>>> +    protected ViolationDetails<Violation>  
>>> newViolationDetailsInstance()
>>> +    {
>>> +        return new ViolationDetails<Violation>();
>>> +    }
>>> +
>>> +    private String getFilename( String fullpath, String pkg )
>>> +    {
>>> +        int index = fullpath.lastIndexOf( File.separatorChar );
>>>
>>> -        // get the tag's text
>>> -        if ( xpp.next() == XmlPullParser.TEXT )
>>> +        while ( StringUtils.isNotEmpty( pkg ) )
>>>          {
>>> -            msgs.put( "text", xpp.getText().trim() );
>>> +            index = fullpath.substring( 0, index ).lastIndexOf(  
>>> File.separatorChar );
>>> +
>>> +            int dot = pkg.indexOf( '.' );
>>> +
>>> +            if ( dot < 0 )
>>> +            {
>>> +                break;
>>> +            }
>>> +            pkg = pkg.substring( dot + 1 );
>>>          }
>>> -        return msgs;
>>> +
>>> +        return fullpath.substring( index + 1 );
>>>      }
>>>  }
>>> \ No newline at end of file
>>>
>>> Added:  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
>>> ==============================================================================
>>> ---  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java  
>>> (added)
>>> +++  
>>> maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java  
>>> Wed Jan 18 20:59:15 2012
>>> @@ -0,0 +1,69 @@
>>> +package org.apache.maven.plugin.pmd;
>>> +
>>> +/*
>>> + * 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.
>>> + */
>>> +
>>> +import java.util.ArrayList;
>>> +import java.util.List;
>>> +
>>> +/**
>>> + * Collector of warnings and failures.
>>> + *
>>> + * @author Robert Scholte
>>> + * @param <D>
>>> + * @since 2.7
>>> + */
>>> +public class ViolationDetails<D>
>>> +{
>>> +    private List<D> warningDetails = new ArrayList<D>();
>>> +
>>> +    private List<D> failureDetails = new ArrayList<D>();
>>> +
>>> +    /**
>>> +     * @return the warningDetails, never {@code null}
>>> +     */
>>> +    public List<D> getWarningDetails()
>>> +    {
>>> +        return warningDetails;
>>> +    }
>>> +
>>> +    /**
>>> +     * @param warningDetails the warningDetails to set
>>> +     */
>>> +    public void setWarningDetails( List<D> warningDetails )
>>> +    {
>>> +        this.warningDetails = warningDetails;
>>> +    }
>>> +
>>> +    /**
>>> +     * @return the failureDetails, never {@code null}
>>> +     */
>>> +    public List<D> getFailureDetails()
>>> +    {
>>> +        return failureDetails;
>>> +    }
>>> +
>>> +    /**
>>> +     * @param failureDetails the failureDetails to set
>>> +     */
>>> +    public void setFailureDetails( List<D> failureDetails )
>>> +    {
>>> +        this.failureDetails = failureDetails;
>>> +    }
>>> +}
>>> \ No newline at end of file
>>>
>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed Jan  
>>> 18 20:59:15 2012
>>> @@ -0,0 +1,70 @@
>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0  
>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>> +
>>> +  <!-- Source:  
>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd -->
>>> +
>>> +  <name>Cpd</name>
>>> +
>>> +  <defaults>
>>> +    <default>
>>> +      <key>package</key>
>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>> +    </default>
>>> +  </defaults>
>>> +  <versionDefinition>
>>> +    <type>namespace</type>
>>> +    <value>1.0+</value>
>>> +  </versionDefinition>
>>> +
>>> +  <classes>
>>> +    <class xml.tagName="pmd-cpd" rootElement="true">
>>> +      <name>CpdErrorDetail</name>
>>> +      <fields>
>>> +        <field>
>>> +          <name>duplications</name>
>>> +          <association xml.tagName="duplication"  
>>> xml.itemsStyle="flat">
>>> +            <type>Duplication</type>
>>> +            <multiplicity>*</multiplicity>
>>> +          </association>
>>> +        </field>
>>> +      </fields>
>>> +    </class>
>>> +    <class>
>>> +      <name>Duplication</name>
>>> +      <fields>
>>> +        <field xml.attribute="true">
>>> +          <name>lines</name>
>>> +          <type>int</type>
>>> +        </field>
>>> +        <field xml.attribute="true">
>>> +          <name>tokens</name>
>>> +          <type>int</type>
>>> +        </field>
>>> +        <field xml.tagName="file">
>>> +          <name>files</name>
>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>> +            <type>CpdFile</type>
>>> +            <multiplicity>*</multiplicity>
>>> +          </association>
>>> +        </field>
>>> +        <field>
>>> +          <name>codefragment</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +      </fields>
>>> +    </class>
>>> +    <class xml.tagName="file">
>>> +      <name>CpdFile</name>
>>> +      <fields>
>>> +        <field xml.attribute="true">
>>> +          <name>line</name>
>>> +          <type>int</type>
>>> +        </field>
>>> +        <field xml.attribute="true">
>>> +          <name>path</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +      </fields>
>>> +    </class>
>>> +  </classes>
>>> +</model>
>>> \ No newline at end of file
>>>
>>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>>> URL:  
>>> http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
>>> ==============================================================================
>>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
>>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed Jan  
>>> 18 20:59:15 2012
>>> @@ -0,0 +1,109 @@
>>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0  
>>> http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>>> +
>>> +  <!-- Source:  
>>> http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->
>>> +
>>> +  <name>Pmd</name>
>>> +
>>> +  <defaults>
>>> +    <default>
>>> +      <key>package</key>
>>> +      <value>org.apache.maven.plugin.pmd.model</value>
>>> +    </default>
>>> +  </defaults>
>>> +  <versionDefinition>
>>> +    <type>namespace</type>
>>> +    <value>1.0+</value>
>>> +  </versionDefinition>
>>> +
>>> +  <classes>
>>> +    <class rootElement="true" xml.tagName="pmd">
>>> +      <name>PmdErrorDetail</name>
>>> +      <fields>
>>> +        <field>
>>> +          <name>files</name>
>>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>>> +            <type>PmdFile</type>
>>> +            <multiplicity>*</multiplicity>
>>> +          </association>
>>> +        </field>
>>> +        <!--
>>> +        <field>
>>> +          <name>errors</name>
>>> +          <association xml.tagName="error" xml.itemsStyle="flat">
>>> +            <type>PmdError</type>
>>> +            <multiplicity>*</multiplicity>
>>> +          </association>
>>> +        </field>
>>> +         -->
>>> +      </fields>
>>> +    </class>
>>> +    <class>
>>> +      <name>PmdFile</name>
>>> +      <fields>
>>> +        <field xml.attribute="true">
>>> +          <name>name</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +        <field>
>>> +          <name>violations</name>
>>> +          <association xml.tagName="violation" xml.itemsStyle="flat">
>>> +            <type>Violation</type>
>>> +            <multiplicity>*</multiplicity>
>>> +          </association>
>>> +        </field>
>>> +      </fields>
>>> +    </class>
>>> +    <class>
>>> +      <name>Violation</name>
>>> +      <fields>
>>> +        <field xml.attribute="true">
>>> +          <name>beginline</name>
>>> +          <type>int</type>
>>> +        </field>
>>> +        <field xml.tagName="class" xml.attribute="true">
>>> +          <name>violationClass</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +        <field xml.tagName="package" xml.attribute="true">
>>> +          <name>violationPackage</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +        <field xml.attribute="true">
>>> +          <name>rule</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +        <field  xml.attribute="true">
>>> +          <name>priority</name>
>>> +          <type>int</type>
>>> +        </field>
>>> +        <field xml.content="true">
>>> +          <name>text</name>
>>> +          <type>String</type>
>>> +        </field>
>>> +      </fields>
>>> +      <codeSegments>
>>> +        <codeSegment>
>>> +          <code>
>>> +          <![CDATA[
>>> +            private String fileName;
>>> +
>>> +            public void setFileName( String fileName )
>>> +            {
>>> +              this.fileName = fileName;
>>> +            }
>>> +
>>> +            public String getFileName()
>>> +            {
>>> +              return fileName;
>>> +            }
>>> +          ]]>
>>> +          </code>
>>> +        </codeSegment>
>>> +      </codeSegments>
>>> +    </class>
>>> +  </classes>
>>> +
>>> +
>>> +
>>> +</model>
>>> \ No newline at end of file
>>>
>>>
>>>
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r1233066 - in /maven/plugins/trunk/maven-pmd-plugin: ./ src/it/mpmd-138/ src/it/mpmd-138/mod-1/ src/it/mpmd-138/mod-1/src/ src/it/mpmd-138/mod-1/src/main/ src/it/mpmd-138/mod-1/src/main/config/ src/it/mpmd-138/mod-1/src/main/config/pmd/ src...

Posted by Dennis Lundberg <de...@apache.org>.
Some more data on my setup:

On Ubuntu the IT fails with Maven 2.2.1, but it works with Maven 3.0.3

On Windows 7 the IT fails with both Maven 2.2.1 and Maven 3.0.3


On 2012-01-25 23:06, Dennis Lundberg wrote:
> Hi Robert,
> 
> The new IT mpmd-138 is failing for me on both Windows 7 and Ubuntu:
> 
> [INFO] Building: mpmd-138\pom.xml
> [INFO] ..FAILED (10.9 s)
> [INFO]   The post-build script did not succeed. Expression: (1 ==
> buildLog.getText().count([INFO] PMD Failure: test.MyClass:8
> Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon)
> not part of a loop.))
> 
> Can you have a look at it?
> 
> On 2012-01-18 21:59, rfscholte@apache.org wrote:
>> Author: rfscholte
>> Date: Wed Jan 18 20:59:15 2012
>> New Revision: 1233066
>>
>> URL: http://svn.apache.org/viewvc?rev=1233066&view=rev
>> Log:
>> Fix MPMD-138: Use modello to generate models to read pmd and cpd files
>>
>> Added:
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>> Modified:
>>     maven/plugins/trunk/maven-pmd-plugin/pom.xml
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>>     maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>>
>> Modified: maven/plugins/trunk/maven-pmd-plugin/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/pom.xml?rev=1233066&r1=1233065&r2=1233066&view=diff
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/pom.xml (original)
>> +++ maven/plugins/trunk/maven-pmd-plugin/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -68,6 +68,33 @@ under the License.
>>      <sitePluginVersion>3.0</sitePluginVersion>
>>    </properties>
>>  
>> +  <build>
>> +    <plugins>
>> +      <plugin>
>> +        <groupId>org.codehaus.modello</groupId>
>> +        <artifactId>modello-maven-plugin</artifactId>
>> +        <version>1.4.1</version>
>> +        <configuration>
>> +          <useJava5>true</useJava5>
>> +          <models>
>> +            <model>src/main/mdo/pmd.mdo</model>
>> +            <model>src/main/mdo/cpd.mdo</model>
>> +          </models>
>> +          <version>1.0</version>
>> +        </configuration>
>> +        <executions>
>> +          <execution>
>> +            <phase>generate-sources</phase>
>> +            <goals>
>> +              <goal>java</goal>
>> +              <goal>xpp3-reader</goal>
>> +            </goals>
>> +          </execution>
>> +        </executions>
>> +      </plugin>
>> +    </plugins>
>> +  </build>
>> +
>>    <dependencies>
>>      <!-- maven -->
>>      <dependency>
>> @@ -124,7 +151,7 @@ under the License.
>>      <dependency>
>>        <groupId>org.codehaus.plexus</groupId>
>>        <artifactId>plexus-utils</artifactId>
>> -      <version>2.0.5</version>
>> +      <version>2.1</version>
>>      </dependency>
>>  
>>      <!-- pmd -->
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/invoker.properties Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1 @@
>> +invoker.goals = clean verify
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,39 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +
>> +<!--
>> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +  <modelVersion>4.0.0</modelVersion>
>> +
>> +  <parent>
>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>> +	  <artifactId>mpmd-138-parent</artifactId>
>> +	  <version>1.0-SNAPSHOT</version>
>> +  </parent>
>> +
>> +  <artifactId>mpmd-138-mod-1</artifactId>
>> +
>> +  <name>Module 1</name>
>> +
>> +  <properties>
>> +    <project.reporting.outputEncoding>ISO-8859-1</project.reporting.outputEncoding>
>> +  </properties>
>> +
>> +</project>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/latin-1.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,12 @@
>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>> +<ruleset name="Custom ruleset"
>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
>> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>> +  <description>
>> +    This ruleset is encoded with ISO-8859-1 to check proper encoding handling.
>> +  </description>
>> +  <rule ref="rulesets/basic.xml/UnnecessaryReturn" message="LATIN-1-CHARS: ÄÖÜäöüß¼½¾¤"/>
>> +  <!-- note: ¼½¾¤ = 0xBC 0xBD 0xBE 0xA4 don't exist any more in Latin 15, replaced by OE oe Y" and euro -->
>> +</ruleset>
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/config/pmd/utf-8.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,11 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +<ruleset name="Custom ruleset"
>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
>> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>> +  <description>
>> +    This ruleset is encoded with UTF-8 to check proper encoding handling.
>> +  </description>
>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop" message="UTF-8-CHARS: ÄÖÜäöüß¼½¾¤"/>
>> +</ruleset>
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-1/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,12 @@
>> +package test;
>> +
>> +public class MyClass
>> +{
>> +
>> +    public static void main( String[] args )
>> +    {
>> +        ;
>> +        return;
>> +    }
>> +
>> +}
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,35 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +
>> +<!--
>> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +  <modelVersion>4.0.0</modelVersion>
>> +
>> +  <parent>
>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>> +	  <artifactId>mpmd-138-parent</artifactId>
>> +	  <version>1.0-SNAPSHOT</version>
>> +  </parent>
>> +
>> +  <artifactId>mpmd-138-mod-2</artifactId>
>> +
>> +  <name>Module 2</name>
>> +
>> +</project>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/rulesets/basic.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,11 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +<ruleset name="Custom ruleset"
>> +    xmlns="http://pmd.sf.net/ruleset/1.0.0"
>> +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
>> +    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
>> +  <description>
>> +    The relative path of this ruleset matches the built-in ruleset "basic".
>> +  </description>
>> +  <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop" message="TEST: LOCAL-FILE-RULESET"/>
>> +</ruleset>
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-2/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,12 @@
>> +package test;
>> +
>> +public class MyClass
>> +{
>> +
>> +    public static void main( String[] args )
>> +    {
>> +        ;
>> +        return;
>> +    }
>> +
>> +}
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,37 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +
>> +<!--
>> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +  <modelVersion>4.0.0</modelVersion>
>> +
>> +  <parent>
>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>> +	  <artifactId>mpmd-138-parent</artifactId>
>> +	  <version>1.0-SNAPSHOT</version>
>> +  </parent>
>> +
>> +  <artifactId>mpmd-138-mod-3</artifactId>
>> +
>> +  <name>Module 3</name>
>> +  
>> +  <description>Test 3 classes with copy-paste block</description>
>> +  
>> +</project>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,39 @@
>> +package test;
>> +
>> +public class MyClass
>> +{
>> +
>> +    
>> +    /**
>> +     * 
>> +     * @param args
>> +     */
>> +    public static void main( String[] args )
>> +    {
>> +        int nullArgs = 0;
>> +        int emptyArgs = 0;
>> +        int notEmptyArgs = 0;
>> +        for ( int i = 0; i < args.length; i++ )
>> +        {
>> +            if( args[i] == null )
>> +            {
>> +                nullArgs++;
>> +                System.out.println( "arg[" + i + "] is null, weird" );
>> +            }
>> +            else if( args[i] == "" )
>> +            {
>> +                emptyArgs++;
>> +                System.out.println( "arg[" + i + "] is empty" );
>> +            }
>> +            else
>> +            {
>> +                notEmptyArgs++;
>> +                System.out.println( "arg[" + i + "] is not empty" );
>> +            }
>> +            System.out.print( "Number of null args: " + nullArgs );
>> +            System.out.print( "Number of empty args: " + emptyArgs );
>> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
>> +        }
>> +    }
>> +
>> +}
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-3/src/main/java/test/sub/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,40 @@
>> +package test.sub;
>> +
>> +public class MyClass
>> +{
>> +
>> +    
>> +    
>> +    
>> +    /**
>> +     * 
>> +     * @param args
>> +     */
>> +    public static void main( String[] args )
>> +    {
>> +        int nullArgs = 0;
>> +        int emptyArgs = 0;
>> +        int notEmptyArgs = 0;
>> +        for ( int i = 0; i < args.length; i++ )
>> +        {
>> +            if( args[i] == null )
>> +            {
>> +                nullArgs++;
>> +                System.out.println( "arg[" + i + "] is null, weird" );
>> +            }
>> +            else if( args[i] == "" )
>> +            {
>> +                emptyArgs++;
>> +                System.out.println( "arg[" + i + "] is empty" );
>> +            }
>> +            else
>> +            {
>> +                notEmptyArgs++;
>> +                System.out.println( "arg[" + i + "] is not empty" );
>> +            }
>> +            System.out.print( "Number of null args: " + nullArgs );
>> +            System.out.print( "Number of empty args: " + emptyArgs );
>> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
>> +        }
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,37 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +
>> +<!--
>> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +  <modelVersion>4.0.0</modelVersion>
>> +
>> +  <parent>
>> +	  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>> +	  <artifactId>mpmd-138-parent</artifactId>
>> +	  <version>1.0-SNAPSHOT</version>
>> +  </parent>
>> +
>> +  <artifactId>mpmd-138-mod-4</artifactId>
>> +  
>> +  <name>Module 4</name>
>> +  
>> +  <description>Test 3 classes with copy-paste block</description>
>> +
>> +</project>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,37 @@
>> +package test;
>> +
>> +public class MyClass
>> +{
>> +
>> +    /**
>> +     * 
>> +     * @param args
>> +     */
>> +    public static void main( String[] args )
>> +    {
>> +        int nullArgs = 0;
>> +        int emptyArgs = 0;
>> +        int notEmptyArgs = 0;
>> +        for ( int i = 0; i < args.length; i++ )
>> +        {
>> +            if( args[i] == null )
>> +            {
>> +                nullArgs++;
>> +                System.out.println( "arg[" + i + "] is null, weird" );
>> +            }
>> +            else if( args[i] == "" )
>> +            {
>> +                emptyArgs++;
>> +                System.out.println( "arg[" + i + "] is empty" );
>> +            }
>> +            else
>> +            {
>> +                notEmptyArgs++;
>> +                System.out.println( "arg[" + i + "] is not empty" );
>> +            }
>> +            System.out.print( "Number of null args: " + nullArgs );
>> +            System.out.print( "Number of empty args: " + emptyArgs );
>> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
>> +        }
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/OtherClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,40 @@
>> +package test;
>> +
>> +public class OtherClass
>> +{
>> +
>> +    
>> +    
>> +    
>> +    /**
>> +     * 
>> +     * @param args
>> +     */
>> +    public static void main( String[] args )
>> +    {
>> +        int nullArgs = 0;
>> +        int emptyArgs = 0;
>> +        int notEmptyArgs = 0;
>> +        for ( int i = 0; i < args.length; i++ )
>> +        {
>> +            if( args[i] == null )
>> +            {
>> +                nullArgs++;
>> +                System.out.println( "arg[" + i + "] is null, weird" );
>> +            }
>> +            else if( args[i] == "" )
>> +            {
>> +                emptyArgs++;
>> +                System.out.println( "arg[" + i + "] is empty" );
>> +            }
>> +            else
>> +            {
>> +                notEmptyArgs++;
>> +                System.out.println( "arg[" + i + "] is not empty" );
>> +            }
>> +            System.out.print( "Number of null args: " + nullArgs );
>> +            System.out.print( "Number of empty args: " + emptyArgs );
>> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
>> +        }
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/mod-4/src/main/java/test/sub/MyClass.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,36 @@
>> +package test.sub;
>> +
>> +public class MyClass
>> +{
>> +    /**
>> +     * 
>> +     * @param args
>> +     */
>> +    public static void main( String[] args )
>> +    {
>> +        int nullArgs = 0;
>> +        int emptyArgs = 0;
>> +        int notEmptyArgs = 0;
>> +        for ( int i = 0; i < args.length; i++ )
>> +        {
>> +            if( args[i] == null )
>> +            {
>> +                nullArgs++;
>> +                System.out.println( "arg[" + i + "] is null, weird" );
>> +            }
>> +            else if( args[i] == "" )
>> +            {
>> +                emptyArgs++;
>> +                System.out.println( "arg[" + i + "] is empty" );
>> +            }
>> +            else
>> +            {
>> +                notEmptyArgs++;
>> +                System.out.println( "arg[" + i + "] is not empty" );
>> +            }
>> +            System.out.print( "Number of null args: " + nullArgs );
>> +            System.out.print( "Number of empty args: " + emptyArgs );
>> +            System.out.print( "Number of not empty args: " + notEmptyArgs );
>> +        }
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/pom.xml Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,67 @@
>> +<?xml version="1.0" encoding="UTF-8"?>
>> +
>> +<!--
>> +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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>> +  <modelVersion>4.0.0</modelVersion>
>> +
>> +  <groupId>org.apache.maven.plugin.pmd.its</groupId>
>> +  <artifactId>mpmd-138-parent</artifactId>
>> +  <version>1.0-SNAPSHOT</version>
>> +  <packaging>pom</packaging>
>> +
>> +  <name>Parent</name>
>> +  <description>
>> +    Test proper report generation in a multi-module build.
>> +  </description>
>> +
>> +  <modules>
>> +    <module>mod-1</module>
>> +    <module>mod-2</module>
>> +    <module>mod-3</module>
>> +    <module>mod-4</module>
>> +  </modules>
>> +
>> +  <properties>
>> +    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>> +  </properties>
>> +
>> +  <build>
>> +    <plugins>
>> +      <plugin>
>> +        <artifactId>maven-pmd-plugin</artifactId>
>> +        <version>@project.version@</version>
>> +        <executions>
>> +          <execution>
>> +            <goals>
>> +              <goal>check</goal>
>> +              <goal>cpd-check</goal>
>> +            </goals>
>> +          </execution>
>> +        </executions>
>> +        <configuration>
>> +          <verbose>true</verbose>
>> +          <minimumTokens>25</minimumTokens>
>> +          <failOnViolation>false</failOnViolation> <!-- force execution of both goals, will be checked with verify-script -->
>> +        </configuration>
>> +      </plugin>
>> +    </plugins>
>> +  </build>
>> +</project>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/it/mpmd-138/verify.groovy Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,37 @@
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +File buildLog = new File( basedir, 'build.log' )
>> +assert buildLog.exists()
>> +
>> +// Module 1
>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 An empty statement (semicolon) not part of a loop.')
>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:9 Rule:UnnecessaryReturn Priority:3 Avoid unnecessary return statements.')
>> +assert 1 == buildLog.getText().count('[INFO] You have 2 PMD violations. For more details see:')
>> +
>> +// Module 2
>> +assert 1 == buildLog.getText().count('[INFO] PMD Failure: test.MyClass:8 Rule:EmptyStatementNotInLoop Priority:3 TEST: LOCAL-FILE-RULESET.')
>> +assert 1 == buildLog.getText().count('[INFO] You have 1 PMD violation. For more details see:')
>> +
>> +// Module 3
>> +assert 1 == buildLog.getText().count('[INFO] You have 1 CPD duplication. For more details see:')
>> +
>> +// Module 4
>> +assert 1 == buildLog.getText().count('[INFO] You have 2 CPD duplications. For more details see:')
>> \ No newline at end of file
>>
>> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java (original)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
>> @@ -23,19 +23,13 @@ import java.io.File;
>>  import java.io.IOException;
>>  import java.io.Reader;
>>  import java.util.ArrayList;
>> -import java.util.HashMap;
>>  import java.util.List;
>> -import java.util.Map;
>>  
>>  import org.apache.maven.plugin.AbstractMojo;
>>  import org.apache.maven.plugin.MojoExecutionException;
>>  import org.apache.maven.plugin.MojoFailureException;
>>  import org.apache.maven.project.MavenProject;
>>  import org.codehaus.plexus.util.IOUtil;
>> -import org.codehaus.plexus.util.ReaderFactory;
>> -import org.codehaus.plexus.util.StringUtils;
>> -import org.codehaus.plexus.util.xml.pull.MXParser;
>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>  
>>  /**
>> @@ -44,13 +38,9 @@ import org.codehaus.plexus.util.xml.pull
>>   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
>>   * @version $Id$
>>   */
>> -public abstract class AbstractPmdViolationCheckMojo
>> +public abstract class AbstractPmdViolationCheckMojo<D>
>>      extends AbstractMojo
>>  {
>> -    private static final Boolean FAILURES_KEY = Boolean.TRUE;
>> -
>> -    private static final Boolean WARNINGS_KEY = Boolean.FALSE;
>> -
>>      /**
>>       * The location of the XML report to check, as generated by the PMD report.
>>       *
>> @@ -117,14 +107,10 @@ public abstract class AbstractPmdViolati
>>                  Reader reader = null;
>>                  try
>>                  {
>> -                    XmlPullParser xpp = new MXParser();
>> -                    reader = ReaderFactory.newXmlReader( outputFile );
>> -                    xpp.setInput( reader );
>> -
>> -                    Map<Boolean, List<Map<String, String>>> violations = getViolations( xpp, tagName, failurePriority );
>> +                    ViolationDetails<D> violations = getViolations( outputFile, failurePriority );
>>  
>> -                    List<Map<String, String>> failures = violations.get( FAILURES_KEY );
>> -                    List<Map<String, String>> warnings = violations.get( WARNINGS_KEY );
>> +                    List<D> failures = violations.getFailureDetails();
>> +                    List<D> warnings = violations.getWarningDetails();
>>  
>>                      if ( verbose )
>>                      {
>> @@ -178,86 +164,36 @@ public abstract class AbstractPmdViolati
>>       * @throws XmlPullParserException
>>       * @throws IOException
>>       */
>> -    private Map<Boolean, List<Map<String, String>>> getViolations( XmlPullParser xpp, String tagName, int failurePriority )
>> +    private ViolationDetails<D> getViolations( File analysisFile, int failurePriority )
>>          throws XmlPullParserException, IOException
>>      {
>> -        int eventType = xpp.getEventType();
>> -
>> -        List<Map<String, String>> failures = new ArrayList<Map<String, String>>();
>> -        List<Map<String, String>> warnings = new ArrayList<Map<String, String>>();
>> -
>> -        String fullpath = null;
>> +        List<D> failures = new ArrayList<D>();
>> +        List<D> warnings = new ArrayList<D>();
>>  
>> -        while ( eventType != XmlPullParser.END_DOCUMENT )
>> +        List<D> violations = getErrorDetails( analysisFile );
>> +        
>> +        for( D violation : violations )
>>          {
>> -            if ( eventType == XmlPullParser.START_TAG && "file".equals( xpp.getName() ) )
>> +            int priority = getPriority( violation );
>> +            if ( priority <= failurePriority )
>>              {
>> -                fullpath = xpp.getAttributeValue( "", "name" );
>> +                failures.add( violation );
>>              }
>> -            if ( eventType == XmlPullParser.START_TAG && tagName.equals( xpp.getName() ) )
>> -            {
>> -                Map<String, String> details = getErrorDetails( xpp );
>> -
>> -                if ( fullpath != null )
>> -                {
>> -                    details.put( "filename", getFilename( fullpath, details.get( "package" ) ) );
>> -                }
>> -
>> -                try
>> -                {
>> -                    int priority = Integer.parseInt( details.get( "priority" ) );
>> -                    if ( priority <= failurePriority )
>> -                    {
>> -                        failures.add( details );
>> -                    }
>> -                    else
>> -                    {
>> -                        warnings.add( details );
>> -                    }
>> -                }
>> -                catch ( NumberFormatException e )
>> -                {
>> -                    // I don't know what priority this is. Treat it like a
>> -                    // failure
>> -                    failures.add( details );
>> -                }
>> -                catch ( NullPointerException e )
>> -                {
>> -                    // I don't know what priority this is. Treat it like a
>> -                    // failure
>> -                    failures.add( details );
>> -                }
>> -
>> -            }
>> -
>> -            eventType = xpp.next();
>> -        }
>> -
>> -        Map<Boolean, List<Map<String, String>>> map = new HashMap<Boolean, List<Map<String, String>>>( 2 );
>> -        map.put( FAILURES_KEY, failures );
>> -        map.put( WARNINGS_KEY, warnings );
>> -        return map;
>> -    }
>> -
>> -    private String getFilename( String fullpath, String pkg )
>> -    {
>> -        int index = fullpath.lastIndexOf( File.separatorChar );
>> -
>> -        while ( StringUtils.isNotEmpty( pkg ) )
>> -        {
>> -            index = fullpath.substring( 0, index ).lastIndexOf( File.separatorChar );
>> -
>> -            int dot = pkg.indexOf( '.' );
>> -
>> -            if ( dot < 0 )
>> +            else
>>              {
>> -                break;
>> +                warnings.add( violation );
>>              }
>> -            pkg = pkg.substring( dot + 1 );
>>          }
>> -
>> -        return fullpath.substring( index + 1 );
>> +        
>> +        ViolationDetails<D> details = newViolationDetailsInstance();
>> +        details.setFailureDetails( failures );
>> +        details.setWarningDetails( warnings );
>> +        return details;
>>      }
>> +    
>> +    protected abstract int getPriority( D errorDetail );
>> +    
>> +    protected abstract ViolationDetails<D> newViolationDetailsInstance();
>>  
>>      /**
>>       * Prints the warnings and failures
>> @@ -267,14 +203,14 @@ public abstract class AbstractPmdViolati
>>       * @param warnings
>>       *            list of warnings
>>       */
>> -    protected void printErrors( List<Map<String, String>> failures, List<Map<String, String>> warnings )
>> +    protected void printErrors( List<D> failures, List<D> warnings )
>>      {
>> -        for ( Map<String, String> warning :  warnings )
>> +        for ( D warning :  warnings )
>>          {
>>              printError( warning, "Warning" );
>>          }
>>  
>> -        for ( Map<String, String> failure : failures )
>> +        for ( D failure : failures )
>>          {
>>              printError( failure, "Failure" );
>>          }
>> @@ -322,7 +258,7 @@ public abstract class AbstractPmdViolati
>>       *
>>       * @param item
>>       */
>> -    protected abstract void printError( Map<String, String> item, String severity );
>> +    protected abstract void printError( D item, String severity );
>>  
>>      /**
>>       * Gets the attributes and text for the violation tag and puts them in a
>> @@ -332,6 +268,6 @@ public abstract class AbstractPmdViolati
>>       * @throws XmlPullParserException
>>       * @throws IOException
>>       */
>> -    protected abstract Map<String, String> getErrorDetails( XmlPullParser xpp )
>> +    protected abstract List<D> getErrorDetails( File analisysFile )
>>          throws XmlPullParserException, IOException;
>>  }
>> \ No newline at end of file
>>
>> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java (original)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
>> @@ -19,13 +19,17 @@ package org.apache.maven.plugin.pmd;
>>   * under the License.
>>   */
>>  
>> +import java.io.File;
>> +import java.io.FileReader;
>>  import java.io.IOException;
>> -import java.util.HashMap;
>> -import java.util.Map;
>> +import java.util.List;
>>  
>>  import org.apache.maven.plugin.MojoExecutionException;
>>  import org.apache.maven.plugin.MojoFailureException;
>> -import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>> +import org.apache.maven.plugin.pmd.model.CpdErrorDetail;
>> +import org.apache.maven.plugin.pmd.model.CpdFile;
>> +import org.apache.maven.plugin.pmd.model.Duplication;
>> +import org.apache.maven.plugin.pmd.model.io.xpp3.CpdXpp3Reader;
>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>  
>>  /**
>> @@ -39,7 +43,7 @@ import org.codehaus.plexus.util.xml.pull
>>   * @threadSafe
>>   */
>>  public class CpdViolationCheckMojo
>> -    extends AbstractPmdViolationCheckMojo
>> +    extends AbstractPmdViolationCheckMojo<Duplication>
>>  {
>>  
>>      /**
>> @@ -61,9 +65,9 @@ public class CpdViolationCheckMojo
>>      }
>>  
>>      /** {@inheritDoc} */
>> -    protected void printError( Map item, String severity )
>> +    protected void printError( Duplication item, String severity )
>>      {
>> -        String lines = (String) item.get( "lines" );
>> +        int lines = item.getLines();
>>  
>>  
>>          StringBuffer buff = new StringBuffer( 100 );
>> @@ -71,68 +75,38 @@ public class CpdViolationCheckMojo
>>          buff.append( lines ).append( " lines of duplicated code at locations:" );
>>          this.getLog().info( buff.toString() );
>>  
>> -        buff.setLength( 0 );
>> -        buff.append( "    " );
>> -        Map file = (Map) item.get( "file" );
>> -        buff.append( file.get( "path" ) );
>> -        buff.append( " line " ).append( file.get( "line" ) );
>> -        this.getLog().info( buff.toString() );
>> -
>> -        buff.setLength( 0 );
>> -        buff.append( "    " );
>> -        file = (Map) item.get( "file1" );
>> -        buff.append( file.get( "path" ) );
>> -        buff.append( " line " ).append( file.get( "line" ) );
>> -        this.getLog().info( buff.toString() );
>> +        
>> +        for( CpdFile file : item.getFiles() )
>> +        {
>> +            buff.setLength( 0 );
>> +            buff.append( "    " );
>> +            buff.append( file.getPath() );
>> +            buff.append( " line " ).append( file.getLine() );
>> +            this.getLog().info( buff.toString() );
>> +        }
>>  
>> -        Map codefrag = (Map) item.get( "codefragment" );
>> -        String codefragstr = (String) codefrag.get( "text" );
>>          this.getLog().debug( "CPD " + severity + ": Code Fragment " );
>> -        this.getLog().debug( codefragstr );
>> +        this.getLog().debug( item.getCodefragment() );
>>      }
>>  
>>      /** {@inheritDoc} */
>> -    protected Map getErrorDetails( XmlPullParser xpp )
>> +    protected List<Duplication> getErrorDetails( File cpdFile )
>>          throws XmlPullParserException, IOException
>>      {
>> -        int index = 0;
>> -        int attributeCount = 0;
>> -        HashMap msgs = new HashMap();
>> -
>> -        attributeCount = xpp.getAttributeCount();
>> -        while ( index < attributeCount )
>> -        {
>> -            msgs.put( xpp.getAttributeName( index ), xpp.getAttributeValue( index ) );
>> -
>> -            index++;
>> -        }
>> -
>> -        int tp = xpp.next();
>> -        while ( tp != XmlPullParser.END_TAG )
>> -        {
>> -            // get the tag's text
>> -            switch ( tp )
>> -            {
>> -            case XmlPullParser.TEXT:
>> -                msgs.put( "text", xpp.getText().trim() );
>> -                break;
>> -            case XmlPullParser.START_TAG:
>> -                String nm = xpp.getName();
>> -                if ( msgs.containsKey( nm ) )
>> -                {
>> -                    int cnt = 1;
>> -                    while ( msgs.containsKey( nm + cnt ) )
>> -                    {
>> -                        ++cnt;
>> -                    }
>> -                    nm = nm + cnt;
>> -                }
>> -                msgs.put( nm, getErrorDetails( xpp ) );
>> -                break;
>> -            default:
>> -            }
>> -            tp = xpp.next();
>> -        }
>> -        return msgs;
>> +        CpdXpp3Reader reader = new CpdXpp3Reader();
>> +        CpdErrorDetail details = reader.read( new FileReader( cpdFile ), false );
>> +        return details.getDuplications();
>> +    }
>> +    
>> +    @Override
>> +    protected int getPriority( Duplication errorDetail )
>> +    {
>> +        return 0;
>> +    }
>> +    
>> +    @Override
>> +    protected ViolationDetails<Duplication> newViolationDetailsInstance()
>> +    {
>> +        return new ViolationDetails<Duplication>();
>>      }
>> -}
>> +}
>> \ No newline at end of file
>>
>> Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1233066&r1=1233065&r2=1233066&view=diff
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java (original)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java Wed Jan 18 20:59:15 2012
>> @@ -19,12 +19,19 @@ package org.apache.maven.plugin.pmd;
>>   * under the License.
>>   */
>>  
>> +import java.io.File;
>> +import java.io.FileReader;
>>  import java.io.IOException;
>> -import java.util.HashMap;
>> -import java.util.Map;
>> +import java.util.ArrayList;
>> +import java.util.List;
>>  
>>  import org.apache.maven.plugin.MojoExecutionException;
>>  import org.apache.maven.plugin.MojoFailureException;
>> +import org.apache.maven.plugin.pmd.model.PmdErrorDetail;
>> +import org.apache.maven.plugin.pmd.model.PmdFile;
>> +import org.apache.maven.plugin.pmd.model.Violation;
>> +import org.apache.maven.plugin.pmd.model.io.xpp3.PmdXpp3Reader;
>> +import org.codehaus.plexus.util.StringUtils;
>>  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
>>  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
>>  
>> @@ -39,7 +46,7 @@ import org.codehaus.plexus.util.xml.pull
>>   * @threadSafe
>>   */
>>  public class PmdViolationCheckMojo
>> -    extends AbstractPmdViolationCheckMojo
>> +    extends AbstractPmdViolationCheckMojo<Violation>
>>  {
>>      /**
>>       * What priority level to fail the build on. Failures at or above this level
>> @@ -71,55 +78,83 @@ public class PmdViolationCheckMojo
>>      }
>>  
>>      /** {@inheritDoc} */
>> -    protected void printError( Map<String, String> item, String severity )
>> +    protected void printError( Violation item, String severity )
>>      {
>>  
>>          StringBuffer buff = new StringBuffer( 100 );
>>          buff.append( "PMD " + severity + ": " );
>> -        if ( item.containsKey( "class" ) )
>> +        if ( item.getViolationClass() != null )
>>          {
>> -            if ( item.containsKey( "package" ) )
>> +            if ( item.getViolationPackage() != null )
>>              {
>> -                buff.append( item.get( "package" ) );
>> +                buff.append( item.getViolationPackage() );
>>                  buff.append( "." );
>>              }
>> -            buff.append( item.get( "class" ) );
>> +            buff.append( item.getViolationClass() );
>>          }
>>          else
>>          {
>> -            buff.append( item.get( "filename" ) );
>> +            buff.append( item.getFileName() );
>>          }
>>          buff.append( ":" );
>> -        buff.append( item.get( "beginline" ) );
>> -        buff.append( " Rule:" ).append( item.get( "rule" ) );
>> -        buff.append( " Priority:" ).append( item.get( "priority" ) );
>> -        buff.append( " " ).append( item.get( "text" ) ).append( "." );
>> +        buff.append( item.getBeginline() );
>> +        buff.append( " Rule:" ).append( item.getRule() );
>> +        buff.append( " Priority:" ).append( item.getPriority() );
>> +        buff.append( " " ).append( item.getText() ).append( "." );
>>  
>>          this.getLog().info( buff.toString() );
>>      }
>> -
>> -    /** {@inheritDoc} */
>> -    protected Map<String, String> getErrorDetails( XmlPullParser xpp )
>> +    
>> +    @Override
>> +    protected List<Violation> getErrorDetails( File pmdFile )
>>          throws XmlPullParserException, IOException
>>      {
>> -        int index = 0;
>> -        int attributeCount = 0;
>> -        Map<String, String> msgs = new HashMap<String, String>();
>> +        PmdXpp3Reader reader = new PmdXpp3Reader();
>> +        PmdErrorDetail details = reader.read( new FileReader( pmdFile ), false );
>>  
>> -        attributeCount = xpp.getAttributeCount();
>> -        while ( index < attributeCount )
>> +        List<Violation> violations = new ArrayList<Violation>();
>> +        for( PmdFile file : details.getFiles() )
>>          {
>> -
>> -            msgs.put( xpp.getAttributeName( index ), xpp.getAttributeValue( index ) );
>> -
>> -            index++;
>> +            String fullPath = file.getName();
>> +            
>> +            for ( Violation violation : file.getViolations() )
>> +            {
>> +                violation.setFileName( getFilename( fullPath, violation.getViolationPackage() ) );
>> +                violations.add( violation );
>> +            }
>>          }
>> +        return violations;
>> +    }
>> +    
>> +    @Override
>> +    protected int getPriority( Violation errorDetail )
>> +    {
>> +        return errorDetail.getPriority();
>> +    }
>> +    
>> +    @Override
>> +    protected ViolationDetails<Violation> newViolationDetailsInstance()
>> +    {
>> +        return new ViolationDetails<Violation>();
>> +    }
>> +    
>> +    private String getFilename( String fullpath, String pkg )
>> +    {
>> +        int index = fullpath.lastIndexOf( File.separatorChar );
>>  
>> -        // get the tag's text
>> -        if ( xpp.next() == XmlPullParser.TEXT )
>> +        while ( StringUtils.isNotEmpty( pkg ) )
>>          {
>> -            msgs.put( "text", xpp.getText().trim() );
>> +            index = fullpath.substring( 0, index ).lastIndexOf( File.separatorChar );
>> +
>> +            int dot = pkg.indexOf( '.' );
>> +
>> +            if ( dot < 0 )
>> +            {
>> +                break;
>> +            }
>> +            pkg = pkg.substring( dot + 1 );
>>          }
>> -        return msgs;
>> +
>> +        return fullpath.substring( index + 1 );
>>      }
>>  }
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/ViolationDetails.java Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,69 @@
>> +package org.apache.maven.plugin.pmd;
>> +
>> +/*
>> + * 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.
>> + */
>> +
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +
>> +/**
>> + * Collector of warnings and failures.
>> + * 
>> + * @author Robert Scholte
>> + * @param <D> 
>> + * @since 2.7
>> + */
>> +public class ViolationDetails<D>
>> +{
>> +    private List<D> warningDetails = new ArrayList<D>();
>> +    
>> +    private List<D> failureDetails = new ArrayList<D>();
>> +
>> +    /**
>> +     * @return the warningDetails, never {@code null}
>> +     */
>> +    public List<D> getWarningDetails()
>> +    {
>> +        return warningDetails;
>> +    }
>> +
>> +    /**
>> +     * @param warningDetails the warningDetails to set
>> +     */
>> +    public void setWarningDetails( List<D> warningDetails )
>> +    {
>> +        this.warningDetails = warningDetails;
>> +    }
>> +
>> +    /**
>> +     * @return the failureDetails, never {@code null}
>> +     */
>> +    public List<D> getFailureDetails()
>> +    {
>> +        return failureDetails;
>> +    }
>> +
>> +    /**
>> +     * @param failureDetails the failureDetails to set
>> +     */
>> +    public void setFailureDetails( List<D> failureDetails )
>> +    {
>> +        this.failureDetails = failureDetails;
>> +    }
>> +}
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/cpd.mdo Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,70 @@
>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>> +  
>> +  <!-- Source: http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/cpd.xsd -->
>> +  
>> +  <name>Cpd</name>
>> +  
>> +  <defaults>
>> +    <default>
>> +      <key>package</key>
>> +      <value>org.apache.maven.plugin.pmd.model</value>
>> +    </default>
>> +  </defaults>
>> +  <versionDefinition>
>> +    <type>namespace</type>
>> +    <value>1.0+</value>
>> +  </versionDefinition>
>> +  
>> +  <classes>
>> +    <class xml.tagName="pmd-cpd" rootElement="true">
>> +      <name>CpdErrorDetail</name>
>> +      <fields>
>> +        <field>
>> +          <name>duplications</name>
>> +          <association xml.tagName="duplication" xml.itemsStyle="flat">
>> +            <type>Duplication</type>
>> +            <multiplicity>*</multiplicity>
>> +          </association>
>> +        </field>
>> +      </fields>
>> +    </class>
>> +    <class>
>> +      <name>Duplication</name>
>> +      <fields>
>> +        <field xml.attribute="true">
>> +          <name>lines</name>
>> +          <type>int</type>
>> +        </field>
>> +        <field xml.attribute="true">
>> +          <name>tokens</name>
>> +          <type>int</type>
>> +        </field>
>> +        <field xml.tagName="file">
>> +          <name>files</name>
>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>> +            <type>CpdFile</type>
>> +            <multiplicity>*</multiplicity>
>> +          </association>
>> +        </field>
>> +        <field>
>> +          <name>codefragment</name>
>> +          <type>String</type>
>> +        </field>
>> +      </fields>
>> +    </class>
>> +    <class xml.tagName="file">
>> +      <name>CpdFile</name>
>> +      <fields>
>> +        <field xml.attribute="true">
>> +          <name>line</name>
>> +          <type>int</type>
>> +        </field>
>> +        <field xml.attribute="true">
>> +          <name>path</name>
>> +          <type>String</type>
>> +        </field>
>> +      </fields>
>> +    </class>
>> +  </classes>
>> +</model>
>> \ No newline at end of file
>>
>> Added: maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo
>> URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo?rev=1233066&view=auto
>> ==============================================================================
>> --- maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo (added)
>> +++ maven/plugins/trunk/maven-pmd-plugin/src/main/mdo/pmd.mdo Wed Jan 18 20:59:15 2012
>> @@ -0,0 +1,109 @@
>> +<model xmlns="http://modello.codehaus.org/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> +  xsi:schemaLocation="http://modello.codehaus.org/MODELLO/1.4.0 http://modello.codehaus.org/xsd/modello-1.4.0.xsd">
>> +
>> +  <!-- Source: http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->
>> +
>> +  <name>Pmd</name>
>> +  
>> +  <defaults>
>> +    <default>
>> +      <key>package</key>
>> +      <value>org.apache.maven.plugin.pmd.model</value>
>> +    </default>
>> +  </defaults>
>> +  <versionDefinition>
>> +    <type>namespace</type>
>> +    <value>1.0+</value>
>> +  </versionDefinition>
>> + 
>> +  <classes>
>> +    <class rootElement="true" xml.tagName="pmd">
>> +      <name>PmdErrorDetail</name>
>> +      <fields>
>> +        <field>
>> +          <name>files</name>
>> +          <association xml.tagName="file" xml.itemsStyle="flat">
>> +            <type>PmdFile</type>
>> +            <multiplicity>*</multiplicity>
>> +          </association>
>> +        </field>
>> +        <!-- 
>> +        <field>
>> +          <name>errors</name>
>> +          <association xml.tagName="error" xml.itemsStyle="flat">
>> +            <type>PmdError</type>
>> +            <multiplicity>*</multiplicity>
>> +          </association>
>> +        </field>
>> +         -->
>> +      </fields>
>> +    </class>
>> +    <class>
>> +      <name>PmdFile</name>
>> +      <fields>
>> +        <field xml.attribute="true">
>> +          <name>name</name>
>> +          <type>String</type>
>> +        </field>
>> +        <field>
>> +          <name>violations</name>
>> +          <association xml.tagName="violation" xml.itemsStyle="flat">
>> +            <type>Violation</type>
>> +            <multiplicity>*</multiplicity>
>> +          </association>
>> +        </field>
>> +      </fields>
>> +    </class>
>> +    <class>
>> +      <name>Violation</name>
>> +      <fields>
>> +        <field xml.attribute="true">
>> +          <name>beginline</name>
>> +          <type>int</type>
>> +        </field>
>> +        <field xml.tagName="class" xml.attribute="true">
>> +          <name>violationClass</name>
>> +          <type>String</type>
>> +        </field>
>> +        <field xml.tagName="package" xml.attribute="true">
>> +          <name>violationPackage</name>
>> +          <type>String</type>
>> +        </field>
>> +        <field xml.attribute="true">
>> +          <name>rule</name>
>> +          <type>String</type>
>> +        </field>
>> +        <field  xml.attribute="true">
>> +          <name>priority</name>
>> +          <type>int</type>
>> +        </field>
>> +        <field xml.content="true">
>> +          <name>text</name>
>> +          <type>String</type>
>> +        </field>
>> +      </fields>
>> +      <codeSegments>
>> +        <codeSegment>
>> +          <code>
>> +          <![CDATA[
>> +            private String fileName;
>> +            
>> +            public void setFileName( String fileName )
>> +            {
>> +              this.fileName = fileName;
>> +            }
>> +          
>> +            public String getFileName()
>> +            {
>> +              return fileName;
>> +            }
>> +          ]]>
>> +          </code>
>> +        </codeSegment>
>> +      </codeSegments>
>> +    </class>
>> +  </classes>   
>> +    
>> + 
>> +    
>> +</model>
>> \ No newline at end of file
>>
>>
>>
> 
> 


-- 
Dennis Lundberg

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org