Added debug logging to DependencyTreeResolutionListener that outputs the received resolution listener events.

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@576938 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java b/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
index 3e5721c..fe6712c 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DefaultDependencyTreeBuilder.java
@@ -32,6 +32,7 @@
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 /**
  * Default implementation of <code>DependencyTreeBuilder</code>.
@@ -42,7 +43,7 @@
  * @plexus.component role="org.apache.maven.shared.dependency.tree.DependencyTreeBuilder"
  * @see DependencyTreeBuilder
  */
-public class DefaultDependencyTreeBuilder implements DependencyTreeBuilder
+public class DefaultDependencyTreeBuilder extends AbstractLogEnabled implements DependencyTreeBuilder
 {
     // DependencyTreeBuilder methods ------------------------------------------
 
@@ -76,7 +77,7 @@
                                                ArtifactFilter filter, ArtifactCollector collector )
         throws DependencyTreeBuilderException
     {
-        DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener();
+        DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener( getLogger() );
 
         try
         {
@@ -88,6 +89,8 @@
             {
                 dependencyArtifacts = project.createArtifacts( factory, null, null );
             }
+            
+            getLogger().debug( "Dependency tree resolution listener events:" );
 
             collector.collect( dependencyArtifacts, project.getArtifact(), managedVersions, repository,
                                project.getRemoteArtifactRepositories(), metadataSource, filter,
diff --git a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
index 83e1642..3977d54 100644
--- a/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
+++ b/src/main/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListener.java
@@ -32,6 +32,7 @@
 import org.apache.maven.artifact.resolver.ResolutionListenerForDepMgmt;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
+import org.codehaus.plexus.logging.Logger;
 
 /**
  * An artifact resolution listener that constructs a dependency tree.
@@ -43,6 +44,11 @@
 public class DependencyTreeResolutionListener implements ResolutionListener, ResolutionListenerForDepMgmt
 {
     // fields -----------------------------------------------------------------
+    
+    /**
+     * The log to write debug messages to.
+     */
+    private final Logger logger;
 
     /**
      * The parent dependency nodes of the current dependency node.
@@ -77,10 +83,15 @@
     // constructors -----------------------------------------------------------
 
     /**
-     * Creates a new dependency tree resolution listener.
+     * Creates a new dependency tree resolution listener that writes to the specified log.
+     * 
+     * @param logger
+     *            the log to write debug messages to
      */
-    public DependencyTreeResolutionListener()
+    public DependencyTreeResolutionListener( Logger logger )
     {
+        this.logger = logger;
+        
         parentNodes = new Stack();
         nodesByArtifact = new IdentityHashMap();
         rootNode = null;
@@ -94,7 +105,7 @@
      */
     public void testArtifact( Artifact artifact )
     {
-        // no-op
+        log( "testArtifact: artifact=" + artifact );
     }
 
     /*
@@ -102,6 +113,8 @@
      */
     public void startProcessChildren( Artifact artifact )
     {
+        log( "startProcessChildren: artifact=" + artifact );
+        
         if ( !currentNode.getArtifact().equals( artifact ) )
         {
             throw new IllegalStateException( "Artifact was expected to be " + currentNode.getArtifact() + " but was "
@@ -118,6 +131,8 @@
     {
         DependencyNode node = (DependencyNode) parentNodes.pop();
 
+        log( "endProcessChildren: artifact=" + artifact );
+        
         if ( node == null )
         {
             throw new IllegalStateException( "Parent dependency node was null" );
@@ -135,6 +150,8 @@
      */
     public void includeArtifact( Artifact artifact )
     {
+        log( "includeArtifact: artifact=" + artifact );
+        
         DependencyNode existingNode = getNode( artifact );
 
         /*
@@ -175,6 +192,8 @@
      */
     public void omitForNearer( Artifact omitted, Artifact kept )
     {
+        log( "omitForNearer: omitted=" + omitted + " kept=" + kept );
+        
         if ( !omitted.getDependencyConflictId().equals( kept.getDependencyConflictId() ) )
         {
             throw new IllegalArgumentException( "Omitted artifact dependency conflict id "
@@ -216,6 +235,8 @@
      */
     public void updateScope( Artifact artifact, String scope )
     {
+        log( "updateScope: artifact=" + artifact + ", scope=" + scope );
+        
         DependencyNode node = getNode( artifact );
 
         if ( node == null )
@@ -235,6 +256,8 @@
     {
         // TODO: remove when ResolutionListenerForDepMgmt merged into ResolutionListener
         
+        log( "manageArtifact: artifact=" + artifact + ", replacement=" + replacement );
+        
         if ( replacement.getVersion() != null )
         {
             manageArtifactVersion( artifact, replacement );
@@ -251,6 +274,8 @@
      */
     public void omitForCycle( Artifact artifact )
     {
+        log( "omitForCycle: artifact=" + artifact );
+        
         if ( isCurrentNodeIncluded() )
         {
             DependencyNode node = createNode( artifact );
@@ -265,6 +290,8 @@
      */
     public void updateScopeCurrentPom( Artifact artifact, String scopeIgnored )
     {
+        log( "updateScopeCurrentPom: artifact=" + artifact + ", scopeIgnored=" + scopeIgnored );
+        
         DependencyNode node = getNode( artifact );
 
         if ( node == null )
@@ -282,6 +309,8 @@
      */
     public void selectVersionFromRange( Artifact artifact )
     {
+        log( "selectVersionFromRange: artifact=" + artifact );
+        
         // TODO: track version selection from range in node (MNG-3093)
     }
 
@@ -289,8 +318,10 @@
      * @see org.apache.maven.artifact.resolver.ResolutionListener#restrictRange(org.apache.maven.artifact.Artifact,
      *      org.apache.maven.artifact.Artifact, org.apache.maven.artifact.versioning.VersionRange)
      */
-    public void restrictRange( Artifact artifact, Artifact artifact1, VersionRange versionRange )
+    public void restrictRange( Artifact artifact, Artifact replacement, VersionRange versionRange )
     {
+        log( "restrictRange: artifact=" + artifact + ", replacement=" + replacement + ", versionRange=" + versionRange );
+        
         // TODO: track range restriction in node (MNG-3093)
     }
     
@@ -302,6 +333,8 @@
      */
     public void manageArtifactVersion( Artifact artifact, Artifact replacement )
     {
+        log( "manageArtifactVersion: artifact=" + artifact + ", replacement=" + replacement );
+        
         /*
          * DefaultArtifactCollector calls manageArtifact twice: first with the change; then subsequently with no change.
          * We ignore the second call when the versions are equal.
@@ -322,6 +355,8 @@
      */
     public void manageArtifactScope( Artifact artifact, Artifact replacement )
     {
+        log( "manageArtifactScope: artifact=" + artifact + ", replacement=" + replacement );
+        
         /*
          * DefaultArtifactCollector calls manageArtifact twice: first with the change; then subsequently with no change.
          * We ignore the second call when the scopes are equal.
@@ -335,6 +370,8 @@
             managedScopes.put( replacement.getId(), artifact.getScope() );
         }
     }
+    
+    // public methods ---------------------------------------------------------
 
     /**
      * Gets a list of all dependency nodes in the computed dependency tree.
@@ -358,6 +395,28 @@
     }
 
     // private methods --------------------------------------------------------
+    
+    /**
+     * Writes the specified message to the log at debug level with indentation for the current node's depth.
+     * 
+     * @param message
+     *            the message to write to the log
+     */
+    private void log( String message )
+    {
+        int depth = parentNodes.size();
+
+        StringBuffer buffer = new StringBuffer();
+
+        for ( int i = 0; i < depth; i++ )
+        {
+            buffer.append( "  " );
+        }
+
+        buffer.append( message );
+
+        logger.debug( buffer.toString() );
+    }
 
     /**
      * Creates a new dependency node for the specified artifact and appends it to the current parent dependency node.
diff --git a/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListenerTest.java b/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListenerTest.java
index 4debf8c..c3e8fa6 100644
--- a/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListenerTest.java
+++ b/src/test/java/org/apache/maven/shared/dependency/tree/DependencyTreeResolutionListenerTest.java
@@ -23,6 +23,7 @@
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.plugin.testing.SilentLog;
 
 /**
  * Tests <code>DependencyTreeResolutionListener</code>.
@@ -47,7 +48,7 @@
     {
         super.setUp();
 
-        listener = new DependencyTreeResolutionListener();
+        listener = new DependencyTreeResolutionListener( new SilentLog() );
     }
 
     // tests ------------------------------------------------------------------