diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java index 86ddf413199..2d35ad4cc94 100644 --- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java +++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java @@ -27,7 +27,6 @@ import java.util.Set; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -275,22 +274,9 @@ public void close() { @SuppressWarnings({"unchecked", "rawtypes"}) private OwnerReentrantLock getProjectLock(MavenSession session) { SessionData data = session.getRepositorySession().getData(); - ConcurrentMap locks = (ConcurrentMap) data.get(ProjectLock.class); - // initialize the value if not already done (in case of a concurrent access) to the method - if (locks == null) { - // the call to data.set(k, null, v) is effectively a call to data.putIfAbsent(k, v) - data.set(ProjectLock.class, null, new ConcurrentHashMap<>()); - locks = (ConcurrentMap) data.get(ProjectLock.class); - } - OwnerReentrantLock acquiredProjectLock = locks.get(session.getCurrentProject()); - if (acquiredProjectLock == null) { - acquiredProjectLock = new OwnerReentrantLock(); - OwnerReentrantLock prev = locks.putIfAbsent(session.getCurrentProject(), acquiredProjectLock); - if (prev != null) { - acquiredProjectLock = prev; - } - } - return acquiredProjectLock; + Map locks = + (Map) data.computeIfAbsent(ProjectLock.class, ConcurrentHashMap::new); + return locks.computeIfAbsent(session.getCurrentProject(), p -> new OwnerReentrantLock()); } } diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java index 66090d1e56b..67adceb8075 100644 --- a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java +++ b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java @@ -91,8 +91,7 @@ public PluginVersionResult resolve(PluginVersionRequest request) throws PluginVe PluginVersionResult result = resolveFromProject(request); if (result == null) { - ConcurrentMap cache = - getCache(request.getRepositorySession().getData()); + ConcurrentMap cache = getCache(request); Key key = getKey(request); result = cache.get(key); @@ -347,16 +346,10 @@ private PluginVersionResult resolveFromProject(PluginVersionRequest request, Lis } @SuppressWarnings("unchecked") - private ConcurrentMap getCache(SessionData data) { - ConcurrentMap cache = (ConcurrentMap) data.get(CACHE_KEY); - while (cache == null) { - cache = new ConcurrentHashMap<>(256); - if (data.set(CACHE_KEY, null, cache)) { - break; - } - cache = (ConcurrentMap) data.get(CACHE_KEY); - } - return cache; + private ConcurrentMap getCache(PluginVersionRequest request) { + SessionData data = request.getRepositorySession().getData(); + return (ConcurrentMap) + data.computeIfAbsent(CACHE_KEY, () -> new ConcurrentHashMap<>(256)); } private static Key getKey(PluginVersionRequest request) {