Author: hboutemy
Date: Sat May 24 14:51:57 2014
New Revision: 1597312

URL: http://svn.apache.org/r1597312
Log:
refactored code to better show the logic

Modified:
    maven/shared/trunk/maven-dependency-tree/src/it/reactor/verify.bsh
    
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
    
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
    
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
    
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
    
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java

Modified: maven/shared/trunk/maven-dependency-tree/src/it/reactor/verify.bsh
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/it/reactor/verify.bsh?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- maven/shared/trunk/maven-dependency-tree/src/it/reactor/verify.bsh 
(original)
+++ maven/shared/trunk/maven-dependency-tree/src/it/reactor/verify.bsh Sat May 
24 14:51:57 2014
@@ -36,7 +36,7 @@ if ( !actual.equals( expected ) )
 
 String resolved = FileUtils.fileRead( new File( basedir, 
"resolved-module-z-deps-y.txt" ) );
 
-if ( !"Could not resolve the following dependencies: 
[org.apache.maven.its.dependency-tree:module-y-deps-x:jar:1.0-SNAPSHOT 
(compile), org.apache.maven.its.dependency-tree:module-x:jar:1.0-SNAPSHOT 
(compile)]".equals( resolved ) )
+if ( !"Could not resolve following dependencies: 
[org.apache.maven.its.dependency-tree:module-y-deps-x:jar:1.0-SNAPSHOT 
(compile), org.apache.maven.its.dependency-tree:module-x:jar:1.0-SNAPSHOT 
(compile)]".equals( resolved ) )
 {
     throw new Exception( "unexpected content in resolved-module-z-deps-y.txt 
written by ResolveDependenciesLifecycleParticipant" );
 }

Modified: 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/DependencyGraphBuilder.java
 Sat May 24 14:51:57 2014
@@ -46,14 +46,14 @@ public interface DependencyGraphBuilder
     /**
      * Build the dependency graph, with a hack to include dependencies 
contained in the reactor projects
      * but that are not yet compiled, which is the minimum prerequisite for 
Maven core's
-     * ReactorReader to find them. Notice that this hack doesn't work for 
Maven 2.
+     * ReactorReader to find them. Notice that this hack hasn't been done for 
Maven 2.
      * <p>Notice: If Maven core did collect instead of resolving dependencies 
(ie did not try to get the
      * artifacts but only the poms), probably this hack wouldn't be necessary 
even for people requiring
      * the dependency graph before compiling. TODO: for Maven 3, use Aether to 
collect dependencies.</p>
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the 
reactor.
+     * @param reactorProjects Collection of those projects contained in the 
reactor (can be <code>null</code>).
      * @return the dependency graph
      * @throws DependencyGraphBuilderException if some of the dependencies 
could not be resolved.
      */

Modified: 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
 Sat May 24 14:51:57 2014
@@ -63,7 +63,7 @@ public class DefaultDependencyGraphBuild
     public DependencyNode buildDependencyGraph( MavenProject project, 
ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, 
Collections.<MavenProject>emptyList() );
+        return buildDependencyGraph( project, filter, null );
     }
 
     /**
@@ -71,7 +71,7 @@ public class DefaultDependencyGraphBuild
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the 
reactor.
+     * @param reactorProjects Collection of those projects contained in the 
reactor (can be <code>null</code>)
      * @return DependencyNode containing the dependency graph.
      * @throws DependencyGraphBuilderException if some of the dependencies 
could not be resolved.
      */

Modified: 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven2DependencyGraphBuilder.java
 Sat May 24 14:51:57 2014
@@ -73,12 +73,13 @@ public class Maven2DependencyGraphBuilde
 
     /**
      * Builds the dependency graph for Maven 2.
-     *
-     * NB the reactor projects are ignored as Maven 2 is not able to resolve 
projects from the reactor.
-     *
-     * @param project           the project
-     * @param filter            artifact filter (can be <code>null</code>)
-     * @param reactorProjects   Ignored.
+     * <p>
+     * notice: the reactor projects are ignored as no work has been done to 
try to do the same hack as with Maven 3.
+     * </p>
+     * 
+     * @param project the project
+     * @param filter artifact filter (can be <code>null</code>)
+     * @param reactorProjects Ignored.
      * @return DependencyNode containing the dependency graph.
      * @throws DependencyGraphBuilderException if some of the dependencies 
could not be resolved.
      */
@@ -86,7 +87,11 @@ public class Maven2DependencyGraphBuilde
                                                 Collection<MavenProject> 
reactorProjects )
         throws DependencyGraphBuilderException
     {
-        getLogger().warn( "Reactor projects ignored - reactor dependencies 
cannot be resolved in Maven2" );
+        if ( reactorProjects != null )
+        {
+            getLogger().warn( "Reactor projects ignored - reactor project 
collection not implemented" );
+        }
+
         return buildDependencyGraph( project, filter );
     }
 

Modified: 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
 Sat May 24 14:51:57 2014
@@ -76,15 +76,16 @@ public class Maven31DependencyGraphBuild
     public DependencyNode buildDependencyGraph( MavenProject project, 
ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, 
Collections.<MavenProject>emptyList() );
+        return buildDependencyGraph( project, filter, null );
     }
 
     /**
-     * Builds the dependency graph for Maven 3.1+ including any dependencies 
from any projects in the reactor.
+     * Builds the dependency graph for Maven 3.1+, eventually hacking for 
collecting projects from
+     * reactor not yet built.
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the 
reactor.
+     * @param reactorProjects Collection of those projects contained in the 
reactor (can be <code>null</code>).
      * @return DependencyNode containing the dependency graph.
      * @throws DependencyGraphBuilderException if some of the dependencies 
could not be resolved.
      */
@@ -127,51 +128,51 @@ public class Maven31DependencyGraphBuild
         }
         catch ( DependencyResolutionException e )
         {
-            // Ignore any resolution failure for deps that are part of the 
reactor but have not yet been built.
-            // NB Typing has been removed because DependencyResolutionResult 
returns Sonatype Aether in 3.0.4 and
-            // Eclipse Aether in 3.1.1 and while dep-tree is a single module 
we can only compile against one of them.
-            //
-            // NB While applying this code to Maven3DependencyGraphBuilder is 
trivial it won't work because
-            // in Maven 3, MavenProject.getProjectReferences isn't populated. 
So we would need to have the reactor
-            // modules passed in separately which would change the API for 
DependencyGraphBuilder. If
-            // MavenProject.getProjectReferences were populated (like it 
should be) then this would work for Maven3 too.
-            //
-            // NB There doesn't seem to be any way to apply this to 
Maven2DependencyGraphBuilder as there is no
-            // concept of partial resolution like there is is 3 and 3.1
-            final DependencyResolutionResult result = e.getResult();
-
-            final List<Dependency> reactorDeps =
-                getReactorDependencies( reactorProjects, 
result.getUnresolvedDependencies() );
-            result.getUnresolvedDependencies().removeAll( reactorDeps );
-            Invoker.invoke( result.getResolvedDependencies(), "addAll", 
Collection.class, reactorDeps );
-
-            if ( !result.getUnresolvedDependencies().isEmpty() )
+            if ( reactorProjects == null )
             {
-                throw new DependencyGraphBuilderException( "Could not resolve 
the following dependencies: "
-                    + result.getUnresolvedDependencies(), e );
+                throw new DependencyGraphBuilderException( "Could not resolve 
following dependencies: "
+                    + e.getResult().getUnresolvedDependencies(), e );
             }
 
-            getLogger().debug( "Resolved dependencies after ignoring reactor 
dependencies: " + reactorDeps );
+            // try collecting from reactor
+            return collectDependenciesFromReactor( e, reactorProjects );
+        }
+    }
 
