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

svn commit: r707775 - in /maven/mercury/trunk: mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java

Author: ogusakov
Date: Fri Oct 24 15:54:32 2008
New Revision: 707775

URL: http://svn.apache.org/viewvc?rev=707775&view=rev
Log:
tree builder optimized - removed duplicate node creation

Modified:
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java

Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java?rev=707775&r1=707774&r2=707775&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java Fri Oct 24 15:54:32 2008
@@ -17,7 +17,6 @@
 import org.apache.maven.mercury.builder.api.DependencyProcessor;
 import org.apache.maven.mercury.metadata.DependencyBuilder;
 import org.apache.maven.mercury.metadata.DependencyBuilderFactory;
-import org.apache.maven.mercury.metadata.DependencyTreeBuilder;
 import org.apache.maven.mercury.metadata.MetadataTreeException;
 import org.apache.maven.mercury.metadata.MetadataTreeNode;
 import org.apache.maven.mercury.repository.api.ArtifactResults;

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=707775&r1=707774&r2=707775&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Fri Oct 24 15:54:32 2008
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -23,12 +24,12 @@
 
 /**
  * This is the new entry point into Artifact resolution process.
- * It implements 3-phase 
  * 
  * @author Oleg Gusakov
  * @version $Id: MetadataTree.java 681180 2008-07-30 19:34:16Z ogusakov $
  */
-public class DependencyTreeBuilder implements DependencyBuilder
+class DependencyTreeBuilder
+implements DependencyBuilder
 {
   Language _lang = new DefaultLanguage(DependencyTreeBuilder.class);
   
@@ -40,6 +41,8 @@
   
   MetadataTreeNode _root;
   
+  Map< String, MetadataTreeNode > existingNodes;
+  
   /**
    * creates an instance of MetadataTree. Use this instance to 
    * <ul>
@@ -81,9 +84,6 @@
     this._reader = new VirtualRepositoryReader( repositories, processor );
   }
   //------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see org.apache.maven.mercury.metadata.DependencyBuilder#buildTree(org.apache.maven.mercury.artifact.ArtifactBasicMetadata)
-   */
   public MetadataTreeNode buildTree( ArtifactBasicMetadata startMD )
   throws MetadataTreeException
   {
@@ -100,6 +100,8 @@
       throw new MetadataTreeException(e);
     }
     
+    existingNodes = new HashMap<String, MetadataTreeNode>(128);
+    
     _root = createNode( startMD, null, startMD );
     return _root;
   }
@@ -111,6 +113,11 @@
 
     ArtifactMetadata mr;
     
+    MetadataTreeNode existingNode = existingNodes.get( nodeQuery.toString() );
+    
+    if( existingNode != null )
+      return existingNode;
+    
     try
     {
         mr = _reader.readDependencies( nodeMD );
@@ -128,9 +135,6 @@
         ArtifactBasicResults res = _reader.readVersions( dependencies );
         Map<ArtifactBasicMetadata, List<ArtifactBasicMetadata>> expandedDeps = res.getResults();
         
-//        if( expandedDeps == null )
-//          return node;
-      
         for( ArtifactBasicMetadata md : dependencies )
         {
           List<ArtifactBasicMetadata> versions = expandedDeps.get( md );
@@ -175,6 +179,8 @@
           else
             node.addQuery(md);
       }
+        
+      existingNodes.put( nodeQuery.toString(), node );
     
       return node;
     }
@@ -240,9 +246,6 @@
     return true;
   }
   //-----------------------------------------------------
-  /* (non-Javadoc)
-   * @see org.apache.maven.mercury.metadata.DependencyBuilder#resolveConflicts(org.apache.maven.mercury.artifact.ArtifactScopeEnum)
-   */
   public List<ArtifactMetadata> resolveConflicts( ArtifactScopeEnum scope )
   throws MetadataTreeException
   {