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 5baa2f4098 [MNG-7977] Fix reactor reader to not resolve any artifacts 
from projects being built outside the reactor (#1330)
5baa2f4098 is described below

commit 5baa2f40985cbcb7398f545487b45c3069bacd32
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Mon Jan 8 11:38:13 2024 +0100

    [MNG-7977] Fix reactor reader to not resolve any artifacts from projects 
being built outside the reactor (#1330)
---
 .../main/java/org/apache/maven/ReactorReader.java  | 47 +++++++++++++++-------
 1 file changed, 33 insertions(+), 14 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/ReactorReader.java 
b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
index f22fd06d22..8bb0660d0d 100644
--- a/maven-core/src/main/java/org/apache/maven/ReactorReader.java
+++ b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
@@ -29,16 +29,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
-import java.util.ArrayDeque;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -78,6 +69,7 @@ class ReactorReader implements MavenWorkspaceReader {
     private final WorkspaceRepository repository;
     // groupId -> (artifactId -> (version -> project)))
     private Map<String, Map<String, Map<String, MavenProject>>> projects;
+    private Map<String, Map<String, Map<String, MavenProject>>> allProjects;
     private Path projectLocalRepository;
     // projectId -> Deque<lifecycle>
     private final Map<String, Deque<String>> lifecycles = new 
ConcurrentHashMap<>();
@@ -117,7 +109,17 @@ class ReactorReader implements MavenWorkspaceReader {
     }
 
     public List<String> findVersions(Artifact artifact) {
-        return getProjects()
+        List<String> versions = getProjects()
+                .getOrDefault(artifact.getGroupId(), Collections.emptyMap())
+                .getOrDefault(artifact.getArtifactId(), Collections.emptyMap())
+                .values()
+                .stream()
+                .map(MavenProject::getVersion)
+                .collect(Collectors.collectingAndThen(Collectors.toList(), 
Collections::unmodifiableList));
+        if (!versions.isEmpty()) {
+            return versions;
+        }
+        return getAllProjects()
                 .getOrDefault(artifact.getGroupId(), Collections.emptyMap())
                 .getOrDefault(artifact.getArtifactId(), Collections.emptyMap())
                 .values()
@@ -452,22 +454,39 @@ class ReactorReader implements MavenWorkspaceReader {
     }
 
     private MavenProject getProject(Artifact artifact) {
-        return getProjects()
+        return getAllProjects()
                 .getOrDefault(artifact.getGroupId(), Collections.emptyMap())
                 .getOrDefault(artifact.getArtifactId(), Collections.emptyMap())
                 .getOrDefault(artifact.getBaseVersion(), null);
     }
 
     // groupId -> (artifactId -> (version -> project)))
-    private Map<String, Map<String, Map<String, MavenProject>>> getProjects() {
+    private Map<String, Map<String, Map<String, MavenProject>>> 
getAllProjects() {
         // compute the projects mapping
-        if (projects == null) {
+        if (allProjects == null) {
             List<MavenProject> allProjects = session.getAllProjects();
             if (allProjects != null) {
                 Map<String, Map<String, Map<String, MavenProject>>> map = new 
HashMap<>();
                 allProjects.forEach(project -> 
map.computeIfAbsent(project.getGroupId(), k -> new HashMap<>())
                         .computeIfAbsent(project.getArtifactId(), k -> new 
HashMap<>())
                         .put(project.getVersion(), project));
+                this.allProjects = map;
+            } else {
+                return Collections.emptyMap();
+            }
+        }
+        return allProjects;
+    }
+
+    private Map<String, Map<String, Map<String, MavenProject>>> getProjects() {
+        // compute the projects mapping
+        if (projects == null) {
+            List<MavenProject> projects = session.getProjects();
+            if (projects != null) {
+                Map<String, Map<String, Map<String, MavenProject>>> map = new 
HashMap<>();
+                projects.forEach(project -> 
map.computeIfAbsent(project.getGroupId(), k -> new HashMap<>())
+                        .computeIfAbsent(project.getArtifactId(), k -> new 
HashMap<>())
+                        .put(project.getVersion(), project));
                 this.projects = map;
             } else {
                 return Collections.emptyMap();

Reply via email to