-            return result;
+    private DependencyResolutionResult collectDependenciesFromReactor( 
DependencyResolutionException e,
+                                                                       
Collection<MavenProject> reactorProjects )
+        throws DependencyGraphBuilderException
+    {
+        DependencyResolutionResult result = e.getResult();
+
+        List<Dependency> reactorDeps = getReactorDependencies( 
reactorProjects, result.getUnresolvedDependencies() );
+        result.getUnresolvedDependencies().removeAll( reactorDeps );
+        Invoker.invoke( result.getResolvedDependencies(), "addAll", 
Collection.class, reactorDeps );
+
+        if ( !result.getUnresolvedDependencies().isEmpty() )
+        {
+            throw new DependencyGraphBuilderException( "Could not resolve nor 
collect following dependencies: "
+                + result.getUnresolvedDependencies(), e );
         }
+
+        return result;
     }
 
     private List<Dependency> getReactorDependencies( Collection<MavenProject> 
reactorProjects, List<?> dependencies )
     {
-        final Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
-        for ( final MavenProject project : reactorProjects )
+        Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
+        for ( MavenProject project : reactorProjects )
         {
             reactorProjectsIds.add( new ArtifactKey( project ) );
         }
 
-        final List<Dependency> reactorDeps = new ArrayList<Dependency>();
-        for ( final Object untypedDependency : dependencies )
+        List<Dependency> reactorDeps = new ArrayList<Dependency>();
+        for ( Object untypedDependency : dependencies )
         {
-            final Dependency dependency = (Dependency) untypedDependency;
-            final org.eclipse.aether.artifact.Artifact depArtifact = 
dependency.getArtifact();
+            Dependency dependency = (Dependency) untypedDependency;
+            org.eclipse.aether.artifact.Artifact depArtifact = 
dependency.getArtifact();
 
-            final ArtifactKey key =
+            ArtifactKey key =
                 new ArtifactKey( depArtifact.getGroupId(), 
depArtifact.getArtifactId(), depArtifact.getVersion() );
 
             if ( reactorProjectsIds.contains( key ) )

Modified: 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java?rev=1597312&r1=1597311&r2=1597312&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
 (original)
+++ 
maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
 Sat May 24 14:51:57 2014
@@ -75,15 +75,16 @@ public class Maven3DependencyGraphBuilde
     public DependencyNode buildDependencyGraph( MavenProject project, 
ArtifactFilter filter )
         throws DependencyGraphBuilderException
     {
-        return buildDependencyGraph( project, filter, 
Collections.<MavenProject>emptyList() );
+        return buildDependencyGraph( project, filter, null );
     }
 
     /**
-     * Builds the dependency graph for Maven 3 including any dependencies from 
any projects in the reactor.
+     * Builds the dependency graph for Maven 3, eventually hacking for 
collecting projects from
+     * reactor not yet built.
      *
      * @param project the project
      * @param filter artifact filter (can be <code>null</code>)
-     * @param reactorProjects Collection of those projects contained in the 
reactor.
+     * @param reactorProjects Collection of those projects contained in the 
reactor (can be <code>null</code>).
      * @return DependencyNode containing the dependency graph.
      * @throws DependencyGraphBuilderException if some of the dependencies 
could not be resolved.
      */
@@ -97,7 +98,7 @@ public class Maven3DependencyGraphBuilde
         DependencyResolutionRequest request =
             new DefaultDependencyResolutionRequest( project, 
projectBuildingRequest.getRepositorySession() );
 
-        final DependencyResolutionResult result = resolveDependencies( 
request, reactorProjects );
+        DependencyResolutionResult result = resolveDependencies( request, 
reactorProjects );
 
         return buildDependencyNode( null, result.getDependencyGraph(), 
project.getArtifact(), filter );
     }
@@ -112,52 +113,53 @@ public class Maven3DependencyGraphBuilde
         }
         catch ( DependencyResolutionException e )
         {
-            // Ignore any resolution failure for deps that are part of the 
reactor but have not yet been built.
-            // NB Typing has been removed because DependencyResolutionResult 
returns Sonatype aether in 3.0.4 and
-            // Eclipse aether in 3.1.1 and while dep-tree is a single module 
we can only compile against one of them.
-            //
-            // NB While applying this code to Maven3DependencyGraphBuilder is 
trivial it won't work because
-            // in Maven 3, MavenProject.getProjectReferences isn't populated. 
So we would need to have the reactor
-            // modules passed in separately which would change the API for 
DependencyGraphBuilder. If
-            // MavenProject.getProjectReferences were populated (like it 
should be) then this would work for Maven3 too.
-            //
-            // NB There doesn't seem to be any way to apply this to 
Maven2DependencyGraphBuilder as there is no
-            // concept of partial resolution like there is is 3 and 3.1
-            final DependencyResolutionResult result = e.getResult();
-
-            final List<Dependency> reactorDeps =
-                getReactorDependencies( reactorProjects, 
result.getUnresolvedDependencies() );
-            result.getUnresolvedDependencies().removeAll( reactorDeps );
-            Invoker.invoke( result.getResolvedDependencies(), "addAll", 
Collection.class, reactorDeps );
-
-            if ( !result.getUnresolvedDependencies().isEmpty() )
+            if ( reactorProjects == null )
             {
-                throw new DependencyGraphBuilderException( "Could not resolve 
the following dependencies: "
-                    + result.getUnresolvedDependencies(), e );
+                throw new DependencyGraphBuilderException( "Could not resolve 
following dependencies: "
+                    + e.getResult().getUnresolvedDependencies(), e );
             }
 
