Correctly clone all node properties in BuildingDependencyNodeVisitor.

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@576940 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitor.java b/src/main/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitor.java
index d451da4..7837a49 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitor.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitor.java
@@ -83,6 +83,10 @@
     {
         // clone the node
         DependencyNode newNode = new DependencyNode( node.getArtifact(), node.getState(), node.getRelatedArtifact() );
+        newNode.setOriginalScope( node.getOriginalScope() );
+        newNode.setFailedUpdateScope( node.getFailedUpdateScope() );
+        newNode.setPremanagedVersion( node.getPremanagedVersion() );
+        newNode.setPremanagedScope( node.getPremanagedScope() );
 
         if ( parentNodes.empty() )
         {
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/AbstractDependencyNodeTest.java b/src/test/java/org/apache/maven/shared/dependency/tree/AbstractDependencyNodeTest.java
index 079a629..d2dea0d 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/AbstractDependencyNodeTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/AbstractDependencyNodeTest.java
@@ -35,11 +35,26 @@
 
     protected DependencyNode createNode( String id )
     {
-        return new DependencyNode( createArtifact( id ) );
+        return createNode( id, DependencyNode.INCLUDED );
+    }
+
+    protected DependencyNode createNode( String id, int state )
+    {
+        return createNode( id, state, null );
+    }
+
+    protected DependencyNode createNode( String id, int state, String relatedId )
+    {
+        return new DependencyNode( createArtifact( id ), state, createArtifact( relatedId ) );
     }
 
     protected Artifact createArtifact( String id )
     {
+        if ( id == null )
+        {
+            return null;
+        }
+        
         String[] tokens = id.split( ":" );
 
         return createArtifact( get( tokens, 0 ), get( tokens, 1 ), get( tokens, 2 ), get( tokens, 3 ), get( tokens, 4 ) );
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitorTest.java b/src/test/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitorTest.java
index 19190b2..58d8ccc 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitorTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/traversal/BuildingDependencyNodeVisitorTest.java
@@ -51,6 +51,88 @@
         assertEquals( sourceNode, resultNode );
     }
 
+    public void testVisitNodeWithState()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1", DependencyNode.OMITTED_FOR_CYCLE );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
+    public void testVisitNodeWithRelatedArtifact()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1", DependencyNode.OMITTED_FOR_CONFLICT, "g:a:t:2" );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
+    public void testVisitNodeWithOriginalScope()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1" );
+        sourceNode.setOriginalScope( "x" );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
+    public void testVisitNodeWithFailedUpdateScope()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1" );
+        sourceNode.setFailedUpdateScope( "x" );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
+    public void testVisitNodeWithPremanagedVersion()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1" );
+        sourceNode.setPremanagedVersion( "2" );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
+    public void testVisitNodeWithPremanagedScope()
+    {
+        DependencyNode sourceNode = createNode( "g:a:t:1" );
+        sourceNode.setPremanagedScope( "x" );
+
+        visitor = new BuildingDependencyNodeVisitor();
+        visitor.visit( sourceNode );
+        visitor.endVisit( sourceNode );
+
+        DependencyNode resultNode = visitor.getDependencyTree();
+        assertNotSame( sourceNode, resultNode );
+        assertEquals( sourceNode, resultNode );
+    }
+
     public void testVisitNodeWithChild()
     {
         DependencyNode sourceNode = createNode( "g:a:t:1" );