Skip to content

Commit a492950

Browse files
authored
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
1 parent 0da733d commit a492950

File tree

3 files changed

+46
-8
lines changed

3 files changed

+46
-8
lines changed

maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/AbstractDependencyNodeConsumerVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public final boolean visitLeave(DependencyNode node) {
8181
protected abstract boolean doVisitLeave(DependencyNode node);
8282

8383
protected boolean acceptNode(DependencyNode node) {
84-
return filter.accept(node, path);
84+
return filter.accept(node, path.head());
8585
}
8686

8787
protected void consumeNode(DependencyNode node) {

maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/visitor/Stack.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
package org.eclipse.aether.util.graph.visitor;
2020

2121
import java.util.AbstractList;
22+
import java.util.Collections;
23+
import java.util.List;
2224
import java.util.NoSuchElementException;
2325
import java.util.RandomAccess;
2426

@@ -69,4 +71,15 @@ public E get(int index) {
6971
public int size() {
7072
return size;
7173
}
74+
75+
/**
76+
* Returns a view as list sans top element.
77+
*/
78+
public List<E> head() {
79+
if (size < 2) {
80+
return Collections.emptyList();
81+
} else {
82+
return subList(0, size - 1);
83+
}
84+
}
7285
}

maven-resolver-util/src/test/java/org/eclipse/aether/util/graph/visitor/NodeListGeneratorTest.java

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.eclipse.aether.util.graph.visitor;
2020

2121
import java.io.File;
22+
import java.nio.file.Path;
2223
import java.util.Arrays;
2324
import java.util.HashSet;
2425
import java.util.List;
@@ -104,6 +105,30 @@ void testLevelOrder() throws Exception {
104105
assertSequence(nodeListGenerator.getNodes(), "a", "b", "d", "c", "e");
105106
}
106107

108+
@Test
109+
void testLevelOrderWithFilterDirect() throws Exception {
110+
DependencyNode root = parse("simple.txt");
111+
112+
NodeListGenerator nodeListGenerator = new NodeListGenerator();
113+
LevelOrderDependencyNodeConsumerVisitor visitor =
114+
new LevelOrderDependencyNodeConsumerVisitor(nodeListGenerator, (n, p) -> p.size() <= 1);
115+
root.accept(visitor);
116+
117+
assertSequence(nodeListGenerator.getNodes(), "a", "b", "d");
118+
}
119+
120+
@Test
121+
void testLevelOrderWithFilterIndirect() throws Exception {
122+
DependencyNode root = parse("simple.txt");
123+
124+
NodeListGenerator nodeListGenerator = new NodeListGenerator();
125+
LevelOrderDependencyNodeConsumerVisitor visitor =
126+
new LevelOrderDependencyNodeConsumerVisitor(nodeListGenerator, (n, p) -> p.size() <= 2);
127+
root.accept(visitor);
128+
129+
assertSequence(nodeListGenerator.getNodes(), "a", "b", "d", "c", "e");
130+
}
131+
107132
@Test
108133
void testLevelOrderDuplicateSuppression() throws Exception {
109134
DependencyNode root = parse("cycles.txt");
@@ -130,7 +155,7 @@ void testEmptyResolvedClassPath() throws Exception {
130155
assertEquals(5, nodeListGenerator.getDependencies(true).size());
131156
assertEquals(0, nodeListGenerator.getArtifacts(false).size());
132157
assertEquals(5, nodeListGenerator.getArtifacts(true).size());
133-
assertEquals(0, nodeListGenerator.getFiles().size());
158+
assertEquals(0, nodeListGenerator.getPaths().size());
134159
assertEquals("", nodeListGenerator.getClassPath());
135160
}
136161

@@ -141,7 +166,7 @@ void testFullyResolvedClassPath() throws Exception {
141166
@Override
142167
public boolean visitEnter(DependencyNode node) {
143168
node.setArtifact(node.getArtifact()
144-
.setFile(new File(node.getDependency().getArtifact().getArtifactId())));
169+
.setPath(new File(node.getDependency().getArtifact().getArtifactId()).toPath()));
145170
return true;
146171
}
147172

@@ -158,9 +183,9 @@ public boolean visitLeave(DependencyNode node) {
158183
root.accept(visitor);
159184

160185
Set<String> fileNames = nodeListGenerator.getNodes().stream()
161-
.map(n -> n.getArtifact().getFile())
186+
.map(n -> n.getArtifact().getPath())
162187
.filter(Objects::nonNull)
163-
.map(File::getName)
188+
.map(Path::toString)
164189
.collect(Collectors.toSet());
165190
String classPath = nodeListGenerator.getClassPath();
166191
String[] splitClassPath = classPath.split(File.pathSeparator);
@@ -172,7 +197,7 @@ public boolean visitLeave(DependencyNode node) {
172197
assertEquals(5, nodeListGenerator.getDependencies(true).size());
173198
assertEquals(5, nodeListGenerator.getArtifacts(false).size());
174199
assertEquals(5, nodeListGenerator.getArtifacts(true).size());
175-
assertEquals(5, nodeListGenerator.getFiles().size());
200+
assertEquals(5, nodeListGenerator.getPaths().size());
176201
assertEquals(fileNames, classPathNames);
177202
}
178203

@@ -188,7 +213,7 @@ public boolean visitEnter(DependencyNode node) {
188213
if (alternator.get()) {
189214
String fileName = node.getDependency().getArtifact().getArtifactId();
190215
fileNames.add(fileName);
191-
node.setArtifact(node.getArtifact().setFile(new File(fileName)));
216+
node.setArtifact(node.getArtifact().setPath(new File(fileName).toPath()));
192217
}
193218
return true;
194219
}
@@ -215,7 +240,7 @@ public boolean visitLeave(DependencyNode node) {
215240
assertEquals(5, nodeListGenerator.getDependencies(true).size());
216241
assertEquals(3, nodeListGenerator.getArtifacts(false).size());
217242
assertEquals(5, nodeListGenerator.getArtifacts(true).size());
218-
assertEquals(3, nodeListGenerator.getFiles().size());
243+
assertEquals(3, nodeListGenerator.getPaths().size());
219244
assertEquals(fileNames, classPathNames);
220245
}
221246

0 commit comments

Comments
 (0)