diff --git a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java index e9e8c6d3d2a48..fbae3d08f32e7 100644 --- a/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java +++ b/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/ApplicationDependencyTreeResolver.java @@ -27,6 +27,7 @@ import java.util.Deque; import java.util.HashMap; import java.util.HashSet; +import java.util.IdentityHashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -282,28 +283,23 @@ private DependencyNode resolveRuntimeDeps(CollectRequest request) throws AppMode @Override public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context) throws RepositoryException { - final Set visited = new HashSet<>(); + final Map visited = new IdentityHashMap<>(); for (DependencyNode c : node.getChildren()) { walk(c, visited); } return resolver.getSession().getDependencyGraphTransformer().transformGraph(node, context); } - private void walk(DependencyNode node, Set visited) { - if (node.getChildren().isEmpty()) { + private void walk(DependencyNode node, Map visited) { + if (visited.put(node, node) != null || node.getChildren().isEmpty()) { return; } final Set deps = artifactDeps .computeIfAbsent(DependencyUtils.getCoords(node.getArtifact()), k -> new HashSet<>(node.getChildren().size())); for (DependencyNode c : node.getChildren()) { - final ArtifactKey key = getKey(c.getArtifact()); - if (!visited.add(key)) { - continue; - } - deps.add(key); + deps.add(getKey(c.getArtifact())); walk(c, visited); - visited.remove(key); } } });