-            getLogger().debug( "Resolved dependencies after ignoring reactor 
dependencies: " + reactorDeps );
+            // try collecting from reactor
+            return collectDependenciesFromReactor( e, reactorProjects );
+        }
+    }
+
+    private DependencyResolutionResult collectDependenciesFromReactor( 
DependencyResolutionException e,
+                                                                       
Collection<MavenProject> reactorProjects )
+        throws DependencyGraphBuilderException
+    {
+        DependencyResolutionResult result = e.getResult();
+
+        List<Dependency> reactorDeps = getReactorDependencies( 
reactorProjects, result.getUnresolvedDependencies() );
+
+        result.getUnresolvedDependencies().removeAll( reactorDeps );
+        Invoker.invoke( result.getResolvedDependencies(), "addAll", 
Collection.class, reactorDeps );
 
-            return result;
+        if ( !result.getUnresolvedDependencies().isEmpty() )
+        {
+            throw new DependencyGraphBuilderException( "Could not resolve nor 
collect following dependencies: "
+                + result.getUnresolvedDependencies(), e );
         }
+
+        return result;
     }
 
     private List<org.sonatype.aether.graph.Dependency> getReactorDependencies( 
Collection<MavenProject> reactorProjects,
                                                                                
List<?> dependencies )
     {
-        final Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
-        for ( final MavenProject project : reactorProjects )
+        Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>();
+        for ( MavenProject project : reactorProjects )
         {
             reactorProjectsIds.add( new ArtifactKey( project ) );
         }
 
-        final List<Dependency> reactorDeps = new ArrayList<Dependency>();
-        for ( final Object untypedDependency : dependencies )
+        List<Dependency> reactorDeps = new ArrayList<Dependency>();
+        for ( Object untypedDependency : dependencies )
         {
-            final Dependency dependency = (Dependency) untypedDependency;
-            final org.sonatype.aether.artifact.Artifact depArtifact = 
dependency.getArtifact();
+            Dependency dependency = (Dependency) untypedDependency;
+            org.sonatype.aether.artifact.Artifact depArtifact = 
dependency.getArtifact();
 
-            final ArtifactKey key =
+            ArtifactKey key =
                 new ArtifactKey( depArtifact.getGroupId(), 
depArtifact.getArtifactId(), depArtifact.getVersion() );
 
             if ( reactorProjectsIds.contains( key ) )


Reply via email to