Repository: maven-resolver Updated Branches: refs/heads/master ad50215d2 -> a245b56af
[MRESOLVER-18] DefaultDependencyCollector does not provide pre-managed state for exclusions and properties. Project: http://git-wip-us.apache.org/repos/asf/maven-resolver/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-resolver/commit/a245b56a Tree: http://git-wip-us.apache.org/repos/asf/maven-resolver/tree/a245b56a Diff: http://git-wip-us.apache.org/repos/asf/maven-resolver/diff/a245b56a Branch: refs/heads/master Commit: a245b56afd479640ce12a3cd047b463a629bca0f Parents: ad50215 Author: Christian Schulte <schu...@apache.org> Authored: Fri Mar 17 00:37:08 2017 +0100 Committer: Christian Schulte <schu...@apache.org> Committed: Fri Mar 17 00:40:30 2017 +0100 ---------------------------------------------------------------------- .../impl/DefaultDependencyCollector.java | 53 ++++++++++++--- .../graph/manager/DependencyManagerUtils.java | 69 +++++++++++++++++++- 2 files changed, 109 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/a245b56a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java ---------------------------------------------------------------------- diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java index 35ede64..528200c 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java @@ -22,6 +22,7 @@ package org.eclipse.aether.internal.impl; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -48,6 +49,7 @@ import org.eclipse.aether.collection.VersionFilter; import org.eclipse.aether.graph.DefaultDependencyNode; import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyNode; +import org.eclipse.aether.graph.Exclusion; import org.eclipse.aether.impl.ArtifactDescriptorReader; import org.eclipse.aether.impl.DependencyCollector; import org.eclipse.aether.impl.RemoteRepositoryManager; @@ -497,10 +499,11 @@ public class DefaultDependencyCollector DependencyTraverser childTraverser = depTraverser != null ? depTraverser.deriveChildTraverser( context ) : null; VersionFilter childFilter = verFilter != null ? verFilter.deriveChildFilter( context ) : null; - final List<RemoteRepository> childRepos = args.ignoreRepos - ? repositories - : remoteRepositoryManager.aggregateRepositories( args.session, repositories, - descriptorResult.getRepositories(), true ); + final List<RemoteRepository> childRepos = + args.ignoreRepos + ? repositories + : remoteRepositoryManager.aggregateRepositories( args.session, repositories, + descriptorResult.getRepositories(), true ); Object key = args.pool.toKey( d.getArtifact(), childRepos, childSelector, childManager, childTraverser, childFilter ); @@ -528,8 +531,9 @@ public class DefaultDependencyCollector ArtifactDescriptorRequest descriptorRequest ) { return noDescriptor - ? new ArtifactDescriptorResult( descriptorRequest ) - : resolveCachedArtifactDescriptor( args.pool, descriptorRequest, args.session, d, results, args ); + ? new ArtifactDescriptorResult( descriptorRequest ) + : resolveCachedArtifactDescriptor( args.pool, descriptorRequest, args.session, d, results, args ); + } private ArtifactDescriptorResult resolveCachedArtifactDescriptor( DataPool pool, @@ -629,7 +633,6 @@ public class DefaultDependencyCollector return rangeResult; } - private static boolean isLackingDescriptor( Artifact artifact ) { return artifact.getProperty( ArtifactProperties.LOCAL_PATH, null ) != null; @@ -711,7 +714,6 @@ public class DefaultDependencyCollector final CollectRequest request; - public Args( RepositorySystemSession session, RequestTrace trace, DataPool pool, NodeStack nodes, DefaultDependencyCollectionContext collectionContext, DefaultVersionFilterContext versionContext, CollectRequest request ) @@ -789,12 +791,23 @@ public class DefaultDependencyCollector static class PremanagedDependency { + final String premanagedVersion; final String premanagedScope; final Boolean premanagedOptional; + /** + * @since 1.1.0 + */ + final Collection<Exclusion> premanagedExclusions; + + /** + * @since 1.1.0 + */ + final Map<String, String> premanagedProperties; + final int managedBits; final Dependency managedDependency; @@ -802,11 +815,22 @@ public class DefaultDependencyCollector final boolean premanagedState; PremanagedDependency( String premanagedVersion, String premanagedScope, Boolean premanagedOptional, + Collection<Exclusion> premanagedExclusions, Map<String, String> premanagedProperties, int managedBits, Dependency managedDependency, boolean premanagedState ) { this.premanagedVersion = premanagedVersion; this.premanagedScope = premanagedScope; this.premanagedOptional = premanagedOptional; + this.premanagedExclusions = + premanagedExclusions != null + ? Collections.unmodifiableCollection( new ArrayList<Exclusion>( premanagedExclusions ) ) + : null; + + this.premanagedProperties = + premanagedProperties != null + ? Collections.unmodifiableMap( new HashMap<String, String>( premanagedProperties ) ) + : null; + this.managedBits = managedBits; this.managedDependency = managedDependency; this.premanagedState = premanagedState; @@ -821,6 +845,8 @@ public class DefaultDependencyCollector String premanagedVersion = null; String premanagedScope = null; Boolean premanagedOptional = null; + Collection<Exclusion> premanagedExclusions = null; + Map<String, String> premanagedProperties = null; if ( depMngt != null ) { @@ -834,6 +860,7 @@ public class DefaultDependencyCollector if ( depMngt.getProperties() != null ) { Artifact artifact = dependency.getArtifact(); + premanagedProperties = artifact.getProperties(); dependency = dependency.setArtifact( artifact.setProperties( depMngt.getProperties() ) ); managedBits |= DependencyNode.MANAGED_PROPERTIES; } @@ -851,12 +878,15 @@ public class DefaultDependencyCollector } if ( depMngt.getExclusions() != null ) { + premanagedExclusions = dependency.getExclusions(); dependency = dependency.setExclusions( depMngt.getExclusions() ); managedBits |= DependencyNode.MANAGED_EXCLUSIONS; } } - return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional, managedBits, - dependency, premanagedState ); + return new PremanagedDependency( premanagedVersion, premanagedScope, premanagedOptional, + premanagedExclusions, premanagedProperties, managedBits, dependency, + premanagedState ); + } public void applyTo( DefaultDependencyNode child ) @@ -867,8 +897,11 @@ public class DefaultDependencyCollector child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, premanagedVersion ); child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_SCOPE, premanagedScope ); child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_OPTIONAL, premanagedOptional ); + child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_EXCLUSIONS, premanagedExclusions ); + child.setData( DependencyManagerUtils.NODE_DATA_PREMANAGED_PROPERTIES, premanagedProperties ); } } + } } http://git-wip-us.apache.org/repos/asf/maven-resolver/blob/a245b56a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DependencyManagerUtils.java ---------------------------------------------------------------------- diff --git a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DependencyManagerUtils.java b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DependencyManagerUtils.java index 7719096..f549367 100644 --- a/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DependencyManagerUtils.java +++ b/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/manager/DependencyManagerUtils.java @@ -19,8 +19,12 @@ package org.eclipse.aether.util.graph.manager; * under the License. */ +import java.util.Collection; +import java.util.Map; + import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.graph.DependencyNode; +import org.eclipse.aether.graph.Exclusion; /** * A utility class assisting in analyzing the effects of dependency management. @@ -55,10 +59,27 @@ public final class DependencyManagerUtils public static final String NODE_DATA_PREMANAGED_OPTIONAL = "premanaged.optional"; /** + * The key in the dependency node's {@link DependencyNode#getData() custom data} under which the original exclusions + * are stored. + * + * @since 1.1.0 + */ + public static final String NODE_DATA_PREMANAGED_EXCLUSIONS = "premanaged.exclusions"; + + /** + * The key in the dependency node's {@link DependencyNode#getData() custom data} under which the original properties + * are stored. + * + * @since 1.1.0 + */ + public static final String NODE_DATA_PREMANAGED_PROPERTIES = "premanaged.properties"; + + /** * Gets the version or version range of the specified dependency node before dependency management was applied (if * any). - * + * * @param node The dependency node to retrieve the premanaged data for, must not be {@code null}. + * * @return The node's dependency version before dependency management or {@code null} if the version was not managed * or if {@link #CONFIG_PROP_VERBOSE} was not enabled. */ @@ -73,8 +94,9 @@ public final class DependencyManagerUtils /** * Gets the scope of the specified dependency node before dependency management was applied (if any). - * + * * @param node The dependency node to retrieve the premanaged data for, must not be {@code null}. + * * @return The node's dependency scope before dependency management or {@code null} if the scope was not managed or * if {@link #CONFIG_PROP_VERBOSE} was not enabled. */ @@ -89,8 +111,9 @@ public final class DependencyManagerUtils /** * Gets the optional flag of the specified dependency node before dependency management was applied (if any). - * + * * @param node The dependency node to retrieve the premanaged data for, must not be {@code null}. + * * @return The node's optional flag before dependency management or {@code null} if the flag was not managed or if * {@link #CONFIG_PROP_VERBOSE} was not enabled. */ @@ -103,6 +126,46 @@ public final class DependencyManagerUtils return cast( node.getData().get( NODE_DATA_PREMANAGED_OPTIONAL ), Boolean.class ); } + /** + * Gets the {@code Exclusion}s of the specified dependency node before dependency management was applied (if any). + * + * @param node The dependency node to retrieve the premanaged data for, must not be {@code null}. + * + * @return The nodes' {@code Exclusion}s before dependency management or {@code null} if exclusions were not managed + * or if {@link #CONFIG_PROP_VERBOSE} was not enabled. + * + * @since 1.1.0 + */ + @SuppressWarnings( "unchecked" ) + public static Collection<Exclusion> getPremanagedExclusions( DependencyNode node ) + { + if ( ( node.getManagedBits() & DependencyNode.MANAGED_EXCLUSIONS ) == 0 ) + { + return null; + } + return cast( node.getData().get( NODE_DATA_PREMANAGED_EXCLUSIONS ), Collection.class ); + } + + /** + * Gets the properties of the specified dependency node before dependency management was applied (if any). + * + * @param node The dependency node to retrieve the premanaged data for, must not be {@code null}. + * + * @return The nodes' properties before dependency management or {@code null} if properties were not managed or if + * {@link #CONFIG_PROP_VERBOSE} was not enabled. + * + * @since 1.1.0 + */ + @SuppressWarnings( "unchecked" ) + public static Map<String, String> getPremanagedProperties( DependencyNode node ) + { + if ( ( node.getManagedBits() & DependencyNode.MANAGED_PROPERTIES ) == 0 ) + { + return null; + } + return cast( node.getData().get( NODE_DATA_PREMANAGED_PROPERTIES ), Map.class ); + } + private static <T> T cast( Object obj, Class<T> type ) { return type.isInstance( obj ) ? type.cast( obj ) : null;