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

desruisseaux 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 d9824a82bb [MNG-8696] Hide the cache from 
DefaultDependencyResolverResult constructor (#2347)
d9824a82bb is described below

commit d9824a82bb3fe2d2769523609c3fc990af0ed3e0
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Sat Sep 13 11:44:11 2025 +0200

    [MNG-8696] Hide the cache from DefaultDependencyResolverResult constructor 
(#2347)
    
    Make package-private the `DefaultDependencyResolverResult` constructor 
having a `PathModularizationCache` argument,
    and add a public constructor without the cache argument for code in other 
packages that need to instantiate.
    The public constructor may be temporary, until we decide in the future 
where to store session-wide cache.
---
 .../maven/internal/impl/DefaultProjectBuilder.java |  3 +-
 .../maven/impl/DefaultDependencyResolver.java      | 39 +++++++++++++++-------
 .../impl/DefaultDependencyResolverResult.java      | 34 +++++++++++++++----
 3 files changed, 55 insertions(+), 21 deletions(-)

diff --git 
a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectBuilder.java
 
b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectBuilder.java
index b51241642a..62ae3b9db9 100644
--- 
a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectBuilder.java
+++ 
b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProjectBuilder.java
@@ -189,8 +189,7 @@ public Severity getSeverity() {
                 public Optional<DependencyResolverResult> 
getDependencyResolverResult() {
                     return 
Optional.ofNullable(res.getDependencyResolutionResult())
                             .map(r -> new DefaultDependencyResolverResult(
-                                    // TODO: this should not be null
-                                    null, null, r.getCollectionErrors(), 
session.getNode(r.getDependencyGraph()), 0));
+                                    null, r.getCollectionErrors(), 
session.getNode(r.getDependencyGraph()), 0));
                 }
             };
         } catch (ProjectBuildingException e) {
diff --git 
a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java
 
b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java
index ac6ba73d5f..814e71bace 100644
--- 
a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java
+++ 
b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolver.java
@@ -68,6 +68,22 @@
 @Singleton
 public class DefaultDependencyResolver implements DependencyResolver {
 
+    /**
+     * Cache of information about the modules contained in a path element.
+     *
+     * <p><b>TODO:</b> This field should not be in this class, because the 
cache should be global to the session.
+     * This field exists here only temporarily, until clarified where to store 
session-wide caches.</p>
+     */
+    private final PathModularizationCache moduleCache;
+
+    /**
+     * Creates an initially empty resolver.
+     */
+    public DefaultDependencyResolver() {
+        // TODO: the cache should not be instantiated here, but should rather 
be session-wide.
+        moduleCache = new PathModularizationCache();
+    }
+
     @Nonnull
     @Override
     public DependencyResolverResult collect(@Nonnull DependencyResolverRequest 
request)
@@ -126,7 +142,11 @@ public DependencyResolverResult collect(@Nonnull 
DependencyResolverRequest reque
                 final CollectResult result =
                         
session.getRepositorySystem().collectDependencies(systemSession, 
collectRequest);
                 return new DefaultDependencyResolverResult(
-                        null, null, result.getExceptions(), 
session.getNode(result.getRoot(), request.getVerbose()), 0);
+                        null,
+                        moduleCache,
+                        result.getExceptions(),
+                        session.getNode(result.getRoot(), 
request.getVerbose()),
+                        0);
             } catch (DependencyCollectionException e) {
                 throw new DependencyResolverException("Unable to collect 
dependencies", e);
             }
@@ -171,8 +191,8 @@ public DependencyResolverResult 
resolve(DependencyResolverRequest request)
         InternalSession session =
                 InternalSession.from(requireNonNull(request, 
"request").getSession());
         RequestTraceHelper.ResolverTrace trace = 
RequestTraceHelper.enter(session, request);
+        DependencyResolverResult result;
         try {
-            DependencyResolverResult result;
             DependencyResolverResult collectorResult = collect(request);
             List<RemoteRepository> repositories = request.getRepositories() != 
null
                     ? request.getRepositories()
@@ -191,18 +211,13 @@ public DependencyResolverResult 
resolve(DependencyResolverRequest request)
                         .map(Artifact::toCoordinates)
                         .collect(Collectors.toList());
                 Predicate<PathType> filter = request.getPathTypeFilter();
+                DefaultDependencyResolverResult resolverResult = new 
DefaultDependencyResolverResult(
+                        null, moduleCache, collectorResult.getExceptions(), 
collectorResult.getRoot(), nodes.size());
                 if (request.getRequestType() == 
DependencyResolverRequest.RequestType.FLATTEN) {
-                    DefaultDependencyResolverResult flattenResult = new 
DefaultDependencyResolverResult(
-                            null, null, collectorResult.getExceptions(), 
collectorResult.getRoot(), nodes.size());
                     for (Node node : nodes) {
-                        flattenResult.addNode(node);
+                        resolverResult.addNode(node);
                     }
-                    result = flattenResult;
                 } else {
-                    PathModularizationCache cache =
-                            new PathModularizationCache(); // TODO: should be 
project-wide cache.
-                    DefaultDependencyResolverResult resolverResult = new 
DefaultDependencyResolverResult(
-                            null, cache, collectorResult.getExceptions(), 
collectorResult.getRoot(), nodes.size());
                     ArtifactResolverResult artifactResolverResult =
                             
session.getService(ArtifactResolver.class).resolve(session, coordinates, 
repositories);
                     for (Node node : nodes) {
@@ -217,13 +232,13 @@ public DependencyResolverResult 
resolve(DependencyResolverRequest request)
                             throw cannotReadModuleInfo(path, e);
                         }
                     }
-                    result = resolverResult;
                 }
+                result = resolverResult;
             }
-            return result;
         } finally {
             RequestTraceHelper.exit(trace);
         }
