[MSHARED-250] updated support for Maven 3.1-alpha-1/Eclipse Aether 0.9.0-M2

git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1467812 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index ae98e2d..ec3399f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,9 +78,14 @@
     <dependency>
       <groupId>org.eclipse.aether</groupId>
       <artifactId>aether-api</artifactId>
-      <version>0.9.0.M1</version>
+      <version>0.9.0.M2</version>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-util</artifactId>
+      <version>0.9.0.M2</version>
+    </dependency>
 
     <dependency>
       <groupId>jmock</groupId>
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
index bc229d0..9caacf0 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyGraphBuilder.java
@@ -73,16 +73,7 @@
      */
     protected static boolean isMaven2x()
     {
-        try
-        {
-            Thread.currentThread().getContextClassLoader().loadClass( "org.apache.maven.project.DependencyResolutionRequest" ); // Maven 3 specific
-
-            return false;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            return true;
-        }
+        return !canFindCoreClass( "org.apache.maven.project.DependencyResolutionRequest" ); // Maven 3 specific
     }
 
     /**
@@ -90,15 +81,20 @@
      */
     protected static boolean isMaven31()
     {
+        return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+    }
+
+    private static boolean canFindCoreClass( String className)
+    {
         try
         {
-            Class.forName( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+            Thread.currentThread().getContextClassLoader().loadClass( className );
 
-            return false;
+            return true;
         }
         catch ( ClassNotFoundException e )
         {
-            return true;
+            return false;
         }
     }
 
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
index e7d2644..e288f4d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
@@ -40,7 +40,10 @@
 import org.apache.maven.shared.dependency.graph.DependencyNode;

 import org.codehaus.plexus.component.annotations.Component;

 import org.codehaus.plexus.component.annotations.Requirement;

+import org.eclipse.aether.DefaultRepositorySystemSession;

+import org.eclipse.aether.RepositorySystemSession;

 import org.eclipse.aether.graph.Dependency;

+import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;

 import org.eclipse.aether.version.VersionConstraint;

 

 /**

@@ -66,15 +69,31 @@
         try

         {

             ProjectBuildingRequest projectBuildingRequest =

-                (ProjectBuildingRequest) invoke( project, "getProjectBuildingRequest" );

+                (ProjectBuildingRequest) invoke( project.getClass(), project, "getProjectBuildingRequest" );

+

+            RepositorySystemSession session =

+                (RepositorySystemSession) invoke( ProjectBuildingRequest.class, projectBuildingRequest,

+                                                  "getRepositorySession" );

+

+            if ( Boolean.TRUE != ( (Boolean) session.getConfigProperties().get( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION ) ) )

+            {

+                DefaultRepositorySystemSession newSession = new DefaultRepositorySystemSession( session );

+                newSession.setConfigProperty( DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, true );

+                session = newSession;

+            }

 

             DependencyResolutionRequest request =

-                new DefaultDependencyResolutionRequest( project, projectBuildingRequest.getRepositorySession() );

+                new DefaultDependencyResolutionRequest();

+            request.setMavenProject( project );

+            invoke( request, "setRepositorySession", RepositorySystemSession.class, session );

 

             DependencyResolutionResult result = resolver.resolve( request );

 

-            return buildDependencyNode( null, (org.eclipse.aether.graph.DependencyNode) result.getDependencyGraph(),

-                                        project.getArtifact(), filter );

+            org.eclipse.aether.graph.DependencyNode graph =

+                (org.eclipse.aether.graph.DependencyNode) invoke( DependencyResolutionResult.class, result,

+                                                                  "getDependencyGraph" );

+

+            return buildDependencyNode( null, graph, project.getArtifact(), filter );

         }

         catch ( DependencyResolutionException e )

         {

@@ -94,10 +113,16 @@
         }

     }

 

-    private Object invoke( Object object, String method )

+    private Object invoke( Class<?> clazz, Object object, String method )

         throws IllegalAccessException, InvocationTargetException, NoSuchMethodException

     {

-        return object.getClass().getMethod( method ).invoke( object );

+        return clazz.getMethod( method ).invoke( object );

+    }

+

+    private Object invoke( Object object, String method, Class<?> clazz, Object arg )

+        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException

+    {

+        return object.getClass().getMethod( method, clazz ).invoke( object, arg );

     }

 

     private Artifact getDependencyArtifact( Dependency dep )

@@ -113,8 +138,11 @@
     private DependencyNode buildDependencyNode( DependencyNode parent, org.eclipse.aether.graph.DependencyNode node,

                                                 Artifact artifact, ArtifactFilter filter )

     {

+        String premanagedVersion = DependencyManagerUtils.getPremanagedVersion( node );

+        String premanagedScope = DependencyManagerUtils.getPremanagedScope( node );

+

         DefaultDependencyNode current =

-            new DefaultDependencyNode( parent, artifact, node.getPremanagedVersion(), node.getPremanagedScope(),

+            new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,

                                        getVersionSelectedFromRange( node.getVersionConstraint() ) );

 

         List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );