diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/RepositorySystem.java b/maven-resolver-api/src/main/java/org/eclipse/aether/RepositorySystem.java index c71c08b2a..ddad8726d 100644 --- a/maven-resolver-api/src/main/java/org/eclipse/aether/RepositorySystem.java +++ b/maven-resolver-api/src/main/java/org/eclipse/aether/RepositorySystem.java @@ -29,6 +29,7 @@ import org.eclipse.aether.deployment.DeployRequest; import org.eclipse.aether.deployment.DeployResult; import org.eclipse.aether.deployment.DeploymentException; +import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.installation.InstallRequest; import org.eclipse.aether.installation.InstallResult; @@ -153,10 +154,12 @@ DependencyResult resolveDependencies(RepositorySystemSession session, Dependency * * @param session The repository session, must not be {@code null}. * @param root The dependency node root of the graph, must not be {@code null}. + * @param filter The filter to apply, may be {@code null}. * @return The flattened list of dependency nodes, never {@code null}. * @since 2.0.0 */ - List flattenDependencyNodes(RepositorySystemSession session, DependencyNode root); + List flattenDependencyNodes( + RepositorySystemSession session, DependencyNode root, DependencyFilter filter); /** * Resolves the path for an artifact. The artifact will be downloaded to the local repository if necessary. An diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java index 20f98dc22..d9a3254a6 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java @@ -260,13 +260,8 @@ public DependencyResult resolveDependencies(RepositorySystemSession session, Dep throw new NullPointerException("dependency node and collect request cannot be null"); } - final ArrayList dependencyNodes = new ArrayList<>(); - DependencyVisitor builder = getDependencyVisitor(session, dependencyNodes::add); - DependencyFilter filter = request.getFilter(); - DependencyVisitor visitor = (filter != null) ? new FilteringDependencyVisitor(builder, filter) : builder; - if (result.getRoot() != null) { - result.getRoot().accept(visitor); - } + final List dependencyNodes = + doFlattenDependencyNodes(session, result.getRoot(), request.getFilter()); final List requests = dependencyNodes.stream() .map(n -> { @@ -302,12 +297,23 @@ public DependencyResult resolveDependencies(RepositorySystemSession session, Dep } @Override - public List flattenDependencyNodes(RepositorySystemSession session, DependencyNode root) { + public List flattenDependencyNodes( + RepositorySystemSession session, DependencyNode root, DependencyFilter dependencyFilter) { validateSession(session); requireNonNull(root, "root cannot be null"); + return doFlattenDependencyNodes(session, root, dependencyFilter); + } + + private List doFlattenDependencyNodes( + RepositorySystemSession session, DependencyNode root, DependencyFilter dependencyFilter) { final ArrayList dependencyNodes = new ArrayList<>(); - root.accept(getDependencyVisitor(session, dependencyNodes::add)); + if (root != null) { + DependencyVisitor builder = getDependencyVisitor(session, dependencyNodes::add); + DependencyVisitor visitor = + (dependencyFilter != null) ? new FilteringDependencyVisitor(builder, dependencyFilter) : builder; + root.accept(visitor); + } return dependencyNodes; }