Author: krosenvold
Date: Thu Apr 29 07:22:39 2010
New Revision: 939220

URL: http://svn.apache.org/viewvc?rev=939220&view=rev
Log:
[MNG-4633] Changed to use nice clean countdownlatch instead of synchronized 
booleans

Also updated phase locking to only lock when project being built changes phase

Modified:
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
    
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
    
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
 Thu Apr 29 07:22:39 2010
@@ -19,7 +19,7 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.CountDownLatch;
 
 /**
  * Wraps individual MojoExecutions, containing information about completion 
status and scheduling.
@@ -35,9 +35,7 @@ public class ExecutionPlanItem
     private final Schedule schedule;
     // Completeness just indicates that it has been run or failed
 
-    private final AtomicBoolean complete = new AtomicBoolean( false );
-
-    private final Object monitor = new Object();
+    private final CountDownLatch done = new CountDownLatch( 1 );
 
     public ExecutionPlanItem( MojoExecution mojoExecution, Schedule schedule )
     {
@@ -57,47 +55,23 @@ public class ExecutionPlanItem
 
     public void setComplete()
     {
-        boolean transitionSuccessful = ensureComplete();
-        if ( !transitionSuccessful )
-        {
-            throw new IllegalStateException( "Expected to be able to 
setComplete node, but was complete already" );
-        }
-    }
-
-    public boolean ensureComplete()
-    {
-        boolean f = complete.compareAndSet( false, true );
-        notifyListeners();
-        return f;
+        done.countDown();
     }
 
-    private void notifyListeners()
+    public boolean isDone()
     {
-        synchronized ( monitor )
-        {
-            monitor.notifyAll();
-        }
+        return done.getCount() < 1;
     }
 
     public void forceComplete()
     {
-        final boolean b = complete.getAndSet( true );
-        if ( !b )
-        {
-            notifyListeners();
-        } // Release anyone waiting for us
+        setComplete();
     }
 
     public void waitUntilDone()
         throws InterruptedException
     {
-        synchronized ( monitor )
-        {
-            while ( !complete.get() )
-            {
-                monitor.wait( 100 );
-            }
-        }
+        done.await();
     }
 
     public Schedule getSchedule()

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
 Thu Apr 29 07:22:39 2010
@@ -205,7 +205,7 @@ public class LifecycleWeaveBuilder
                         builtLogItem.setComplete();
 
                         ExecutionPlanItem nextPlanItem = planItems.hasNext() ? 
planItems.next() : null;
-                        if ( nextPlanItem != null )
+                        if ( nextPlanItem != null && 
phaseRecorder.isDifferentPhase( nextPlanItem.getMojoExecution() ) )
                         {
 
                             final Schedule scheduleOfNext = 
nextPlanItem.getSchedule();
@@ -215,12 +215,9 @@ public class LifecycleWeaveBuilder
                                                                               
projectBuild );
                             }
 
-                            if ( phaseRecorder.isDifferentPhase( 
nextPlanItem.getMojoExecution() ) )
+                            for ( ArtifactLink dependencyLink : 
dependencyLinks )
                             {
-                                for ( ArtifactLink dependencyLink : 
dependencyLinks )
-                                {
-                                    dependencyLink.resolveFromUpstream();
-                                }
+                                dependencyLink.resolveFromUpstream();
                             }
                         }
                         current = nextPlanItem;
@@ -259,13 +256,13 @@ public class LifecycleWeaveBuilder
         {
             final MavenExecutionPlan upstreamPlan = executionPlans.get( 
upstreamProject );
             final String nextPhase = nextPlanItem.getLifecyclePhase();
-            final ExecutionPlanItem inSchedule = upstreamPlan.findLastInPhase( 
nextPhase );
+            final ExecutionPlanItem upstream = upstreamPlan.findLastInPhase( 
nextPhase );
 
-            if ( inSchedule != null )
+            if ( upstream != null )
             {
                 long startWait = System.currentTimeMillis();
-                inSchedule.waitUntilDone();
-                builtLogItem.addWait( upstreamProject, inSchedule, startWait );
+                upstream.waitUntilDone();
+                builtLogItem.addWait( upstreamProject, upstream, startWait );
             }
             else if ( !upstreamPlan.containsPhase( nextPhase ) )
             {

Modified: 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
 Thu Apr 29 07:22:39 2010
@@ -46,8 +46,8 @@ public class MavenExecutionPlanTest
         MavenExecutionPlan plan = 
LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan();
         plan.forceAllComplete();
         final Iterator<ExecutionPlanItem> planItemIterator = plan.iterator();
-        assertFalse( planItemIterator.next().ensureComplete() );
-        assertFalse( planItemIterator.next().ensureComplete() );
+        assertTrue( planItemIterator.next().isDone() );
+        assertTrue( planItemIterator.next().isDone() );
     }
 
     public void testFindLastInPhase()

Modified: 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
 Thu Apr 29 07:22:39 2010
@@ -31,7 +31,7 @@ public class ExecutionPlanItemTest
     {
         ExecutionPlanItem item = createExecutionPlanItem( "testMojo", null );
         item.setComplete();  // This itself is a valid test
-        assertFalse( item.ensureComplete() );
+        assertTrue( item.isDone() );
     }
 
     public void testWaitUntilDone()


Reply via email to