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 ba049975d7d9..52b9bcff4ee1 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 @@ -274,16 +274,8 @@ public void close() { @SuppressWarnings({"unchecked", "rawtypes"}) private OwnerReentrantLock getProjectLock(MavenSession session) { SessionData data = session.getRepositorySession().getData(); - // TODO: when resolver 1.7.3 is released, the code below should be changed to - // TODO: Map locks = ( Map ) ((Map) data).computeIfAbsent( - // TODO: ProjectLock.class, l -> new ConcurrentHashMap<>() ); - Map locks = (Map) 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 = (Map) data.get(ProjectLock.class); - } + 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 2b645bbb0919..c00f6337b688 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 @@ -100,8 +100,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); @@ -354,16 +353,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) {