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 )


Reply via email to