in maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java [129:199]
protected abstract DependencyManager newInstance(
Map<Object, Holder<String>> managedVersions,
Map<Object, Holder<String>> managedScopes,
Map<Object, Holder<Boolean>> managedOptionals,
Map<Object, Holder<String>> managedLocalPaths,
Map<Object, Collection<Holder<Collection<Exclusion>>>> managedExclusions);
@Override
public DependencyManager deriveChildManager(DependencyCollectionContext context) {
requireNonNull(context, "context cannot be null");
if (!isDerived()) {
return this;
}
Map<Object, Holder<String>> managedVersions = this.managedVersions;
Map<Object, Holder<String>> managedScopes = this.managedScopes;
Map<Object, Holder<Boolean>> managedOptionals = this.managedOptionals;
Map<Object, Holder<String>> managedLocalPaths = this.managedLocalPaths;
Map<Object, Collection<Holder<Collection<Exclusion>>>> managedExclusions = this.managedExclusions;
for (Dependency managedDependency : context.getManagedDependencies()) {
Artifact artifact = managedDependency.getArtifact();
Object key = new Key(artifact);
String version = artifact.getVersion();
if (!version.isEmpty() && !managedVersions.containsKey(key)) {
if (managedVersions == this.managedVersions) {
managedVersions = new HashMap<>(this.managedVersions);
}
managedVersions.put(key, new Holder<>(depth, version));
}
String scope = managedDependency.getScope();
if (!scope.isEmpty() && !managedScopes.containsKey(key)) {
if (managedScopes == this.managedScopes) {
managedScopes = new HashMap<>(this.managedScopes);
}
managedScopes.put(key, new Holder<>(depth, scope));
}
Boolean optional = managedDependency.getOptional();
if (optional != null && !managedOptionals.containsKey(key)) {
if (managedOptionals == this.managedOptionals) {
managedOptionals = new HashMap<>(this.managedOptionals);
}
managedOptionals.put(key, new Holder<>(depth, optional));
}
String localPath = systemDependencyScope == null
? null
: systemDependencyScope.getSystemPath(managedDependency.getArtifact());
if (localPath != null && !managedLocalPaths.containsKey(key)) {
if (managedLocalPaths == this.managedLocalPaths) {
managedLocalPaths = new HashMap<>(this.managedLocalPaths);
}
managedLocalPaths.put(key, new Holder<>(depth, localPath));
}
Collection<Exclusion> exclusions = managedDependency.getExclusions();
if (!exclusions.isEmpty()) {
if (managedExclusions == this.managedExclusions) {
managedExclusions = new HashMap<>(this.managedExclusions);
}
Collection<Holder<Collection<Exclusion>>> managed =
managedExclusions.computeIfAbsent(key, k -> new ArrayList<>());
managed.add(new Holder<>(depth, exclusions));
}
}
return newInstance(managedVersions, managedScopes, managedOptionals, managedLocalPaths, managedExclusions);
}