Author: vmassol
Date: Sun Jan  8 10:21:40 2006
New Revision: 367064

URL: http://svn.apache.org/viewcvs?rev=367064&view=rev
Log:
MCLOVER-16: Using Clover with projects that require class post-processing

I still need to write a test to prove it works though...

Modified:
    
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java

Modified: 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java?rev=367064&r1=367063&r2=367064&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java
 Sun Jan  8 10:21:40 2006
@@ -92,8 +92,8 @@
             init();
             registerLicenseFile();
             instrumentSources();
-            addGeneratedSourcesToCompileRoots();
             addCloverDependencyToCompileClasspath();
+            redirectSourceDirectories();
             redirectOutputDirectories();
         }
     }
@@ -141,16 +141,29 @@
         this.project.getBuild().setTestOutputDirectory(
             new File( this.cloverOutputDirectory, "test-classes" ).getPath() );
     }
-    
-    /**
-     * @todo handle multiple source roots. At the moment only the first source 
root is instrumented
-     */
-    private void addGeneratedSourcesToCompileRoots()
+
+    private void redirectSourceDirectories()
     {
-        this.project.getCompileSourceRoots().remove( 0 );
-        this.project.addCompileSourceRoot( this.cloverOutputSourceDirectory );
-    }
+        String oldSourceDirectory = 
this.project.getBuild().getSourceDirectory();
 
+        this.project.getBuild().setSourceDirectory( 
this.cloverOutputSourceDirectory );
+        
+        // Maven2 limitation: changing the source directory doesn't change the 
compile source roots
+        List sourceRoots = this.project.getCompileSourceRoots();
+        for (int i = 0; i < sourceRoots.size(); i++)
+        {
+            String sourceRoot = (String) 
this.project.getCompileSourceRoots().get( i );
+            if (sourceRoot.equals(oldSourceDirectory))
+            {
+                this.project.getCompileSourceRoots().remove( i );
+
+                // Note: Ideally we should add the new compile source root at 
the same place as the
+                // one we're removing but there's no API for this...
+                this.project.addCompileSourceRoot( 
this.project.getBuild().getSourceDirectory() );
+            }
+        }
+    }
+    
     private void addCloverDependencyToCompileClasspath()
         throws MojoExecutionException
     {


Reply via email to