diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java index 4beca7990..4c41d40c9 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java @@ -448,9 +448,17 @@ private void processDependency( Args args, Results results, DependencyProcessing context.getParent().getChildren().add( child ); boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty(); + DependencyProcessingContext parentContext = context.withDependency( d ); if ( recurse ) { - doRecurse( args, context.withDependency( d ), descriptorResult, child ); + doRecurse( args, parentContext, descriptorResult, child ); + } + else if ( !args.skipper.skipResolution( child, parentContext.parents ) ) + { + List parents = new ArrayList<>( parentContext.parents.size() + 1 ); + parents.addAll( parentContext.parents ); + parents.add( child ); + args.skipper.cache( child, parents ); } } } diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java index ea162f945..2a1dbea53 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollectorTest.java @@ -61,6 +61,11 @@ import org.eclipse.aether.util.graph.manager.DefaultDependencyManager; import org.eclipse.aether.util.graph.manager.DependencyManagerUtils; import org.eclipse.aether.util.graph.manager.TransitiveDependencyManager; +import org.eclipse.aether.util.graph.transformer.ConflictResolver; +import org.eclipse.aether.util.graph.transformer.JavaScopeDeriver; +import org.eclipse.aether.util.graph.transformer.JavaScopeSelector; +import org.eclipse.aether.util.graph.transformer.NearestVersionSelector; +import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector; import org.eclipse.aether.util.graph.version.HighestVersionFilter; import org.junit.Before; import org.junit.Test; @@ -576,6 +581,26 @@ public void testVersionFilter() assertEquals( 1, result.getRoot().getChildren().size() ); } + + @Test + public void testDescriptorDependenciesEmpty() + throws Exception + { + DependencyNode root = parser.parseResource("expectedSubtreeOnDescriptorDependenciesEmpty.txt"); + Dependency dependency = root.getDependency(); + CollectRequest request = new CollectRequest(dependency, Arrays.asList(repository)); + + collector.setArtifactDescriptorReader(newReader("dependencies-empty/")); + + session.setDependencyGraphTransformer(new ConflictResolver( + new NearestVersionSelector(), new JavaScopeSelector(), new SimpleOptionalitySelector(), + new JavaScopeDeriver() + )); + + CollectResult result = collector.collectDependencies(session, request); + assertEqualSubtree(root, result.getRoot()); + } + static class TestDependencyManager implements DependencyManager { diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini new file mode 100644 index 000000000..f5c8d60e8 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_a_ver.ini @@ -0,0 +1,4 @@ +[dependencies] +gid:b:jar:ver +gid:c:jar:ver +gid:e:jar:ver diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini new file mode 100644 index 000000000..4a016c056 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_b_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:d:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini new file mode 100644 index 000000000..33a9d26c4 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_c_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:d:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_1.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini new file mode 100644 index 000000000..39318dad1 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_d_2.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:g:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini new file mode 100644 index 000000000..1753baca6 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_e_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:f:jar:ver \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini new file mode 100644 index 000000000..a456e7128 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_f_ver.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:g:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini new file mode 100644 index 000000000..ce535a50d --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_1.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:h:jar:1 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini new file mode 100644 index 000000000..41cd235f6 --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_g_2.ini @@ -0,0 +1,2 @@ +[dependencies] +gid:h:jar:2 \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_1.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini new file mode 100644 index 000000000..05ba453ac --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/dependencies-empty/gid_h_2.ini @@ -0,0 +1 @@ +[dependencies] \ No newline at end of file diff --git a/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt new file mode 100644 index 000000000..889b64f8a --- /dev/null +++ b/maven-resolver-impl/src/test/resources/artifact-descriptions/expectedSubtreeOnDescriptorDependenciesEmpty.txt @@ -0,0 +1,8 @@ +gid:a:jar:ver ++- gid:b:jar:ver compile +| \- gid:d:jar:1 compile ++- gid:c:jar:ver compile +\- gid:e:jar:ver compile +| +- gid:f:jar:ver compile +| | +- gid:g:jar:2 compile +| | | \- gid:h:jar:2 compile \ No newline at end of file