manageArtifactVersion and manageArtifactScope can be called at any time

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@573768 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
index a59601a..83e1642 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
@@ -21,6 +21,7 @@
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -64,21 +65,14 @@
     private DependencyNode currentNode;
     
     /**
-     * The id of the currently managed artifact, or <code>null</code> if the current artifact is not managed.
+     * Map &lt; String replacementId, String premanaged version >
      */
-    private String managedId;
-    
+    private Map managedVersions = new HashMap();
+
     /**
-     * The original version of the currently managed artifact, or <code>null</code> if the current artifact is not
-     * managed.
+     * Map &lt; String replacementId, String premanaged scope >
      */
-    private String premanagedVersion;
-    
-    /**
-     * The original scope of the currently managed artifact, or <code>null</code> if the current artifact is not
-     * managed.
-     */
-    private String premanagedScope;
+    private Map managedScopes = new HashMap();
 
     // constructors -----------------------------------------------------------
 
@@ -91,9 +85,6 @@
         nodesByArtifact = new IdentityHashMap();
         rootNode = null;
         currentNode = null;
-        managedId = null;
-        premanagedVersion = null;
-        premanagedScope = null;
     }
 
     // ResolutionListener methods ---------------------------------------------
@@ -158,13 +149,10 @@
              * Add the dependency management information cached in any prior manageArtifact calls, since includeArtifact
              * is always called after manageArtifact.
              */
+            String premanagedVersion = (String) managedVersions.get( artifact.getId() );
+            String premanagedScope = (String) managedScopes.get( artifact.getId() );
             if ( premanagedVersion != null || premanagedScope != null )
             {
-                if ( !managedId.equals( artifact.getId() ) )
-                {
-                    throw new IllegalStateException( "Managed artifact id was expected to be " + managedId + " but was " + artifact.getId() );
-                }
-                
                 if ( premanagedVersion != null )
                 {
                     node.setPremanagedVersion( premanagedVersion );
@@ -175,7 +163,6 @@
                     node.setPremanagedScope( premanagedScope );
                 }
                 
-                managedId = null;
                 premanagedVersion = null;
                 premanagedScope = null;
             }
@@ -325,8 +312,7 @@
              * Cache management information and apply in includeArtifact, since DefaultArtifactCollector mutates the
              * artifact and then calls includeArtifact after manageArtifact.
              */
-            managedId = replacement.getId();
-            premanagedVersion = artifact.getVersion();
+            managedVersions.put( replacement.getId(), artifact.getVersion() );
         }
     }
 
@@ -346,8 +332,7 @@
              * Cache management information and apply in includeArtifact, since DefaultArtifactCollector mutates the
              * artifact and then calls includeArtifact after manageArtifact.
              */
-            managedId = replacement.getId();
-            premanagedScope = artifact.getScope();
+            managedScopes.put( replacement.getId(), artifact.getScope() );
         }
     }