You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/08/01 22:37:34 UTC

svn commit: r681814 - in /maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin: DefaultPluginManager.java PluginParameterExpressionEvaluator.java

Author: jdcasey
Date: Fri Aug  1 13:37:34 2008
New Revision: 681814

URL: http://svn.apache.org/viewvc?rev=681814&view=rev
Log:
[MNG-3694] Calculate concrete states for projects (reactor and the one in direct use) on-demand in the PluginParameterExpressionEvaluator, then restore dynamism after the mojo executes or the report is handed back (just before the latter).

Modified:
    maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java

Modified: maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=681814&r1=681813&r2=681814&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Fri Aug  1 13:37:34 2008
@@ -421,18 +421,6 @@
         String artifactId = pluginDescriptor.getArtifactId();
         String executionId = mojoExecution.getExecutionId();
 
-        if ( !project.isConcrete() )
-        {
-            try
-            {
-                mavenProjectBuilder.calculateConcreteState( project, session.getProjectBuilderConfiguration() );
-            }
-            catch ( ModelInterpolationException e )
-            {
-                throw new PluginManagerException( "Failed to calculate concrete state for project: " + project, e );
-            }
-        }
-
         Xpp3Dom dom = project.getGoalConfiguration( groupId, artifactId, executionId, goalId );
         Xpp3Dom reportDom = project.getReportConfiguration( groupId, artifactId, executionId );
         dom = Xpp3Dom.mergeXpp3Dom( dom, reportDom );
@@ -538,13 +526,27 @@
             }
         }
 
-        try
-        {
-            mavenProjectBuilder.restoreDynamicState( project, session.getProjectBuilderConfiguration() );
-        }
-        catch ( ModelInterpolationException e )
+        restoreAllProjectDynamism( session );
+    }
+
+    private void restoreAllProjectDynamism( MavenSession session )
+        throws PluginManagerException
+    {
+        List reactorProjects = session.getSortedProjects();
+        if ( reactorProjects != null )
         {
-            throw new PluginManagerException( "Failed to restore dynamic state for project: " + project, e );
+            for ( Iterator it = reactorProjects.iterator(); it.hasNext(); )
+            {
+                MavenProject project = (MavenProject) it.next();
+                try
+                {
+                    mavenProjectBuilder.restoreDynamicState( project, session.getProjectBuilderConfiguration() );
+                }
+                catch ( ModelInterpolationException e )
+                {
+                    throw new PluginManagerException( "Failed to restore dynamic state for project: " + project, e );
+                }
+            }
         }
     }
 
@@ -557,18 +559,6 @@
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
         PluginDescriptor descriptor = mojoDescriptor.getPluginDescriptor();
         
-        if ( !project.isConcrete() )
-        {
-            try
-            {
-                mavenProjectBuilder.calculateConcreteState( project, session.getProjectBuilderConfiguration() );
-            }
-            catch ( ModelInterpolationException e )
-            {
-                throw new PluginManagerException( "Failed to calculate concrete state for project: " + project, e );
-            }
-        }
-        
         Xpp3Dom dom = project.getReportConfiguration( descriptor.getGroupId(), descriptor.getArtifactId(),
                                                       mojoExecution.getExecutionId() );
         
@@ -579,14 +569,7 @@
 
         MavenReport report = (MavenReport) getConfiguredMojo( session, dom, project, true, mojoExecution );
         
-        try
-        {
-            mavenProjectBuilder.restoreDynamicState( project, session.getProjectBuilderConfiguration() );
-        }
-        catch ( ModelInterpolationException e )
-        {
-            throw new PluginManagerException( "Failed to restore dynamic state for project: " + project, e );
-        }
+        restoreAllProjectDynamism( session );
         
         return report;
     }
@@ -698,7 +681,9 @@
         //                                                                          mojoDescriptor.getConfiguration() );
 
         ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator( session, mojoExecution,
-                                                                                          pathTranslator, getLogger(),
+                                                                                          pathTranslator,
+                                                                                          mavenProjectBuilder,
+                                                                                          getLogger(),
                                                                                           project,
                                                                                           session.getExecutionProperties() );
 

Modified: maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java?rev=681814&r1=681813&r2=681814&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java Fri Aug  1 13:37:34 2008
@@ -23,6 +23,8 @@
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.interpolation.ModelInterpolationException;
 import org.apache.maven.project.path.PathTranslator;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
@@ -31,6 +33,8 @@
 
 import java.io.File;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
@@ -74,9 +78,22 @@
 
     private final Properties properties;
 
+    private final MavenProjectBuilder projectBuilder;
+
+    public PluginParameterExpressionEvaluator( MavenSession context,
+                                               MojoExecution mojoExecution,
+                                               PathTranslator pathTranslator,
+                                               Logger logger,
+                                               MavenProject project,
+                                               Properties properties )
+    {
+        this( context, mojoExecution, pathTranslator, null, logger, project, properties );
+    }
+    
     public PluginParameterExpressionEvaluator( MavenSession context,
                                                MojoExecution mojoExecution,
                                                PathTranslator pathTranslator,
+                                               MavenProjectBuilder projectBuilder,
                                                Logger logger,
                                                MavenProject project,
                                                Properties properties )
@@ -84,6 +101,7 @@
         this.context = context;
         this.mojoExecution = mojoExecution;
         this.pathTranslator = pathTranslator;
+        this.projectBuilder = projectBuilder;
         this.logger = logger;
         this.project = project;
         this.properties = properties;
@@ -175,10 +193,14 @@
         }
         else if ( "session".equals( expression ) )
         {
+            calculateAllConcreteStates();
+            
             value = context;
         }
         else if ( "reactorProjects".equals( expression ) )
         {
+            calculateAllConcreteStates();
+            
             value = context.getSortedProjects();
         }
         else if ( "reports".equals( expression ) )
@@ -191,14 +213,19 @@
         }
         else if ( "project".equals( expression ) )
         {
+            calculateConcreteState( project );
+            
             value = project;
         }
         else if ( "executedProject".equals( expression ) )
         {
+            calculateConcreteState( project.getExecutionProject() );
             value = project.getExecutionProject();
         }
         else if ( expression.startsWith( "project" ) )
         {
+            calculateConcreteState( project );
+            
             try
             {
                 int pathSeparator = expression.indexOf( "/" );
@@ -336,6 +363,35 @@
         return value;
     }
 
+    private void calculateAllConcreteStates()
+        throws ExpressionEvaluationException
+    {
+        List projects = context.getSortedProjects();
+        if ( projects != null )
+        {
+            for ( Iterator it = projects.iterator(); it.hasNext(); )
+            {
+                calculateConcreteState( (MavenProject) it.next() );
+            }
+        }
+    }
+
+    private void calculateConcreteState( MavenProject project )
+        throws ExpressionEvaluationException
+    {
+        if ( projectBuilder != null && !project.isConcrete() )
+        {
+            try
+            {
+                projectBuilder.calculateConcreteState( project, context.getProjectBuilderConfiguration() );
+            }
+            catch ( ModelInterpolationException e )
+            {
+                throw new ExpressionEvaluationException( "Failed to calculate concrete state for project: " + project, e );
+            }
+        }
+    }
+
     private String stripTokens( String expr )
     {
         if ( expr.startsWith( "${" ) && expr.indexOf( "}" ) == expr.length() - 1 )