You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/05/04 15:16:45 UTC

svn commit: r771298 - /maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java

Author: bentmann
Date: Mon May  4 13:16:45 2009
New Revision: 771298

URL: http://svn.apache.org/viewvc?rev=771298&view=rev
Log:
o Filtered non-applicable parameters when converting from plugin execution to mojo execution

Modified:
    maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java

Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=771298&r1=771297&r2=771298&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Mon May  4 13:16:45 2009
@@ -349,9 +349,14 @@
                 {
                     for( String goal : e.getGoals() )
                     {
-                        if( mojoDescriptor.getGoal().equals( goal ) )
+                        if ( mojoDescriptor.getGoal().equals( goal ) )
                         {
-                            mojoExecution.setConfiguration( (Xpp3Dom) e.getConfiguration() );
+                            Xpp3Dom executionConfiguration = (Xpp3Dom) e.getConfiguration();
+
+                            Xpp3Dom mojoConfiguration =
+                                extractMojoConfiguration( executionConfiguration, mojoDescriptor );
+
+                            mojoExecution.setConfiguration( mojoConfiguration );
                         }
                     }
                 }
@@ -362,7 +367,36 @@
                 
         return lifecyclePlan;
     }  
-           
+
+    /**
+     * Extracts the configuration for a single mojo from the specified execution configuration by discarding any
+     * non-applicable parameters. This is necessary because a plugin execution can have multiple goals with different
+     * parametes whose default configurations are all aggregated into the execution configuration. However, the
+     * underlying configurator will error out when trying to configure a mojo parameter that is specified in the
+     * configuration but not present in the mojo instance.
+     * 
+     * @param executionConfiguration The configuration from the plugin execution, must not be {@code null}.
+     * @param mojoDescriptor The descriptor for the mojo being configured, must not be {@code null}.
+     * @return The configuration for the mojo, never {@code null}.
+     */
+    private Xpp3Dom extractMojoConfiguration( Xpp3Dom executionConfiguration, MojoDescriptor mojoDescriptor )
+    {
+        Xpp3Dom mojoConfiguration = new Xpp3Dom( executionConfiguration );
+
+        Collection<String> mojoParameters = mojoDescriptor.getParameterMap().keySet();
+
+        for ( int i = mojoConfiguration.getChildCount() - 1; i >= 0; i-- )
+        {
+            String mojoParameter = mojoConfiguration.getChild( i ).getName();
+            if ( !mojoParameters.contains( mojoParameter ) )
+            {
+                mojoConfiguration.removeChild( i );
+            }
+        }
+
+        return mojoConfiguration;
+    }
+
     // org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
     MojoDescriptor getMojoDescriptor( String task, MavenProject project, ArtifactRepository localRepository )
     //MojoDescriptor getMojoDescriptor( String groupId, String artifactId, String version, String goal, MavenProject project, ArtifactRepository localRepository )
@@ -490,7 +524,7 @@
         {
             if ( lifecycle.getId().equals( "default" ) )
             {
-                return (List<String>) lifecycle.getPhases();
+                return lifecycle.getPhases();
             }
         }