diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java index 90bb3c1eb..ddba34f5d 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/AbstractDependencyManager.java @@ -185,7 +185,7 @@ public DependencyManager deriveChildManager(DependencyCollectionContext context) Collection exclusions = managedDependency.getExclusions(); if (!exclusions.isEmpty()) { if (managedExclusions == this.managedExclusions) { - managedExclusions = MMap.copy(this.managedExclusions); + managedExclusions = MMap.copyWithListValue(this.managedExclusions); } Collection>> managed = managedExclusions.get(key); if (managed == null) { diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/MMap.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/MMap.java index af7aa34cf..3b2825015 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/MMap.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/MMap.java @@ -18,7 +18,10 @@ */ package org.eclipse.aether.util.graph.manager; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Map; /** * Warning: this is a special map-like construct that suits only and should be used only in this package! @@ -47,6 +50,15 @@ public static MMap copy(MMap orig) { return new MMap<>(new HashMap<>(orig.delegate)); } + public static MMap> copyWithListValue(MMap> orig) { + HashMap> delegateLocal = orig.delegate; + HashMap> newMap = new HashMap<>((int) Math.ceil(delegateLocal.size() / 0.75D)); + for (Map.Entry> entry : delegateLocal.entrySet()) { + newMap.put(entry.getKey(), entry.getValue() == null ? null : new ArrayList<>(entry.getValue())); + } + return new MMap<>(newMap); + } + protected final HashMap delegate; private MMap(HashMap delegate) {