in maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/bf/BfDependencyCollector.java [346:416]
private void doRecurse(
Args args,
DependencyProcessingContext parentContext,
ArtifactDescriptorResult descriptorResult,
DefaultDependencyNode child,
Results results,
boolean disableVersionManagement) {
DefaultDependencyCollectionContext context = args.collectionContext.get();
args.collectionContext.compareAndSet(
context, context.set(parentContext.dependency, descriptorResult.getManagedDependencies()));
context = args.collectionContext.get();
DependencySelector childSelector =
parentContext.depSelector != null ? parentContext.depSelector.deriveChildSelector(context) : null;
DependencyManager childManager =
parentContext.depManager != null ? parentContext.depManager.deriveChildManager(context) : null;
DependencyTraverser childTraverser =
parentContext.depTraverser != null ? parentContext.depTraverser.deriveChildTraverser(context) : null;
VersionFilter childFilter =
parentContext.verFilter != null ? parentContext.verFilter.deriveChildFilter(context) : null;
final List<RemoteRepository> childRepos = args.ignoreRepos
? parentContext.repositories
: remoteRepositoryManager.aggregateRepositories(
args.session, parentContext.repositories, descriptorResult.getRepositories(), true);
Object key = args.pool.toKey(
parentContext.dependency.getArtifact(),
childRepos,
childSelector,
childManager,
childTraverser,
childFilter);
List<DependencyNode> children = args.pool.getChildren(key);
if (children == null) {
boolean skipResolution = args.skipper.skipResolution(child, parentContext.parents);
if (!skipResolution) {
List<DependencyNode> parents = new ArrayList<>(parentContext.parents.size() + 1);
parents.addAll(parentContext.parents);
parents.add(child);
for (Dependency dependency : descriptorResult.getDependencies()) {
RequestTrace childTrace = collectStepTrace(
parentContext.trace, args.request.getRequestContext(), parents, dependency);
PremanagedDependency premanagedDependency = PremanagedDependency.create(
childManager, dependency, disableVersionManagement, args.premanagedState);
DependencyProcessingContext processingContext = new DependencyProcessingContext(
childSelector,
childManager,
childTraverser,
childFilter,
childTrace,
childRepos,
descriptorResult.getManagedDependencies(),
parents,
dependency,
premanagedDependency);
if (!filter(processingContext)) {
// resolve descriptors ahead for managed dependency
processingContext.withDependency(processingContext.premanagedDependency.getManagedDependency());
resolveArtifactDescriptorAsync(args, processingContext, results);
args.dependencyProcessingQueue.add(processingContext);
}
}
args.pool.putChildren(key, child.getChildren());
args.skipper.cache(child, parents);
}
} else {
child.setChildren(children);
}
}