+        return result;
     }
 
     private static DependencyResolverException cannotReadModuleInfo(final Path 
path, final IOException cause) {
diff --git 
a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolverResult.java
 
b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolverResult.java
index fa7ace6e0d..4b67c9ee32 100644
--- 
a/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolverResult.java
+++ 
b/impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultDependencyResolverResult.java
@@ -27,6 +27,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -56,6 +57,7 @@ public class DefaultDependencyResolverResult implements 
DependencyResolverResult
      * The corresponding request.
      */
     private final DependencyResolverRequest request;
+
     /**
      * The exceptions that occurred while building the dependency graph.
      */
@@ -97,6 +99,24 @@ public class DefaultDependencyResolverResult implements 
DependencyResolverResult
      */
     private final PathModularizationCache cache;
 
+    /**
+     * Creates an initially empty result with a temporary cache.
+     * Callers should add path elements by calls to {@link 
#addDependency(Node, Dependency, Predicate, Path)}.
+     *
+     * <p><b>WARNING: this constructor may be removed in a future Maven 
release.</b>
+     * The reason is because {@code DefaultDependencyResolverResult} needs a 
cache, which should
+     * preferably be session-wide. How to manage such caches has not yet been 
clarified.</p>
+     *
+     * @param request the corresponding request
+     * @param exceptions the exceptions that occurred while building the 
dependency graph
+     * @param root the root node of the dependency graph
+     * @param count estimated number of dependencies
+     */
+    public DefaultDependencyResolverResult(
+            DependencyResolverRequest request, List<Exception> exceptions, 
Node root, int count) {
+        this(request, new PathModularizationCache(), exceptions, root, count);
+    }
+
     /**
      * Creates an initially empty result. Callers should add path elements by 
calls
      * to {@link #addDependency(Node, Dependency, Predicate, Path)}.
@@ -107,14 +127,14 @@ public class DefaultDependencyResolverResult implements 
DependencyResolverResult
      * @param root the root node of the dependency graph
      * @param count estimated number of dependencies
      */
-    public DefaultDependencyResolverResult(
+    DefaultDependencyResolverResult(
             DependencyResolverRequest request,
             PathModularizationCache cache,
             List<Exception> exceptions,
             Node root,
             int count) {
         this.request = request;
-        this.cache = cache;
+        this.cache = Objects.requireNonNull(cache);
         this.exceptions = exceptions;
         this.root = root;
         nodes = new ArrayList<>(count);
@@ -350,7 +370,7 @@ public DependencyResolverRequest getRequest() {
 
     @Override
     public List<Exception> getExceptions() {
-        return exceptions;
+        return Collections.unmodifiableList(exceptions);
     }
 
     @Override
@@ -360,22 +380,22 @@ public Node getRoot() {
 
     @Override
     public List<Node> getNodes() {
-        return nodes;
+        return Collections.unmodifiableList(nodes);
     }
 
     @Override
     public List<Path> getPaths() {
-        return paths;
+        return Collections.unmodifiableList(paths);
     }
 
     @Override
     public Map<PathType, List<Path>> getDispatchedPaths() {
-        return dispatchedPaths;
+        return Collections.unmodifiableMap(dispatchedPaths);
     }
 
     @Override
     public Map<Dependency, Path> getDependencies() {
-        return dependencies;
+        return Collections.unmodifiableMap(dependencies);
     }
 
     @Override

Reply via email to