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 )