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..f2271a459 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; @@ -158,6 +159,19 @@ DependencyResult resolveDependencies(RepositorySystemSession session, Dependency */ List flattenDependencyNodes(RepositorySystemSession session, DependencyNode root); + /** + * Flattens the provided graph as {@link DependencyNode} into a {@link List}{@code } according to session + * configuration. + * + * @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 optional dependency filter, can be {@code null}. + * @return The flattened list of dependency nodes, never {@code null}. + * @since 2.0.0 + */ + 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 * artifact that is already resolved will be skipped and is not re-resolved. In general, callers must not assume any 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..d12aecb93 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,9 @@ 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 = result.getRoot() != null + ? flattenDependencyNodes(session, request.getRoot(), request.getFilter()) + : new ArrayList<>(); final List requests = dependencyNodes.stream() .map(n -> { @@ -303,11 +299,19 @@ public DependencyResult resolveDependencies(RepositorySystemSession session, Dep @Override public List flattenDependencyNodes(RepositorySystemSession session, DependencyNode root) { + return flattenDependencyNodes(session, root, null); + } + + @Override + public List flattenDependencyNodes( + RepositorySystemSession session, DependencyNode root, DependencyFilter filter) { validateSession(session); requireNonNull(root, "root cannot be null"); final ArrayList dependencyNodes = new ArrayList<>(); - root.accept(getDependencyVisitor(session, dependencyNodes::add)); + DependencyVisitor builder = getDependencyVisitor(session, dependencyNodes::add); + DependencyVisitor visitor = (filter != null) ? new FilteringDependencyVisitor(builder, filter) : builder; + root.accept(visitor); return dependencyNodes; }