Author: rfscholte Date: Fri Jun 21 21:50:46 2013 New Revision: 1495609 URL: http://svn.apache.org/r1495609 Log: Make AbstractBanDependencies M2 proof
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java?rev=1495609&r1=1495608&r2=1495609&view=diff ============================================================================== --- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java (original) +++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java Fri Jun 21 21:50:46 2013 @@ -19,14 +19,22 @@ package org.apache.maven.plugins.enforce * under the License. */ +import java.util.ArrayList; +import java.util.HashSet; import java.util.Set; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.resolver.filter.ArtifactFilter; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectHelper; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; /** * Abstract Rule for banning dependencies. @@ -41,6 +49,8 @@ public abstract class AbstractBanDepende /** Specify if transitive dependencies should be searched (default) or only look at direct dependencies. */ private boolean searchTransitive = true; + private DependencyGraphBuilder graphBuilder; + /** * Execute the rule. * @@ -62,6 +72,15 @@ public abstract class AbstractBanDepende throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee ); } + try + { + graphBuilder = (DependencyGraphBuilder) helper.getComponent( DependencyGraphBuilder.class ); + } + catch ( ComponentLookupException e ) + { + throw new EnforcerRuleException( "Unable to lookup DependencyGraphBuilder: ", e ); + } + // get the correct list of dependencies Set<Artifact> dependencies = getDependenciesToCheck( project ); @@ -106,9 +125,53 @@ public abstract class AbstractBanDepende { dependencies = project.getDependencyArtifacts(); } + + // requiresDependencyCollection doesn't work for M2, this is the fallback + if( dependencies == null ) + { + try + { + DependencyNode node = graphBuilder.buildDependencyGraph( project, null ); + if( searchTransitive ) + { + dependencies = getAllDescendants( node ); + } + else if ( node.getChildren() != null ) + { + dependencies = new HashSet<Artifact>(); + for( DependencyNode depNode : node.getChildren() ) + { + dependencies.add( depNode.getArtifact() ); + } + } + } + catch ( DependencyGraphBuilderException e ) + { + // otherwise we need to change the signature of this protected method + throw new RuntimeException( e ); + } + } return dependencies; } + private Set<Artifact> getAllDescendants( DependencyNode node ) + { + Set<Artifact> children = null; + if( node.getChildren() != null ) + { + children = new HashSet<Artifact>(); + for( DependencyNode depNode : node.getChildren() ) + { + Set<Artifact> subNodes = getAllDescendants( depNode ); + if( subNodes != null ) + { + children.addAll( subNodes ); + } + } + } + return children; + } + /** * Checks the set of dependencies against the list of excludes. *