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 )


Reply via email to