This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 2cccc0a476 [MNG-7966] Augment api to provide a Map<Dependency, Path> 
in the resolution result (#1343)
2cccc0a476 is described below

commit 2cccc0a476d98123140e6265d8bd5cc36ccfe414
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Dec 15 07:34:19 2023 +0100

    [MNG-7966] Augment api to provide a Map<Dependency, Path> in the resolution 
result (#1343)
---
 .../api/services/DependencyResolverResult.java     |  7 +-
 .../internal/impl/DefaultArtifactDeployer.java     | 10 +--
 .../internal/impl/DefaultArtifactResolver.java     | 12 +--
 .../internal/impl/DefaultDependencyCollector.java  | 12 +--
 .../internal/impl/DefaultDependencyResolver.java   | 91 +++++++++++++---------
 .../internal/LifecycleDependencyResolver.java      | 22 +++++-
 .../internal/SetWithResolutionResult.java          | 54 +++++++++++++
 .../artifact/DefaultProjectArtifactsCache.java     | 35 ++++-----
 .../project/artifact/ProjectArtifactsCache.java    | 21 +++--
 .../artifact/DefaultProjectArtifactsCacheTest.java |  5 +-
 10 files changed, 172 insertions(+), 97 deletions(-)

diff --git 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
index 4ca074dfbf..7932438500 100644
--- 
a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
+++ 
b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverResult.java
@@ -20,7 +20,9 @@ package org.apache.maven.api.services;
 
 import java.nio.file.Path;
 import java.util.List;
+import java.util.Map;
 
+import org.apache.maven.api.Dependency;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
@@ -32,8 +34,11 @@ public interface DependencyResolverResult extends 
DependencyCollectorResult {
      * The ordered list of the flattened dependency nodes.
      */
     @Nonnull
-    List<Node> getDependencies();
+    List<Node> getNodes();
 
     @Nonnull
     List<Path> getPaths();
+
+    @Nonnull
+    Map<Dependency, Path> getDependencies();
 }
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
index 62d02f0cf2..d9f6dec6e3 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactDeployer.java
@@ -18,7 +18,6 @@
  */
 package org.apache.maven.internal.impl;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -30,7 +29,6 @@ import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.services.ArtifactDeployer;
 import org.apache.maven.api.services.ArtifactDeployerException;
 import org.apache.maven.api.services.ArtifactDeployerRequest;
-import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.deployment.DeployRequest;
 import org.eclipse.aether.deployment.DeployResult;
 import org.eclipse.aether.deployment.DeploymentException;
@@ -43,12 +41,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 @Named
 @Singleton
 public class DefaultArtifactDeployer implements ArtifactDeployer {
-    private final @Nonnull RepositorySystem repositorySystem;
-
-    @Inject
-    DefaultArtifactDeployer(@Nonnull RepositorySystem repositorySystem) {
-        this.repositorySystem = nonNull(repositorySystem, "repositorySystem");
-    }
 
     @Override
     public void deploy(@Nonnull ArtifactDeployerRequest request) {
@@ -61,7 +53,7 @@ public class DefaultArtifactDeployer implements 
ArtifactDeployer {
                     .setRepository(session.toRepository(repository))
                     .setArtifacts(session.toArtifacts(artifacts));
 
-            DeployResult result = 
repositorySystem.deploy(session.getSession(), deployRequest);
+            DeployResult result = 
session.getRepositorySystem().deploy(session.getSession(), deployRequest);
         } catch (DeploymentException e) {
             throw new ArtifactDeployerException("Unable to deploy artifacts", 
e);
         }
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
index 0e9f723fab..4eb78b49a9 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
@@ -18,7 +18,6 @@
  */
 package org.apache.maven.internal.impl;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -30,13 +29,11 @@ import java.util.Map;
 
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.ArtifactCoordinate;
-import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.services.ArtifactManager;
 import org.apache.maven.api.services.ArtifactResolver;
 import org.apache.maven.api.services.ArtifactResolverException;
 import org.apache.maven.api.services.ArtifactResolverRequest;
 import org.apache.maven.api.services.ArtifactResolverResult;
-import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.resolution.ArtifactRequest;
 import org.eclipse.aether.resolution.ArtifactResolutionException;
@@ -47,12 +44,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 @Named
 @Singleton
 public class DefaultArtifactResolver implements ArtifactResolver {
-    private final RepositorySystem repositorySystem;
-
-    @Inject
-    DefaultArtifactResolver(@Nonnull RepositorySystem repositorySystem) {
-        this.repositorySystem = nonNull(repositorySystem, "repositorySystem");
-    }
 
     @Override
     public ArtifactResolverResult resolve(ArtifactResolverRequest request)
@@ -75,7 +66,8 @@ public class DefaultArtifactResolver implements 
ArtifactResolver {
                 }
             }
             if (!requests.isEmpty()) {
-                List<ArtifactResult> results = 
repositorySystem.resolveArtifacts(session.getSession(), requests);
+                List<ArtifactResult> results =
+                        
session.getRepositorySystem().resolveArtifacts(session.getSession(), requests);
                 for (ArtifactResult result : results) {
                     Artifact artifact = 
session.getArtifact(result.getArtifact());
                     Path path = result.getArtifact().getFile().toPath();
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
index f3d2d5ff98..49b5dc4bde 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCollector.java
@@ -18,7 +18,6 @@
  */
 package org.apache.maven.internal.impl;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -31,7 +30,6 @@ import 
org.apache.maven.api.services.DependencyCollectorException;
 import org.apache.maven.api.services.DependencyCollectorRequest;
 import org.apache.maven.api.services.DependencyCollectorResult;
 import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.collection.CollectRequest;
@@ -47,13 +45,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 @Singleton
 public class DefaultDependencyCollector implements DependencyCollector {
 
-    private final RepositorySystem repositorySystem;
-
-    @Inject
-    DefaultDependencyCollector(@Nonnull RepositorySystem repositorySystem) {
-        this.repositorySystem = repositorySystem;
-    }
-
     @Nonnull
     @Override
     public DependencyCollectorResult collect(@Nonnull 
DependencyCollectorRequest request)
@@ -79,7 +70,8 @@ public class DefaultDependencyCollector implements 
DependencyCollector {
         }
 
         try {
-            final CollectResult result = 
repositorySystem.collectDependencies(systemSession, collectRequest);
+            final CollectResult result =
+                    
session.getRepositorySystem().collectDependencies(systemSession, 
collectRequest);
             return new DependencyCollectorResult() {
                 @Override
                 public List<Exception> getExceptions() {
diff --git 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
index bd6880d3d2..957f3d5cd2 100644
--- 
a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
@@ -18,7 +18,6 @@
  */
 package org.apache.maven.internal.impl;
 
-import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -26,15 +25,17 @@ import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
-import org.apache.maven.RepositoryUtils;
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.Dependency;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.Project;
 import org.apache.maven.api.ResolutionScope;
@@ -43,8 +44,8 @@ import org.apache.maven.api.Session;
 import org.apache.maven.api.services.*;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver;
+import org.apache.maven.project.DependencyResolutionResult;
 import org.apache.maven.project.MavenProject;
-import org.eclipse.aether.graph.Dependency;
 import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.graph.DependencyNode;
 import org.eclipse.aether.graph.DependencyVisitor;
@@ -59,9 +60,6 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 @Singleton
 public class DefaultDependencyResolver implements DependencyResolver {
 
-    @Inject
-    public DefaultDependencyResolver() {}
-
     @Override
     public List<Node> flatten(Session s, Node node, ResolutionScope scope) 
throws DependencyResolverException {
         InternalSession session = InternalSession.from(s);
@@ -81,7 +79,7 @@ public class DefaultDependencyResolver implements 
DependencyResolver {
     private static DependencyFilter getScopeDependencyFilter(ResolutionScope 
scope) {
         Set<String> scopes = 
scope.scopes().stream().map(Scope::id).collect(Collectors.toSet());
         return (n, p) -> {
-            Dependency d = n.getDependency();
+            org.eclipse.aether.graph.Dependency d = n.getDependency();
             return d == null || scopes.contains(d.getScope());
         };
     }
@@ -93,51 +91,59 @@ public class DefaultDependencyResolver implements 
DependencyResolver {
         InternalSession session = InternalSession.from(request.getSession());
 
         if (request.getProject().isPresent()) {
-            List<Artifact> artifacts = resolveDependencies(
+            DependencyResolutionResult result = resolveDependencies(
                     request.getSession(), request.getProject().get(), 
request.getResolutionScope());
-            List<Path> paths = artifacts.stream()
-                    .map(a -> request.getSession()
-                            .getService(ArtifactManager.class)
-                            .getPath(a)
-                            .get())
-                    .collect(Collectors.toList());
-            return new 
DefaultDependencyResolverResult(Collections.emptyList(), null, 
Collections.emptyList(), paths);
+
+            Map<org.eclipse.aether.graph.Dependency, 
org.eclipse.aether.graph.DependencyNode> nodes = stream(
+                            result.getDependencyGraph())
+                    .filter(n -> n.getDependency() != null)
+                    .collect(Collectors.toMap(DependencyNode::getDependency, n 
-> n));
+
+            Node root = session.getNode(result.getDependencyGraph());
+            List<Node> dependencies = new ArrayList<>();
+            Map<Dependency, Path> artifacts = new LinkedHashMap<>();
+            List<Path> paths = new ArrayList<>();
+            for (org.eclipse.aether.graph.Dependency dep : 
result.getResolvedDependencies()) {
+                dependencies.add(session.getNode(nodes.get(dep)));
+                Path path = dep.getArtifact().getFile().toPath();
+                artifacts.put(session.getDependency(dep), path);
+                paths.add(path);
+            }
+            return new DefaultDependencyResolverResult(
+                    result.getCollectionErrors(), root, dependencies, paths, 
artifacts);
         }
 
         DependencyCollectorResult collectorResult =
                 session.getService(DependencyCollector.class).collect(request);
-        List<Node> dependencies = flatten(session, collectorResult.getRoot(), 
request.getResolutionScope());
-
-        List<ArtifactCoordinate> coordinates = dependencies.stream()
-                .map(Node::getDependency)
-                .filter(Objects::nonNull)
-                .map(Artifact::toCoordinate)
-                .collect(Collectors.toList());
+        List<Node> nodes = flatten(session, collectorResult.getRoot(), 
request.getResolutionScope());
+        List<Dependency> deps =
+                
nodes.stream().map(Node::getDependency).filter(Objects::nonNull).collect(Collectors.toList());
+        List<ArtifactCoordinate> coordinates =
+                
deps.stream().map(Artifact::toCoordinate).collect(Collectors.toList());
         Map<Artifact, Path> artifacts = session.resolveArtifacts(coordinates);
-        List<Path> paths = dependencies.stream()
-                .map(Node::getDependency)
-                .filter(Objects::nonNull)
-                .map(artifacts::get)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
+        Map<Dependency, Path> dependencies = 
deps.stream().collect(Collectors.toMap(d -> d, artifacts::get));
+        List<Path> paths = new ArrayList<>(dependencies.values());
 
         return new DefaultDependencyResolverResult(
-                collectorResult.getExceptions(), collectorResult.getRoot(), 
dependencies, paths);
+                collectorResult.getExceptions(), collectorResult.getRoot(), 
nodes, paths, dependencies);
     }
 
-    private List<Artifact> resolveDependencies(Session session, Project 
project, ResolutionScope scope) {
+    private Stream<DependencyNode> stream(DependencyNode node) {
+        return Stream.concat(Stream.of(node), 
node.getChildren().stream().flatMap(this::stream));
+    }
+
+    private DependencyResolutionResult resolveDependencies(Session session, 
Project project, ResolutionScope scope) {
         Collection<String> toResolve = toScopes(scope);
         try {
             LifecycleDependencyResolver lifecycleDependencyResolver =
                     
session.getService(Lookup.class).lookup(LifecycleDependencyResolver.class);
-            Set<org.apache.maven.artifact.Artifact> artifacts = 
lifecycleDependencyResolver.resolveProjectArtifacts(
+            return 
lifecycleDependencyResolver.getProjectDependencyResolutionResult(
                     getMavenProject(project),
                     toResolve,
                     toResolve,
                     InternalSession.from(session).getMavenSession(),
                     false,
                     Collections.emptySet());
-            return map(artifacts, a -> 
InternalSession.from(session).getArtifact(RepositoryUtils.toArtifact(a)));
         } catch (LifecycleExecutionException e) {
             throw new DependencyResolverException("Unable to resolve project 
dependencies", e);
         }
@@ -154,15 +160,21 @@ public class DefaultDependencyResolver implements 
DependencyResolver {
     static class DefaultDependencyResolverResult implements 
DependencyResolverResult {
         private final List<Exception> exceptions;
         private final Node root;
-        private final List<Node> dependencies;
+        private final List<Node> nodes;
         private final List<Path> paths;
+        private final Map<Dependency, Path> dependencies;
 
         DefaultDependencyResolverResult(
-                List<Exception> exceptions, Node root, List<Node> 
dependencies, List<Path> paths) {
+                List<Exception> exceptions,
+                Node root,
+                List<Node> nodes,
+                List<Path> paths,
+                Map<Dependency, Path> dependencies) {
             this.exceptions = exceptions;
             this.root = root;
-            this.dependencies = dependencies;
+            this.nodes = nodes;
             this.paths = paths;
+            this.dependencies = dependencies;
         }
 
         @Override
@@ -176,13 +188,18 @@ public class DefaultDependencyResolver implements 
DependencyResolver {
         }
 
         @Override
-        public List<Node> getDependencies() {
-            return dependencies;
+        public List<Node> getNodes() {
+            return nodes;
         }
 
         @Override
         public List<Path> getPaths() {
             return paths;
         }
+
+        @Override
+        public Map<Dependency, Path> getDependencies() {
+            return dependencies;
+        }
     }
 }
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
index bd5fc4626b..bc571ea74a 100644
--- 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -169,6 +169,24 @@ public class LifecycleDependencyResolver {
         }
     }
 
+    public DependencyResolutionResult getProjectDependencyResolutionResult(
+            MavenProject project,
+            Collection<String> scopesToCollect,
+            Collection<String> scopesToResolve,
+            MavenSession session,
+            boolean aggregating,
+            Set<Artifact> projectArtifacts)
+            throws LifecycleExecutionException {
+
+        Set<Artifact> resolvedArtifacts = resolveProjectArtifacts(
+                project, scopesToCollect, scopesToResolve, session, 
aggregating, projectArtifacts);
+        if (resolvedArtifacts instanceof 
ProjectArtifactsCache.ArtifactsSetWithResult) {
+            return ((ProjectArtifactsCache.ArtifactsSetWithResult) 
resolvedArtifacts).getResult();
+        } else {
+            throw new IllegalStateException();
+        }
+    }
+
     public Set<Artifact> resolveProjectArtifacts(
             MavenProject project,
             Collection<String> scopesToCollect,
@@ -216,7 +234,7 @@ public class LifecycleDependencyResolver {
         }
 
         if (scopesToCollect.isEmpty() && scopesToResolve.isEmpty()) {
-            return new LinkedHashSet<>();
+            return new SetWithResolutionResult(null, new LinkedHashSet<>());
         }
 
         scopesToCollect = new HashSet<>(scopesToCollect);
@@ -270,7 +288,7 @@ public class LifecycleDependencyResolver {
                     Collections.singletonList(project.getArtifact().getId()),
                     collectionFilter);
         }
-        return artifacts;
+        return new SetWithResolutionResult(result, artifacts);
     }
 
     private boolean areAllDependenciesInReactor(
diff --git 
a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
new file mode 100644
index 0000000000..872d632838
--- /dev/null
+++ 
b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/SetWithResolutionResult.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.lifecycle.internal;
+
+import java.util.AbstractSet;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.project.DependencyResolutionResult;
+import org.apache.maven.project.artifact.ProjectArtifactsCache;
+
+public class SetWithResolutionResult extends AbstractSet<Artifact>
+        implements ProjectArtifactsCache.ArtifactsSetWithResult {
+    final DependencyResolutionResult result;
+    final Set<Artifact> artifacts;
+
+    public SetWithResolutionResult(DependencyResolutionResult result, 
Set<Artifact> artifacts) {
+        this.result = result;
+        this.artifacts = Collections.unmodifiableSet(artifacts);
+    }
+
+    @Override
+    public Iterator<Artifact> iterator() {
+        return artifacts.iterator();
+    }
+
+    @Override
+    public int size() {
+        return artifacts.size();
+    }
+
+    @Override
+    public DependencyResolutionResult getResult() {
+        return result;
+    }
+}
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
 
b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
index 7cce250c3b..c7842452c1 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCache.java
@@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.lifecycle.internal.SetWithResolutionResult;
 import org.apache.maven.project.MavenProject;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.LocalRepository;
@@ -140,13 +141,10 @@ public class DefaultProjectArtifactsCache implements 
ProjectArtifactsCache {
             if (o == this) {
                 return true;
             }
-
             if (!(o instanceof CacheKey)) {
                 return false;
             }
-
             CacheKey that = (CacheKey) o;
-
             return Objects.equals(groupId, that.groupId)
                     && Objects.equals(artifactId, that.artifactId)
                     && Objects.equals(version, that.version)
@@ -181,46 +179,47 @@ public class DefaultProjectArtifactsCache implements 
ProjectArtifactsCache {
     @Override
     public CacheRecord get(Key key) throws LifecycleExecutionException {
         CacheRecord cacheRecord = cache.get(key);
-
         if (cacheRecord != null && cacheRecord.getException() != null) {
             throw cacheRecord.getException();
         }
-
         return cacheRecord;
     }
 
     @Override
     public CacheRecord put(Key key, Set<Artifact> projectArtifacts) {
         Objects.requireNonNull(projectArtifacts, "projectArtifacts cannot be 
null");
-
         assertUniqueKey(key);
 
-        CacheRecord record = new CacheRecord(Collections.unmodifiableSet(new 
LinkedHashSet<>(projectArtifacts)));
+        SetWithResolutionResult artifacts;
+        if (projectArtifacts instanceof SetWithResolutionResult) {
+            artifacts = (SetWithResolutionResult) projectArtifacts;
+        } else if (projectArtifacts instanceof ArtifactsSetWithResult) {
+            artifacts = new SetWithResolutionResult(
+                    ((ArtifactsSetWithResult) projectArtifacts).getResult(), 
projectArtifacts);
+        } else {
+            throw new IllegalArgumentException("projectArtifacts must 
implement ArtifactsSetWithResult");
+        }
 
+        CacheRecord record = new CacheRecord(artifacts);
         cache.put(key, record);
-
         return record;
     }
 
-    protected void assertUniqueKey(Key key) {
-        if (cache.containsKey(key)) {
-            throw new IllegalStateException("Duplicate artifact resolution 
result for project " + key);
-        }
-    }
-
     @Override
     public CacheRecord put(Key key, LifecycleExecutionException exception) {
         Objects.requireNonNull(exception, "exception cannot be null");
-
         assertUniqueKey(key);
-
         CacheRecord record = new CacheRecord(exception);
-
         cache.put(key, record);
-
         return record;
     }
 
+    protected void assertUniqueKey(Key key) {
+        if (cache.containsKey(key)) {
+            throw new IllegalStateException("Duplicate artifact resolution 
result for project " + key);
+        }
+    }
+
     @Override
     public void flush() {
         cache.clear();
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
 
b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
index c51b38324b..6677b39cdc 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactsCache.java
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
+import org.apache.maven.project.DependencyResolutionResult;
 import org.apache.maven.project.MavenProject;
 import org.eclipse.aether.RepositorySystemSession;
 
@@ -41,21 +42,17 @@ public interface ProjectArtifactsCache {
         // marker interface for cache keys
     }
 
+    interface ArtifactsSetWithResult extends Set<Artifact> {
+        DependencyResolutionResult getResult();
+    }
+
     /**
      * CacheRecord
      */
     class CacheRecord {
 
-        public Set<Artifact> getArtifacts() {
-            return artifacts;
-        }
-
         private final Set<Artifact> artifacts;
 
-        public LifecycleExecutionException getException() {
-            return exception;
-        }
-
         private final LifecycleExecutionException exception;
 
         CacheRecord(Set<Artifact> artifacts) {
@@ -67,6 +64,14 @@ public interface ProjectArtifactsCache {
             this.artifacts = null;
             this.exception = exception;
         }
+
+        public Set<Artifact> getArtifacts() {
+            return artifacts;
+        }
+
+        public LifecycleExecutionException getException() {
+            return exception;
+        }
     }
 
     Key createKey(
diff --git 
a/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
 
b/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
index 575d106d80..d42bcc078a 100644
--- 
a/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
+++ 
b/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultProjectArtifactsCacheTest.java
@@ -23,6 +23,7 @@ import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.lifecycle.internal.SetWithResolutionResult;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -47,7 +48,7 @@ class DefaultProjectArtifactsCacheTest {
         artifacts.add(new DefaultArtifact("g", "a3", "v", "compile", "jar", 
"", null));
         artifacts.add(new DefaultArtifact("g", "a4", "v", "compile", "jar", 
"", null));
 
-        cache.put(project1, artifacts);
+        cache.put(project1, new SetWithResolutionResult(null, artifacts));
 
         assertArrayEquals(
                 artifacts.toArray(new Artifact[0]),
@@ -61,7 +62,7 @@ class DefaultProjectArtifactsCacheTest {
         artifacts.add(new DefaultArtifact("g", "a2", "v", "compile", "jar", 
"", null));
         artifacts.add(new DefaultArtifact("g", "a1", "v", "compile", "jar", 
"", null));
 
-        cache.put(project2, reversedArtifacts);
+        cache.put(project2, new SetWithResolutionResult(null, 
reversedArtifacts));
 
         assertArrayEquals(
                 reversedArtifacts.toArray(new Artifact[0]),

Reply via email to