Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Map;

import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.DependencyCollectionChecker;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencyManager;
import org.eclipse.aether.collection.DependencySelector;
Expand Down Expand Up @@ -198,6 +199,11 @@ public ScopeManager getScopeManager() {
return getSession().getScopeManager();
}

@Override
public DependencyCollectionChecker getDependencyCollectionChecker() {
return getSession().getDependencyCollectionChecker();
}

@Override
public SystemDependencyScope getSystemDependencyScope() {
return getSession().getSystemDependencyScope();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

import org.eclipse.aether.artifact.ArtifactType;
import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.DependencyCollectionChecker;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencyManager;
import org.eclipse.aether.collection.DependencySelector;
Expand Down Expand Up @@ -128,6 +129,8 @@ public final class DefaultRepositorySystemSession implements RepositorySystemSes

private ScopeManager scopeManager;

private DependencyCollectionChecker dependencyCollectionChecker;

private final Function<Runnable, Boolean> onSessionEndedRegistrar;

/**
Expand Down Expand Up @@ -206,6 +209,7 @@ public DefaultRepositorySystemSession(RepositorySystemSession session) {
setData(session.getData());
setCache(session.getCache());
setScopeManager(session.getScopeManager());
setDependencyCollectionChecker(session.getDependencyCollectionChecker());
this.onSessionEndedRegistrar = session::addOnSessionEndedHandler;
}

Expand Down Expand Up @@ -832,6 +836,24 @@ public SystemDependencyScope getSystemDependencyScope() {
}
}

@Override
public DependencyCollectionChecker getDependencyCollectionChecker() {
return dependencyCollectionChecker;
}

/**
* Sets the dependency collection checker, may be {@code null}.
*
* @param dependencyCollectionChecker The dependency collection checker, may be {@code null}.
* @return The session for chaining, never {@code null}.
* @since 2.0.19
*/
public DefaultRepositorySystemSession setDependencyCollectionChecker(
DependencyCollectionChecker dependencyCollectionChecker) {
this.dependencyCollectionChecker = dependencyCollectionChecker;
return this;
}

/**
* Registers onSessionEnded handler, if able to.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.function.Supplier;

import org.eclipse.aether.artifact.ArtifactTypeRegistry;
import org.eclipse.aether.collection.DependencyCollectionChecker;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencyManager;
import org.eclipse.aether.collection.DependencySelector;
Expand Down Expand Up @@ -405,6 +406,15 @@ interface SessionBuilder {
*/
SessionBuilder setScopeManager(ScopeManager scopeManager);

/**
* Sets the dependency collection checker, may be {@code null}.
*
* @param dependencyCollectionChecker The checker instance, may be {@code null}.
* @return The session for chaining, may be {@code null}.
* @since 2.0.19
*/
SessionBuilder setDependencyCollectionChecker(DependencyCollectionChecker dependencyCollectionChecker);

/**
* Adds on session ended handler to be immediately registered when this builder creates session.
*
Expand Down Expand Up @@ -782,6 +792,14 @@ interface SessionBuilder {
*/
SystemDependencyScope getSystemDependencyScope();

/**
* Returns the dependency collector checker, may be {@code null}.
*
* @return The effective {@link DependencyCollectionChecker} instance, may be {@code null}.
* @since 2.0.19
*/
DependencyCollectionChecker getDependencyCollectionChecker();

/**
* Registers a handler to execute when this session closed.
* <p>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* 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.eclipse.aether.collection;

import org.eclipse.aether.RepositorySystemSession;

/**
* Dependency collector checker. It is able to check dependency collection result, deem it "satisfiable" or
* augment collection and re-execute it.
*
* @since 2.0.19
*/
public interface DependencyCollectionChecker {
/**
* A default "no op" implementation.
*/
DependencyCollectionChecker NOOP = new DependencyCollectionChecker() {};

/**
* Config property for collector checker suppression. Presence of this key will suppress collection checking.
* This key is not meant for users, but to programmatically signal collection suppression.
*/
String COLLECTOR_CHECKER_SUPPRESSED = "aether.dependencyCollector.checker.suppressed";

/**
* Prepares for dependency collection.
*/
default RepositorySystemSession prepare(RepositorySystemSession session, CollectRequest request) {
return session;
}

/**
* Performs checks on finished dependency collection. It should return {@code true} if the collection was deemed
* "satisfactory". If should return {@code false} <em>only, if collection was not satisfactory, and checker
* was able to modify resolution parameters (to not repeat same work)</em>. In other cases (not satisfactory
* but no param change would help) it should throw {@link DependencyCollectionException}.
*/
default boolean isSatisfactory(RepositorySystemSession session, CollectRequest request, CollectResult result)
throws DependencyCollectionException {
return true;
}
}
Loading
Loading