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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0ba854d8d Feat: Expose scope related bits via scope manager (#1862)
0ba854d8d is described below

commit 0ba854d8d98fec87105116ff9b90ce1157d7ed39
Author: Tamas Cservenak <[email protected]>
AuthorDate: Mon May 11 23:07:52 2026 +0200

    Feat: Expose scope related bits via scope manager (#1862)
    
    When Resolver 2.x is used with ScopeManager, the scope semantics cannot be
    taken for granted as it was in Maven 3.9 and before, as in this case
    scope manager configuration is the one who defines them, and their semantics
    as well.
    
    Hence, any scope related operation, like filtering and selecting (during 
collection)
    must be done in with scope manager prepared filter or selector.
---
 .../org/eclipse/aether/scope/ScopeManager.java     | 24 ++++++++++++++++++++++
 .../aether/impl/scope/InternalScopeManager.java    |  7 -------
 .../internal/impl/scope/ScopeManagerImpl.java      |  6 ++++++
 .../aether/util/filter/DependencyFilterUtils.java  |  1 +
 .../aether/util/filter/ScopeDependencyFilter.java  |  1 +
 .../graph/selector/ScopeDependencySelector.java    |  1 +
 6 files changed, 33 insertions(+), 7 deletions(-)

diff --git 
a/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java 
b/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
index a0bc620d4..4fb89ecfb 100644
--- 
a/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
+++ 
b/maven-resolver-api/src/main/java/org/eclipse/aether/scope/ScopeManager.java
@@ -21,6 +21,10 @@ package org.eclipse.aether.scope;
 import java.util.Collection;
 import java.util.Optional;
 
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
+
 /**
  * Scope manager.
  *
@@ -67,4 +71,24 @@ public interface ScopeManager {
      * Returns the "universe" (all) of resolution scopes as immutable 
collection.
      */
     Collection<ResolutionScope> getResolutionScopeUniverse();
+
+    /**
+     * Resolver scope configuration specific: dependency selector to be used 
to support this scope (with its dependency
+     * and resolution scopes).
+     * <p>
+     * Important: Resolver 2.x when used with {@link ScopeManager}, the scope 
semantics is defined by client code.
+     * Hence, the scopes cannot be interpreted with fixed logic as it was the 
case in Maven 3.9 and before, instead
+     * the {@link ScopeManager} has to be asked to create selector based on 
scope configuration.
+     */
+    DependencySelector getDependencySelector(RepositorySystemSession session, 
ResolutionScope resolutionScope);
+
+    /**
+     * Resolver scope configuration specific: dependency filter to be used to 
support this scope (with its dependency
+     * and resolution scopes).
+     * <p>
+     * Important: Resolver 2.x when used with {@link ScopeManager}, the scope 
semantics is defined by client code.
+     * Hence, the scopes cannot be interpreted with fixed logic as it was the 
case in Maven 3.9 and before, instead
+     * the {@link ScopeManager} has to be asked to create filter based on 
scope configuration.
+     */
+    DependencyFilter getDependencyFilter(RepositorySystemSession session, 
ResolutionScope resolutionScope);
 }
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
index 2482490a0..81c002202 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/scope/InternalScopeManager.java
@@ -23,7 +23,6 @@ import java.util.Optional;
 
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.collection.DependencySelector;
 import org.eclipse.aether.scope.DependencyScope;
 import org.eclipse.aether.scope.ResolutionScope;
 import org.eclipse.aether.scope.ScopeManager;
@@ -53,12 +52,6 @@ public interface InternalScopeManager extends ScopeManager {
      */
     Optional<BuildScope> 
getDependencyScopeMainProjectBuildScope(DependencyScope dependencyScope);
 
-    /**
-     * Resolver specific: dependency selector to be used to support this scope 
(with its dependency
-     * and resolution scopes).
-     */
-    DependencySelector getDependencySelector(RepositorySystemSession session, 
ResolutionScope resolutionScope);
-
     /**
      * Resolver specific: post-processing to be used to support this scope 
(with its dependency
      * and resolution scopes).
diff --git 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
index e507cef36..dd3585577 100644
--- 
a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
+++ 
b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/scope/ScopeManagerImpl.java
@@ -34,6 +34,7 @@ import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.collection.CollectResult;
 import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
 import org.eclipse.aether.impl.scope.BuildPath;
 import org.eclipse.aether.impl.scope.BuildScope;
 import org.eclipse.aether.impl.scope.BuildScopeQuery;
@@ -162,6 +163,11 @@ public final class ScopeManagerImpl implements 
InternalScopeManager {
         }
     }
 
+    @Override
+    public DependencyFilter getDependencyFilter(RepositorySystemSession 
session, ResolutionScope resolutionScope) {
+        return new ScopeDependencyFilter(null, 
getDirectlyExcludedLabels(translate(resolutionScope)));
+    }
+
     @Override
     public CollectResult postProcess(
             RepositorySystemSession session, ResolutionScope resolutionScope, 
CollectResult collectResult) {
diff --git 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
index b41191483..433b6202a 100644
--- 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
+++ 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/DependencyFilterUtils.java
@@ -115,6 +115,7 @@ public final class DependencyFilterUtils {
      * @deprecated resolver is oblivious about "scopes", it is consumer 
project which needs to lay these down and
      * also assign proper semantics. Moreover, Resolver is oblivious about 
notions of "classpath", "modulepath", and
      * any other similar uses. These should be handled by consumer project.
+     * @see 
org.eclipse.aether.scope.ScopeManager#getDependencyFilter(org.eclipse.aether.RepositorySystemSession,
 org.eclipse.aether.scope.ResolutionScope)
      */
     @Deprecated
     public static DependencyFilter classpathFilter(String... classpathTypes) {
diff --git 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
index 33dbfae7f..3fd5907c3 100644
--- 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
+++ 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/filter/ScopeDependencyFilter.java
@@ -66,6 +66,7 @@ public final class ScopeDependencyFilter implements 
DependencyFilter {
         }
     }
 
+    @Override
     public boolean accept(DependencyNode node, List<DependencyNode> parents) {
         Dependency dependency = node.getDependency();
 
diff --git 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
index 99c9c14c5..8c796d8d6 100644
--- 
a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
+++ 
b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/selector/ScopeDependencySelector.java
@@ -38,6 +38,7 @@ import static java.util.Objects.requireNonNull;
  *
  * @see Dependency#getScope()
  * @deprecated this class is deprecated. Use same named class from impl module 
instead.
+ * @see 
org.eclipse.aether.scope.ScopeManager#getDependencySelector(org.eclipse.aether.RepositorySystemSession,
 org.eclipse.aether.scope.ResolutionScope)
  */
 @Deprecated
 public final class ScopeDependencySelector implements DependencySelector {

Reply via email to