From d006ff48017585e89e5f3ebce0a351ba12ff297f Mon Sep 17 00:00:00 2001 From: Tamas Cservenak Date: Tue, 4 Nov 2025 15:28:41 +0100 Subject: [PATCH] ScopeManager: do not interfere with session graph transformer Just assume integrator (ie Maven) knows what is doing, as IF integrator wants to use ScopeManager, it needs to tie it into proper components (see suppliers). Otherwise this is really just a nasty issue/bug on integrator side. --- .../impl/scope/InternalScopeManager.java | 20 ++----- .../collect/DependencyCollectorDelegate.java | 5 +- .../internal/impl/scope/ScopeManagerImpl.java | 52 ++++++++----------- .../supplier/SessionBuilderSupplier.java | 15 ++++-- .../supplier/SessionBuilderSupplier.java | 10 ++-- 5 files changed, 43 insertions(+), 59 deletions(-) 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 ac3643f75..2482490a0 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 @@ -21,10 +21,9 @@ import java.util.Collection; import java.util.Optional; +import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.collection.CollectResult; -import org.eclipse.aether.collection.DependencyGraphTransformer; import org.eclipse.aether.collection.DependencySelector; -import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.scope.DependencyScope; import org.eclipse.aether.scope.ResolutionScope; import org.eclipse.aether.scope.ScopeManager; @@ -58,25 +57,14 @@ public interface InternalScopeManager extends ScopeManager { * Resolver specific: dependency selector to be used to support this scope (with its dependency * and resolution scopes). */ - DependencySelector getDependencySelector(ResolutionScope resolutionScope); - - /** - * Resolver specific: dependency graph transformer to be used to support this scope (with its dependency - * and resolution scopes). - */ - DependencyGraphTransformer getDependencyGraphTransformer(ResolutionScope resolutionScope); + DependencySelector getDependencySelector(RepositorySystemSession session, ResolutionScope resolutionScope); /** * Resolver specific: post-processing to be used to support this scope (with its dependency * and resolution scopes). */ - CollectResult postProcess(ResolutionScope resolutionScope, CollectResult collectResult); - - /** - * Resolver specific: dependency filter to be used to support this scope (with its dependency - * and resolution scopes). - */ - DependencyFilter getDependencyFilter(ResolutionScope resolutionScope); + CollectResult postProcess( + RepositorySystemSession session, ResolutionScope resolutionScope, CollectResult collectResult); /** * The mode of resolution scope: eliminate (remove all occurrences) or just remove. diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java index 31a5dd919..8e715efdd 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DependencyCollectorDelegate.java @@ -264,7 +264,7 @@ public final CollectResult collectDependencies(RepositorySystemSession session, } if (request.getResolutionScope() != null) { - return scopeManager.postProcess(request.getResolutionScope(), result); + return scopeManager.postProcess(session, request.getResolutionScope(), result); } else { return result; } @@ -312,8 +312,7 @@ protected RepositorySystemSession setUpSession( ResolutionScope resolutionScope = collectRequest.getResolutionScope(); if (resolutionScope != null) { requireNonNull(scopeManager, "ScopeManager is not set on session"); - optimized.setDependencySelector(scopeManager.getDependencySelector(resolutionScope)); - optimized.setDependencyGraphTransformer(scopeManager.getDependencyGraphTransformer(resolutionScope)); + optimized.setDependencySelector(scopeManager.getDependencySelector(session, resolutionScope)); } return optimized; } 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 becfaffd4..e507cef36 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 @@ -30,11 +30,10 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; +import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.collection.CollectResult; -import org.eclipse.aether.collection.DependencyGraphTransformer; 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; @@ -48,10 +47,6 @@ import org.eclipse.aether.util.filter.ScopeDependencyFilter; import org.eclipse.aether.util.graph.selector.AndDependencySelector; import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector; -import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer; -import org.eclipse.aether.util.graph.transformer.ConfigurableVersionSelector; -import org.eclipse.aether.util.graph.transformer.ConflictResolver; -import org.eclipse.aether.util.graph.transformer.SimpleOptionalitySelector; import org.eclipse.aether.util.graph.visitor.CloningDependencyVisitor; import org.eclipse.aether.util.graph.visitor.FilteringDependencyVisitor; @@ -143,31 +138,33 @@ public Optional getDependencyScopeMainProjectBuildScope(DependencySc } @Override - public DependencySelector getDependencySelector(ResolutionScope resolutionScope) { + public DependencySelector getDependencySelector(RepositorySystemSession session, ResolutionScope resolutionScope) { ResolutionScopeImpl rs = translate(resolutionScope); Set directlyExcludedLabels = getDirectlyExcludedLabels(rs); Set transitivelyExcludedLabels = getTransitivelyExcludedLabels(rs); - - return new AndDependencySelector( - rs.getMode() == Mode.ELIMINATE - ? ScopeDependencySelector.fromTo(2, 2, null, directlyExcludedLabels) - : ScopeDependencySelector.fromTo(1, 2, null, directlyExcludedLabels), - ScopeDependencySelector.from(2, null, transitivelyExcludedLabels), - OptionalDependencySelector.fromDirect(), - new ExclusionDependencySelector()); - } - - @Override - public DependencyGraphTransformer getDependencyGraphTransformer(ResolutionScope resolutionScope) { - return new ChainedDependencyGraphTransformer( - new ConflictResolver( - new ConfigurableVersionSelector(), new ManagedScopeSelector(this), - new SimpleOptionalitySelector(), new ManagedScopeDeriver(this)), - new ManagedDependencyContextRefiner(this)); + if (session.getDependencySelector() != null) { + return new AndDependencySelector( + rs.getMode() == Mode.ELIMINATE + ? ScopeDependencySelector.fromTo(2, 2, null, directlyExcludedLabels) + : ScopeDependencySelector.fromTo(1, 2, null, directlyExcludedLabels), + ScopeDependencySelector.from(2, null, transitivelyExcludedLabels), + OptionalDependencySelector.fromDirect(), + new ExclusionDependencySelector(), + session.getDependencySelector()); + } else { + return new AndDependencySelector( + rs.getMode() == Mode.ELIMINATE + ? ScopeDependencySelector.fromTo(2, 2, null, directlyExcludedLabels) + : ScopeDependencySelector.fromTo(1, 2, null, directlyExcludedLabels), + ScopeDependencySelector.from(2, null, transitivelyExcludedLabels), + OptionalDependencySelector.fromDirect(), + new ExclusionDependencySelector()); + } } @Override - public CollectResult postProcess(ResolutionScope resolutionScope, CollectResult collectResult) { + public CollectResult postProcess( + RepositorySystemSession session, ResolutionScope resolutionScope, CollectResult collectResult) { ResolutionScopeImpl rs = translate(resolutionScope); if (rs.getMode() == Mode.ELIMINATE) { CloningDependencyVisitor cloning = new CloningDependencyVisitor(); @@ -179,11 +176,6 @@ public CollectResult postProcess(ResolutionScope resolutionScope, CollectResult return collectResult; } - @Override - public DependencyFilter getDependencyFilter(ResolutionScope resolutionScope) { - return new ScopeDependencyFilter(null, getDirectlyExcludedLabels(translate(resolutionScope))); - } - @Override public DependencyScope createDependencyScope(String id, boolean transitive, Collection presence) { return new DependencyScopeImpl(id, transitive, presence); diff --git a/maven-resolver-supplier-mvn3/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java b/maven-resolver-supplier-mvn3/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java index 43d186990..834c8bc4f 100644 --- a/maven-resolver-supplier-mvn3/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java +++ b/maven-resolver-supplier-mvn3/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java @@ -32,6 +32,7 @@ import org.eclipse.aether.collection.DependencyManager; import org.eclipse.aether.collection.DependencySelector; import org.eclipse.aether.collection.DependencyTraverser; +import org.eclipse.aether.impl.scope.InternalScopeManager; import org.eclipse.aether.internal.impl.scope.ManagedDependencyContextRefiner; import org.eclipse.aether.internal.impl.scope.ManagedScopeDeriver; import org.eclipse.aether.internal.impl.scope.ManagedScopeSelector; @@ -65,7 +66,7 @@ */ public class SessionBuilderSupplier implements Supplier { protected final RepositorySystem repositorySystem; - protected final ScopeManagerImpl scopeManager; + protected final InternalScopeManager scopeManager; public SessionBuilderSupplier(RepositorySystem repositorySystem) { this.repositorySystem = requireNonNull(repositorySystem); @@ -88,12 +89,16 @@ protected void configureSessionBuilder(SessionBuilder session) { session.setArtifactDescriptorPolicy(getArtifactDescriptorPolicy()); } + protected InternalScopeManager getScopeManager() { + return this.scopeManager; + } + protected DependencyTraverser getDependencyTraverser() { return new FatArtifactTraverser(); } protected DependencyManager getDependencyManager() { - return new ClassicDependencyManager(scopeManager); + return new ClassicDependencyManager(getScopeManager()); } protected DependencySelector getDependencySelector() { @@ -110,10 +115,10 @@ protected DependencyGraphTransformer getDependencyGraphTransformer() { return new ChainedDependencyGraphTransformer( new ConflictResolver( new ConfigurableVersionSelector(), - new ManagedScopeSelector(this.scopeManager), + new ManagedScopeSelector(getScopeManager()), new SimpleOptionalitySelector(), - new ManagedScopeDeriver(this.scopeManager)), - new ManagedDependencyContextRefiner(this.scopeManager)); + new ManagedScopeDeriver(getScopeManager())), + new ManagedDependencyContextRefiner(getScopeManager())); } protected ArtifactTypeRegistry getArtifactTypeRegistry() { diff --git a/maven-resolver-supplier-mvn4/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java b/maven-resolver-supplier-mvn4/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java index 1d6c6cf13..deb32e9ea 100644 --- a/maven-resolver-supplier-mvn4/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java +++ b/maven-resolver-supplier-mvn4/src/main/java/org/eclipse/aether/supplier/SessionBuilderSupplier.java @@ -95,8 +95,8 @@ protected DependencyManager getDependencyManager() { public DependencyManager getDependencyManager(boolean transitive) { return transitive - ? new TransitiveDependencyManager(this.getScopeManager()) - : new ClassicDependencyManager(this.scopeManager); + ? new TransitiveDependencyManager(getScopeManager()) + : new ClassicDependencyManager(getScopeManager()); } protected DependencySelector getDependencySelector() { @@ -112,10 +112,10 @@ protected DependencyGraphTransformer getDependencyGraphTransformer() { return new ChainedDependencyGraphTransformer( new ConflictResolver( new ConfigurableVersionSelector(), - new ManagedScopeSelector(this.getScopeManager()), + new ManagedScopeSelector(getScopeManager()), new SimpleOptionalitySelector(), - new ManagedScopeDeriver(this.getScopeManager())), - new ManagedDependencyContextRefiner(this.getScopeManager())); + new ManagedScopeDeriver(getScopeManager())), + new ManagedDependencyContextRefiner(getScopeManager())); } protected ArtifactTypeRegistry getArtifactTypeRegistry() {