You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2016/05/01 12:56:49 UTC

[47/50] [abbrv] maven-aether git commit: Bug 451566 - DefaultRepositorySystem.resolveDependencies() fails with NPE when dependency collection fails early and yields not even a root node

Bug 451566 - DefaultRepositorySystem.resolveDependencies() fails with NPE when dependency collection fails early and yields not even a root node

Skipped artifact resolution step if dependency collection didn't yield any nodes and allowed underlying exception from collector to bubble up


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ab199198
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ab199198
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ab199198

Branch: refs/heads/master
Commit: ab19919869fb90be10e2904c6e01851d0b12dfef
Parents: 1cbc81d
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Nov 16 22:02:02 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Nov 16 22:02:02 2014 +0100

----------------------------------------------------------------------
 .../internal/impl/DefaultRepositorySystem.java  | 49 +++++++++++---------
 .../impl/DefaultRepositorySystemTest.java       | 34 ++++++++++++++
 2 files changed, 62 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ab199198/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
index 8882814..f15683f 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
@@ -345,35 +345,42 @@ public class DefaultRepositorySystem
                 dce = e;
                 collectResult = e.getResult();
             }
-            result.setRoot( collectResult.getRoot() );
-            result.setCycles( collectResult.getCycles() );
-            result.setCollectExceptions( collectResult.getExceptions() );
+            if ( collectResult != null )
+            {
+                result.setRoot( collectResult.getRoot() );
+                result.setCycles( collectResult.getCycles() );
+                result.setCollectExceptions( collectResult.getExceptions() );
+            }
         }
         else
         {
             throw new IllegalArgumentException( "dependency node or collect request missing" );
         }
 
-        ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
-        DependencyFilter filter = request.getFilter();
-        DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
-        visitor = new TreeDependencyVisitor( visitor );
-        result.getRoot().accept( visitor );
-        List<ArtifactRequest> requests = builder.getRequests();
-
-        List<ArtifactResult> results;
-        try
+        if ( result.getRoot() != null )
         {
-            results = artifactResolver.resolveArtifacts( session, requests );
-        }
-        catch ( ArtifactResolutionException e )
-        {
-            are = e;
-            results = e.getResults();
-        }
-        result.setArtifactResults( results );
+            ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
+            DependencyFilter filter = request.getFilter();
+            DependencyVisitor visitor =
+                ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
+            visitor = new TreeDependencyVisitor( visitor );
+            result.getRoot().accept( visitor );
+
+            List<ArtifactResult> results;
+            try
+            {
+                List<ArtifactRequest> requests = builder.getRequests();
+                results = artifactResolver.resolveArtifacts( session, requests );
+            }
+            catch ( ArtifactResolutionException e )
+            {
+                are = e;
+                results = e.getResults();
+            }
+            result.setArtifactResults( results );
 
-        updateNodesWithResolvedArtifacts( results );
+            updateNodesWithResolvedArtifacts( results );
+        }
 
         if ( dce != null )
         {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ab199198/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
index 2cdb035..9a0b609 100644
--- a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
+++ b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
@@ -16,10 +16,19 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.impl.DependencyCollector;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.repository.Proxy;
 import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
 import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
 import org.eclipse.aether.util.repository.DefaultMirrorSelector;
@@ -103,4 +112,29 @@ public class DefaultRepositorySystemTest
         assertSame( auth, deployRepo.getAuthentication() );
     }
 
+    @Test
+    public void testResolveDependencies_NoRootNode()
+        throws Exception
+    {
+        DependencyRequest request = new DependencyRequest();
+        request.setCollectRequest( new CollectRequest().setRoot( new Dependency( new DefaultArtifact( "g:a:v" ), "" ) ) );
+        system.setDependencyCollector( new DependencyCollector()
+        {
+            public CollectResult collectDependencies( RepositorySystemSession session, CollectRequest request )
+                throws DependencyCollectionException
+            {
+                throw new DependencyCollectionException( null );
+            }
+        } );
+        try
+        {
+            system.resolveDependencies( session, request );
+            fail( "Expected exception" );
+        }
+        catch ( DependencyResolutionException e )
+        {
+            assertTrue( e.getCause() instanceof DependencyCollectionException );
+        }
+    }
+
 }