diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/AbstractDependencyNodeConsumerVisitor.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/AbstractDependencyNodeConsumerVisitor.java index e40d89684..3a26e892c 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/AbstractDependencyNodeConsumerVisitor.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/AbstractDependencyNodeConsumerVisitor.java @@ -81,7 +81,7 @@ public final boolean visitLeave(DependencyNode node) { protected abstract boolean doVisitLeave(DependencyNode node); protected boolean acceptNode(DependencyNode node) { - return filter.accept(node, path); + return filter.accept(node, path.head()); } protected void consumeNode(DependencyNode node) { diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/Stack.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/Stack.java index 26f86a9c8..e428d8d0c 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/Stack.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/Stack.java @@ -19,6 +19,8 @@ package org.eclipse.aether.util.graph.visitor; import java.util.AbstractList; +import java.util.Collections; +import java.util.List; import java.util.NoSuchElementException; import java.util.RandomAccess; @@ -69,4 +71,15 @@ public E get(int index) { public int size() { return size; } + + /** + * Returns a view as list sans top element. + */ + public List head() { + if (size < 2) { + return Collections.emptyList(); + } else { + return subList(0, size - 1); + } + } } diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/visitor/NodeListGeneratorTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/visitor/NodeListGeneratorTest.java index a65b9bf03..3493562e4 100644 --- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/visitor/NodeListGeneratorTest.java +++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/visitor/NodeListGeneratorTest.java @@ -19,6 +19,7 @@ package org.eclipse.aether.util.graph.visitor; import java.io.File; +import java.nio.file.Path; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -104,6 +105,30 @@ void testLevelOrder() throws Exception { assertSequence(nodeListGenerator.getNodes(), "a", "b", "d", "c", "e"); } + @Test + void testLevelOrderWithFilterDirect() throws Exception { + DependencyNode root = parse("simple.txt"); + + NodeListGenerator nodeListGenerator = new NodeListGenerator(); + LevelOrderDependencyNodeConsumerVisitor visitor = + new LevelOrderDependencyNodeConsumerVisitor(nodeListGenerator, (n, p) -> p.size() <= 1); + root.accept(visitor); + + assertSequence(nodeListGenerator.getNodes(), "a", "b", "d"); + } + + @Test + void testLevelOrderWithFilterIndirect() throws Exception { + DependencyNode root = parse("simple.txt"); + + NodeListGenerator nodeListGenerator = new NodeListGenerator(); + LevelOrderDependencyNodeConsumerVisitor visitor = + new LevelOrderDependencyNodeConsumerVisitor(nodeListGenerator, (n, p) -> p.size() <= 2); + root.accept(visitor); + + assertSequence(nodeListGenerator.getNodes(), "a", "b", "d", "c", "e"); + } + @Test void testLevelOrderDuplicateSuppression() throws Exception { DependencyNode root = parse("cycles.txt"); @@ -130,7 +155,7 @@ void testEmptyResolvedClassPath() throws Exception { assertEquals(5, nodeListGenerator.getDependencies(true).size()); assertEquals(0, nodeListGenerator.getArtifacts(false).size()); assertEquals(5, nodeListGenerator.getArtifacts(true).size()); - assertEquals(0, nodeListGenerator.getFiles().size()); + assertEquals(0, nodeListGenerator.getPaths().size()); assertEquals("", nodeListGenerator.getClassPath()); } @@ -141,7 +166,7 @@ void testFullyResolvedClassPath() throws Exception { @Override public boolean visitEnter(DependencyNode node) { node.setArtifact(node.getArtifact() - .setFile(new File(node.getDependency().getArtifact().getArtifactId()))); + .setPath(new File(node.getDependency().getArtifact().getArtifactId()).toPath())); return true; } @@ -158,9 +183,9 @@ public boolean visitLeave(DependencyNode node) { root.accept(visitor); Set fileNames = nodeListGenerator.getNodes().stream() - .map(n -> n.getArtifact().getFile()) + .map(n -> n.getArtifact().getPath()) .filter(Objects::nonNull) - .map(File::getName) + .map(Path::toString) .collect(Collectors.toSet()); String classPath = nodeListGenerator.getClassPath(); String[] splitClassPath = classPath.split(File.pathSeparator); @@ -172,7 +197,7 @@ public boolean visitLeave(DependencyNode node) { assertEquals(5, nodeListGenerator.getDependencies(true).size()); assertEquals(5, nodeListGenerator.getArtifacts(false).size()); assertEquals(5, nodeListGenerator.getArtifacts(true).size()); - assertEquals(5, nodeListGenerator.getFiles().size()); + assertEquals(5, nodeListGenerator.getPaths().size()); assertEquals(fileNames, classPathNames); } @@ -188,7 +213,7 @@ public boolean visitEnter(DependencyNode node) { if (alternator.get()) { String fileName = node.getDependency().getArtifact().getArtifactId(); fileNames.add(fileName); - node.setArtifact(node.getArtifact().setFile(new File(fileName))); + node.setArtifact(node.getArtifact().setPath(new File(fileName).toPath())); } return true; } @@ -215,7 +240,7 @@ public boolean visitLeave(DependencyNode node) { assertEquals(5, nodeListGenerator.getDependencies(true).size()); assertEquals(3, nodeListGenerator.getArtifacts(false).size()); assertEquals(5, nodeListGenerator.getArtifacts(true).size()); - assertEquals(3, nodeListGenerator.getFiles().size()); + assertEquals(3, nodeListGenerator.getPaths().size()); assertEquals(fileNames, classPathNames); }