You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2013/06/21 23:50:46 UTC

svn commit: r1495609 - /maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java

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.
      *