This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git


The following commit(s) were added to refs/heads/master by this push:
     new a4929501f GH-1646 bugfix for filter support in ADNC (#1647)
a4929501f is described below

commit a4929501fd57398b2b2b61fa2ef7c1e7416e0b08
Author: Tamas Cservenak <[email protected]>
AuthorDate: Tue Nov 4 19:50:42 2025 +0100

    GH-1646 bugfix for filter support in ADNC (#1647)
    
    The path contained current node, violating the DependencyFilter
    contract that expected parents only of current node.
    
    Fixes #1646
---
 .../AbstractDependencyNodeConsumerVisitor.java     |  2 +-
 .../eclipse/aether/util/graph/visitor/Stack.java   | 13 ++++++++
 .../util/graph/visitor/NodeListGeneratorTest.java  | 39 ++++++++++++++++++----
 3 files changed, 46 insertions(+), 8 deletions(-)

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 @@ abstract class AbstractDependencyNodeConsumerVisitor 
implements DependencyVisito
     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 @@ class Stack<E> extends AbstractList<E> implements 
RandomAccess {
     public int size() {
         return size;
     }
+
+    /**
+     * Returns a view as list sans top element.
+     */
+    public List<E> 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 @@ public class NodeListGeneratorTest {
         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 @@ public class NodeListGeneratorTest {
         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 @@ public class NodeListGeneratorTest {
             @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 class NodeListGeneratorTest {
         root.accept(visitor);
 
         Set<String> 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 class NodeListGeneratorTest {
         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 class NodeListGeneratorTest {
                 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 class NodeListGeneratorTest {
         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);
     }
 

Reply via email to