You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ma...@apache.org on 2008/04/25 00:18:31 UTC

svn commit: r651439 - /maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java

Author: markh
Date: Thu Apr 24 15:18:21 2008
New Revision: 651439

URL: http://svn.apache.org/viewvc?rev=651439&view=rev
Log:
o Fix potential recursion in hashCode with parent.hashCode by using parent's artifact only
o Aligned equals to also use parent's artifact only

Modified:
    maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java

Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java?rev=651439&r1=651438&r2=651439&view=diff
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java (original)
+++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/tree/DependencyNode.java Thu Apr 24 15:18:21 2008
@@ -774,11 +774,12 @@
     {
         int hashCode = 1;
         
-        hashCode = hashCode * 31 + nullHashCode( getParent() );
         hashCode = hashCode * 31 + getArtifact().hashCode();
-        
         // DefaultArtifact.hashCode does not consider scope
         hashCode = hashCode * 31 + nullHashCode( getArtifact().getScope() );
+
+        // TODO: use parent's artifact to prevent recursion - how can we improve this?
+        hashCode = hashCode * 31 + nullHashCode( nullGetArtifact( getParent() ) );
         
         hashCode = hashCode * 31 + getChildren().hashCode();
         hashCode = hashCode * 31 + getState();
@@ -805,12 +806,13 @@
         {
             DependencyNode node = (DependencyNode) object;
 
-            // TODO: no parent.equals() to prevent recursion
             equal = getArtifact().equals( node.getArtifact() );
-            
             // DefaultArtifact.hashCode does not consider scope
             equal &= nullEquals( getArtifact().getScope(), node.getArtifact().getScope() );
             
+            // TODO: use parent's artifact to prevent recursion - how can we improve this?
+            equal &= nullEquals( nullGetArtifact( getParent() ), nullGetArtifact( node.getParent() ) );
+            
             equal &= getChildren().equals( node.getChildren() );
             equal &= getState() == node.getState();
             equal &= nullEquals( getRelatedArtifact(), node.getRelatedArtifact() );
@@ -884,5 +886,17 @@
     private boolean nullEquals( Object a, Object b )
     {
         return ( a == null ? b == null : a.equals( b ) );
+    }
+    
+    /**
+     * Gets the artifact for the specified node.
+     * 
+     * @param node
+     *            the dependency node, possibly <code>null</code>
+     * @return the node's artifact, or <code>null</code> if the specified node was <code>null</code>
+     */
+    private static Artifact nullGetArtifact( DependencyNode node )
+    {
+        return ( node != null ) ? node.getArtifact() : null;
     }
 }