Author: jdcasey
Date: Thu Aug 28 13:47:05 2008
New Revision: 689976
URL: http://svn.apache.org/viewvc?rev=689976&view=rev
Log:
[MNG-3729] Fixing problems with project.executionProject being set to null
after innermost forking mojo is finished, leaving it to cause a NPE when the
next mojo uses it via reactorProjects. integration test will follow next.
Modified:
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
Modified:
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL:
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=689976&r1=689975&r2=689976&view=diff
==============================================================================
---
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
(original)
+++
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
Thu Aug 28 13:47:05 2008
@@ -601,22 +601,21 @@
if ( hasFork )
{
+ // NOTE: This must always happen, regardless of treatment of
reactorProjects below, because
+ // if we're in a forked execution right now, the current
project will itself be an execution project of
+ // something in the reactorProjects list, and won't have a
next-stage executionProject created
+ // for it otherwise, which leaves the project == null for the
upcoming forked execution.
+ createExecutionProject( project, session, true );
+
if ( usesReactorProjects )
{
List reactorProjects = session.getSortedProjects();
for ( Iterator it = reactorProjects.iterator();
it.hasNext(); )
{
MavenProject reactorProject = (MavenProject) it.next();
- if ( reactorProject.getExecutionProject() == null )
- {
- createExecutionProject( reactorProject, session,
false );
- }
+ createExecutionProject( reactorProject, session, false
);
}
}
- else
- {
- createExecutionProject( project, session, true );
- }
}
if ( mojoDescriptor.getExecutePhase() != null ||
mojoDescriptor.getExecuteGoal() != null )
@@ -652,6 +651,12 @@
if ( hasFork )
{
+ // NOTE: This must always happen, regardless of treatment of
reactorProjects below, because
+ // if we're in a forked execution right now, the current
project will itself be an execution project of
+ // something in the reactorProjects list, and may not have had
its own executionProject instance reset to
+ // a concrete state again after the previous forked executions.
+ calculateConcreteState( project.getExecutionProject(),
session, true );
+
// FIXME: Would be nice to find a way to cause the execution
project to stay in a concrete state...
// TODO: Test this! It should be fixed, but I don't want to
destabilize until I have the issue I'm working on fixed.
if ( usesReactorProjects )
@@ -664,10 +669,6 @@
calculateConcreteState(
reactorProject.getExecutionProject(), session, false );
}
}
- else
- {
- calculateConcreteState( project.getExecutionProject(),
session, true );
- }
}
try
@@ -703,44 +704,17 @@
{
throw new LifecycleExecutionException( e.getMessage(), e );
}
-
- if ( hasFork )
- {
- project.setExecutionProject( null );
-
- if ( usesReactorProjects )
- {
- List reactorProjects = session.getSortedProjects();
- for ( Iterator it = reactorProjects.iterator();
it.hasNext(); )
- {
- MavenProject reactorProject = (MavenProject) it.next();
- reactorProject.setExecutionProject( null );
- }
- }
- }
-
-// if ( usesReactorProjects )
-// {
-// restoreAllDynamicStates( session );
-// }
-// else
-// {
-// restoreDynamicState( project, session, true );
-// }
}
}
private void createExecutionProject( MavenProject project, MavenSession
session, boolean processProjectReferences )
throws LifecycleExecutionException
{
- if ( project.getExecutionProject() == null )
- {
- MavenProject executionProject = new MavenProject( project );
-
- calculateConcreteState( executionProject, session,
processProjectReferences );
-
- project.setExecutionProject( executionProject );
- }
+ MavenProject executionProject = new MavenProject( project );
+
+ calculateConcreteState( executionProject, session,
processProjectReferences );
+
+ project.setExecutionProject( executionProject );
}
private boolean usesSessionOrReactorProjects( PlexusConfiguration
configuration )