in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/df/DfDependencyCollector.java [314:364]
private void doRecurse(
Args args,
RequestTrace trace,
Results results,
List<RemoteRepository> repositories,
DependencySelector depSelector,
DependencyManager depManager,
DependencyTraverser depTraverser,
VersionFilter verFilter,
Dependency d,
ArtifactDescriptorResult descriptorResult,
DefaultDependencyNode child) {
DefaultDependencyCollectionContext context = args.collectionContext.get();
args.collectionContext.compareAndSet(context, context.set(d, descriptorResult.getManagedDependencies()));
context = args.collectionContext.get();
DependencySelector childSelector = depSelector != null ? depSelector.deriveChildSelector(context) : null;
DependencyManager childManager = depManager != null ? depManager.deriveChildManager(context) : null;
DependencyTraverser childTraverser = depTraverser != null ? depTraverser.deriveChildTraverser(context) : null;
VersionFilter childFilter = verFilter != null ? verFilter.deriveChildFilter(context) : null;
final List<RemoteRepository> childRepos = args.ignoreRepos
? repositories
: remoteRepositoryManager.aggregateRepositories(
args.session, repositories, descriptorResult.getRepositories(), true);
Object key =
args.pool.toKey(d.getArtifact(), childRepos, childSelector, childManager, childTraverser, childFilter);
List<DependencyNode> children = args.pool.getChildren(key);
if (children == null) {
args.pool.putChildren(key, child.getChildren());
args.nodes.push(child);
process(
args,
trace,
results,
descriptorResult.getDependencies(),
childRepos,
childSelector,
childManager,
childTraverser,
childFilter);
args.nodes.pop();
} else {
child.setChildren(children);
}
}