You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2020/04/04 15:44:05 UTC

[maven-artifact-transfer] 01/01: [MSHADRED-864] - Refactor and simplify code

This is an automated email from the ASF dual-hosted git repository.

khmarbaise pushed a commit to branch MSHARED-864
in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git

commit 7c565c788b83a885077e4006eaf06ef591ed090c
Author: Karl Heinz Marbaise <kh...@apache.org>
AuthorDate: Sat Apr 4 14:20:55 2020 +0200

    [MSHADRED-864] - Refactor and simplify code
---
 pom.xml                                            |  11 ++
 .../artifact/deployer/ArtifactDeployerMojo.java    |   8 +-
 .../artifact/installer/ArtifactInstallerMojo.java  |   8 +-
 .../plugin/project/deploy/ProjectDeployerMojo.java |  16 +--
 .../project/install/ProjectInstallerMojo.java      |  12 +-
 .../deploy/internal/DefaultArtifactDeployer.java   |  41 +++---
 .../transfer/artifact/deploy/internal/Invoker.java |  60 ++-------
 .../deploy/internal/Maven30ArtifactDeployer.java   |   9 +-
 .../deploy/internal/Maven31ArtifactDeployer.java   |   9 +-
 .../deploy/internal/MavenArtifactDeployer.java     |   2 +-
 .../install/internal/DefaultArtifactInstaller.java |  40 +++---
 .../artifact/install/internal/Invoker.java         |  60 ++-------
 .../install/internal/Maven30ArtifactInstaller.java |   5 +-
 .../install/internal/Maven31ArtifactInstaller.java |   5 +-
 .../install/internal/MavenArtifactInstaller.java   |   2 +-
 .../resolve/internal/DefaultArtifactResolver.java  |  60 ++++-----
 .../artifact/resolve/internal/Invoker.java         |  91 ++-----------
 .../resolve/internal/Maven30ArtifactResolver.java  |   8 +-
 .../resolve/internal/Maven30ArtifactResult.java    |   8 +-
 .../resolve/internal/Maven31ArtifactResolver.java  |  16 +--
 .../resolve/internal/Maven31ArtifactResult.java    |   2 +-
 .../resolve/internal/MavenArtifactResolver.java    |   2 +-
 .../internal/DefaultDependencyCollector.java       | 107 +++++++--------
 .../transfer/collection/internal/Invoker.java      | 107 +++------------
 .../internal/Maven30DependencyCollector.java       |  19 ++-
 .../internal/Maven30DependencyNodeAdapter.java     |   2 +-
 .../internal/Maven31DependencyCollector.java       |  16 +--
 .../internal/Maven31DependencyNodeAdapter.java     |   2 +-
 .../internal/MavenDependencyCollector.java         |   2 +-
 .../internal/DefaultDependencyCollector.java       |  53 ++++----
 .../dependencies/collect/internal/Invoker.java     | 120 ++++-------------
 .../internal/Maven30DependencyCollector.java       |  86 ++++++------
 .../internal/Maven31DependencyCollector.java       |  87 ++++++------
 .../collect/internal/MavenDependencyCollector.java |   2 +-
 .../internal/DefaultDependencyResolver.java        |  64 ++++-----
 .../dependencies/resolve/internal/Invoker.java     |  79 +++--------
 .../resolve/internal/Maven30ArtifactResult.java    |   8 +-
 .../internal/Maven30DependencyResolver.java        | 147 +++++++++------------
 .../resolve/internal/Maven31ArtifactResult.java    |   2 +-
 .../internal/Maven31DependencyResolver.java        | 129 ++++++++----------
 .../resolve/internal/MavenDependencyResolver.java  |   2 +-
 .../install/internal/DefaultProjectInstaller.java  |   4 +-
 .../transfer/repository/internal/Invoker.java      |  48 ++-----
 .../internal/Maven31RepositoryManager.java         |   2 +-
 44 files changed, 535 insertions(+), 1028 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7eeaab6..23ccbea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,17 @@
   <build>
     <plugins>
       <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+            <configuration>
+            <showDeprecation>true</showDeprecation>
+            <compilerArgs>
+              <arg>-Xlint:deprecation</arg>
+              <arg>-Xlint:unchecked</arg>
+            </compilerArgs>
+          </configuration>
+      </plugin>
+      <plugin>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-component-metadata</artifactId>
         <executions>
diff --git a/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java b/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
index 2e40e67..07c72fd 100644
--- a/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
+++ b/src/it/maven-artifact-deployer-plugin/src/main/java/org/apache/maven/plugin/artifact/deployer/ArtifactDeployerMojo.java
@@ -130,13 +130,9 @@ public class ArtifactDeployerMojo
 
             deployer.deploy( session.getProjectBuildingRequest(), mavenArtifacts );
         }
-        catch ( ArtifactDeployerException e )
+        catch ( ArtifactDeployerException | IOException e )
         {
-            throw new MojoExecutionException( "ArtifactDeployerException", e );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "IOException", e );
+            throw new MojoExecutionException( e.getClass().getName(), e );
         }
     }
 
diff --git a/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java b/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
index f9f1496..3f7d5a1 100644
--- a/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
+++ b/src/it/maven-artifact-installer-plugin/src/main/java/org/apache/maven/plugin/artifact/installer/ArtifactInstallerMojo.java
@@ -127,13 +127,9 @@ public class ArtifactInstallerMojo
 
             installer.install( session.getProjectBuildingRequest(), mavenArtifacts );
         }
-        catch ( ArtifactInstallerException e )
+        catch ( ArtifactInstallerException | IOException e )
         {
-            throw new MojoExecutionException( "ArtifactInstallerException", e );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "IOException", e );
+            throw new MojoExecutionException( e.getClass().getName(), e );
         }
 
     }
diff --git a/src/it/maven-project-deployer-plugin/src/main/java/org/apache/maven/plugin/project/deploy/ProjectDeployerMojo.java b/src/it/maven-project-deployer-plugin/src/main/java/org/apache/maven/plugin/project/deploy/ProjectDeployerMojo.java
index 26c794e..39a2fb7 100644
--- a/src/it/maven-project-deployer-plugin/src/main/java/org/apache/maven/plugin/project/deploy/ProjectDeployerMojo.java
+++ b/src/it/maven-project-deployer-plugin/src/main/java/org/apache/maven/plugin/project/deploy/ProjectDeployerMojo.java
@@ -114,21 +114,9 @@ public class ProjectDeployerMojo
             ArtifactRepository repo = session.getCurrentProject().getDistributionManagementArtifactRepository();
             deployer.deploy( session.getProjectBuildingRequest(), pdr, repo );
         }
-        catch ( IOException e )
+        catch ( IOException | NoFileAssignedException | IllegalArgumentException | ArtifactDeployerException e )
         {
-            throw new MojoExecutionException( "IOException", e );
-        }
-        catch ( NoFileAssignedException e )
-        {
-            throw new MojoExecutionException( "NoFileAssignedException", e );
-        }
-        catch ( IllegalArgumentException e )
-        {
-            throw new MojoExecutionException( "IllegalArgumentException", e );
-        }
-        catch ( ArtifactDeployerException e )
-        {
-            throw new MojoExecutionException( "ArtifactDeployerException", e );
+            throw new MojoExecutionException( e.getClass().getName(), e);
         }
 
     }
diff --git a/src/it/maven-project-installer-plugin/src/main/java/org/apache/maven/plugin/project/install/ProjectInstallerMojo.java b/src/it/maven-project-installer-plugin/src/main/java/org/apache/maven/plugin/project/install/ProjectInstallerMojo.java
index 2e6a878..ee932aa 100644
--- a/src/it/maven-project-installer-plugin/src/main/java/org/apache/maven/plugin/project/install/ProjectInstallerMojo.java
+++ b/src/it/maven-project-installer-plugin/src/main/java/org/apache/maven/plugin/project/install/ProjectInstallerMojo.java
@@ -110,17 +110,9 @@ public class ProjectInstallerMojo
             pir.setProject( session.getCurrentProject());
             installer.install( pbr, pir );
         }
-        catch ( ArtifactInstallerException e )
+        catch ( ArtifactInstallerException | IOException | NoFileAssignedException e )
         {
-            throw new MojoExecutionException( "ArtifactInstallerException", e );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "IOException", e );
-        }
-        catch ( NoFileAssignedException e )
-        {
-            throw new MojoExecutionException( "NoFileAssignedException", e );
+            throw new MojoExecutionException( e.getClass().getName(), e );
         }
 
     }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
index c6f2858..ff2b097 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/DefaultArtifactDeployer.java
@@ -35,18 +35,17 @@ import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
- * 
+ *
  */
 @Component( role = ArtifactDeployer.class )
-class DefaultArtifactDeployer
-    implements ArtifactDeployer, Contextualizable
+class DefaultArtifactDeployer implements ArtifactDeployer, Contextualizable
 {
 
     private PlexusContainer container;
 
     @Override
     public void deploy( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException
+            throws ArtifactDeployerException
     {
         validateParameters( request, mavenArtifacts );
 
@@ -62,8 +61,7 @@ class DefaultArtifactDeployer
 
     @Override
     public void deploy( ProjectBuildingRequest request, ArtifactRepository remoteRepository,
-                        Collection<Artifact> mavenArtifacts )
-        throws ArtifactDeployerException
+            Collection<Artifact> mavenArtifacts ) throws ArtifactDeployerException
     {
         validateParameters( request, mavenArtifacts );
         try
@@ -120,33 +118,32 @@ class DefaultArtifactDeployer
      * @param context Plexus context to inject.
      * @throws ContextException if the PlexusContainer could not be located.
      */
-    public void contextualize( Context context )
-        throws ContextException
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
-    
+
     private MavenArtifactDeployer getMavenArtifactDeployer( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, ArtifactDeployerException
+            throws ComponentLookupException, ArtifactDeployerException
     {
         if ( isMaven31() )
         {
-            org.eclipse.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.eclipse.aether.RepositorySystem.class );
-            
-            org.eclipse.aether.RepositorySystemSession session =
-                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-            
+            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
+
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
             return new Maven31ArtifactDeployer( repositorySystem, session );
         }
         else
         {
-            org.sonatype.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.sonatype.aether.RepositorySystem.class );
-            
-            org.sonatype.aether.RepositorySystemSession session =
-                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-            
+            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
+
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
             return new Maven30ArtifactDeployer( repositorySystem, session );
         }
     }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
index 1102163..485e58d 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Invoker.java
@@ -33,71 +33,31 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws ArtifactDeployerException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
+    public static <T> T invoke( Object object, String method )
         throws ArtifactDeployerException
     {
         try
         {
-            return objectClazz.getMethod( method ).invoke( object );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactDeployerException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> clazz, Object arg )
-        throws ArtifactDeployerException
-    {
-        try
-        {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, clazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-    }
-    
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
                     throws ArtifactDeployerException
     {
         try
         {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactDeployerException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactDeployerException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
index e8ef395..611eb4c 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven30ArtifactDeployer.java
@@ -78,9 +78,8 @@ class Maven30ArtifactDeployer
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact aetherArtifact =
-                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
             request.addArtifact( aetherArtifact );
 
             RemoteRepository aetherRepository;
@@ -132,11 +131,9 @@ class Maven30ArtifactDeployer
     private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
         throws ArtifactDeployerException
     {
-        // CHECKSTYLE_OFF: LineLength
-        RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
+        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo",
                                                                          ArtifactRepository.class,
                                                                          remoteRepository );
-        // CHECKSTYLE_ON: LineLength
 
         if ( aetherRepo.getAuthentication() == null )
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
index 52c7295..8865c69 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/Maven31ArtifactDeployer.java
@@ -79,9 +79,8 @@ class Maven31ArtifactDeployer
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact aetherArtifact =
-                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
             request.addArtifact( aetherArtifact );
 
             RemoteRepository aetherRepository;
@@ -103,7 +102,7 @@ class Maven31ArtifactDeployer
                     Artifact pomArtifact = new SubArtifact( aetherArtifact, "", "pom" );
                     pomArtifact = pomArtifact.setFile( ( (ProjectArtifactMetadata) metadata ).getFile() );
                     request.addArtifact( pomArtifact );
-                }
+                 }
                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
                 metadata instanceof ArtifactRepositoryMetadata )
                 {
@@ -134,7 +133,7 @@ class Maven31ArtifactDeployer
         throws ArtifactDeployerException
     {
         // CHECKSTYLE_OFF: LineLength
-        RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
+        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo",
                                                                          ArtifactRepository.class,
                                                                          remoteRepository );
         // CHECKSTYLE_ON: LineLength
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
index c4f0446..8f9fea1 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/deploy/internal/MavenArtifactDeployer.java
@@ -30,7 +30,7 @@ import org.apache.maven.shared.transfer.artifact.deploy.ArtifactDeployerExceptio
  * @author Robert Scholte
  *
  */
-public interface MavenArtifactDeployer
+interface MavenArtifactDeployer
 {
 
     void deploy( Collection<Artifact> mavenArtifacts )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
index f8a56f7..738f00e 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/DefaultArtifactInstaller.java
@@ -36,19 +36,18 @@ import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
- * 
+ *
  */
 @Component( role = ArtifactInstaller.class )
-class DefaultArtifactInstaller
-    implements ArtifactInstaller, Contextualizable
+class DefaultArtifactInstaller implements ArtifactInstaller, Contextualizable
 {
     private PlexusContainer container;
-    
+
     private RepositoryManager repositoryManager;
 
     @Override
     public void install( ProjectBuildingRequest request, Collection<Artifact> mavenArtifacts )
-        throws ArtifactInstallerException, IllegalArgumentException
+            throws ArtifactInstallerException, IllegalArgumentException
     {
         validateParameters( request, mavenArtifacts );
         try
@@ -63,7 +62,7 @@ class DefaultArtifactInstaller
 
     @Override
     public void install( ProjectBuildingRequest request, File localRepositry, Collection<Artifact> mavenArtifacts )
-        throws ArtifactInstallerException
+            throws ArtifactInstallerException
     {
         validateParameters( request, mavenArtifacts );
         if ( localRepositry == null )
@@ -76,7 +75,7 @@ class DefaultArtifactInstaller
         }
 
         // TODO: Should we check for exists() ?
-        
+
         // update local repo in request 
         ProjectBuildingRequest newRequest = repositoryManager.setLocalRepositoryBasedir( request, localRepositry );
 
@@ -134,32 +133,31 @@ class DefaultArtifactInstaller
      * @param context Plexus context to inject.
      * @throws ContextException if the PlexusContainer could not be located.
      */
-    public void contextualize( Context context )
-        throws ContextException
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
-    
+
     private MavenArtifactInstaller getMavenArtifactInstaller( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, ArtifactInstallerException
+            throws ComponentLookupException, ArtifactInstallerException
     {
         if ( isMaven31() )
         {
-            org.eclipse.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.eclipse.aether.RepositorySystem.class );
-            
-            org.eclipse.aether.RepositorySystemSession session =
-                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
+
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
             return new Maven31ArtifactInstaller( repositorySystem, session );
         }
         else
         {
-            org.sonatype.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.sonatype.aether.RepositorySystem.class );
-            
-            org.sonatype.aether.RepositorySystemSession session =
-                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
+
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
             return new Maven30ArtifactInstaller( repositorySystem, session );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
index f748e04..eb8c69e 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Invoker.java
@@ -33,71 +33,31 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws ArtifactInstallerException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
-        throws ArtifactInstallerException
-    {
-        try
-        {
-            return objectClazz.getMethod( method ).invoke( object );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-    }
-
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Object object, String method )
         throws ArtifactInstallerException
     {
         try
         {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactInstallerException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
         throws ArtifactInstallerException
     {
         try
         {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactInstallerException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactInstallerException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
index 2a15dfd..fbff698 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven30ArtifactInstaller.java
@@ -60,9 +60,8 @@ class Maven30ArtifactInstaller
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact mainArtifact =
-                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact mainArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
             request.addArtifact( mainArtifact );
 
             for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
index e4eae74..aa15504 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/Maven31ArtifactInstaller.java
@@ -61,9 +61,8 @@ class Maven31ArtifactInstaller
         // transform artifacts
         for ( org.apache.maven.artifact.Artifact mavenArtifact : mavenArtifacts )
         {
-            Artifact mainArtifact =
-                (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                           org.apache.maven.artifact.Artifact.class, mavenArtifact );
+            Artifact mainArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                                       org.apache.maven.artifact.Artifact.class, mavenArtifact );
             request.addArtifact( mainArtifact );
 
             for ( ArtifactMetadata metadata : mavenArtifact.getMetadataList() )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
index 7670d57..6d6509d 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/install/internal/MavenArtifactInstaller.java
@@ -29,7 +29,7 @@ import org.apache.maven.shared.transfer.artifact.install.ArtifactInstallerExcept
  * @author Robert Scholte
  *
  */
-public interface MavenArtifactInstaller
+interface MavenArtifactInstaller
 {
     void install( Collection<Artifact> mavenArtifacts )
         throws ArtifactInstallerException;
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
index 9f1826b..00f6600 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/DefaultArtifactResolver.java
@@ -38,17 +38,16 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 
 /**
- * 
+ *
  */
 @Component( role = ArtifactResolver.class, hint = "default" )
-class DefaultArtifactResolver
-    implements ArtifactResolver, Contextualizable
+class DefaultArtifactResolver implements ArtifactResolver, Contextualizable
 {
     private PlexusContainer container;
 
     @Override
     public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, Artifact mavenArtifact )
-        throws ArtifactResolverException, IllegalArgumentException
+            throws ArtifactResolverException, IllegalArgumentException
     {
         validateParameters( buildingRequest, mavenArtifact );
         try
@@ -63,7 +62,7 @@ class DefaultArtifactResolver
 
     @Override
     public ArtifactResult resolveArtifact( ProjectBuildingRequest buildingRequest, ArtifactCoordinate coordinate )
-        throws ArtifactResolverException, IllegalArgumentException
+            throws ArtifactResolverException, IllegalArgumentException
     {
         validateParameters( buildingRequest, coordinate );
         try
@@ -128,46 +127,39 @@ class DefaultArtifactResolver
      * @param context Plexus context to inject.
      * @throws ContextException if the PlexusContainer could not be located.
      */
-    public void contextualize( Context context )
-        throws ContextException
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
-    
+
     private MavenArtifactResolver getMavenArtifactResolver( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, ArtifactResolverException
+            throws ComponentLookupException, ArtifactResolverException
     {
         if ( isMaven31() )
         {
-            org.eclipse.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.eclipse.aether.RepositorySystem.class );
-            
-            @SuppressWarnings( "unchecked" )
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
-                                                                           List.class,
-                                                                           buildingRequest.getRemoteRepositories() );
-
-            org.eclipse.aether.RepositorySystemSession session =
-                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-            
+            org.eclipse.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
+
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
             return new Maven31ArtifactResolver( repositorySystem, aetherRepositories, session );
-            
+
         }
         else
         {
-            org.sonatype.aether.RepositorySystem repositorySystem =
-                            container.lookup( org.sonatype.aether.RepositorySystem.class );
-            
-            @SuppressWarnings( "unchecked" )
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,
-                                                                            "toRepos", List.class,
-                                                                            buildingRequest.getRemoteRepositories() );
-
-            org.sonatype.aether.RepositorySystemSession session =
-                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-            
+            org.sonatype.aether.RepositorySystem repositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
+
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
+
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
+
             return new Maven30ArtifactResolver( repositorySystem, aetherRepositories, session );
         }
 
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
index d3ff34e..329e2c6 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Invoker.java
@@ -28,109 +28,40 @@ import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolverExcepti
  */
 final class Invoker
 {
+
     private Invoker()
     {
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws ArtifactResolverException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
-        throws ArtifactResolverException
-    {
-        try
-        {
-            return objectClazz.getMethod( method ).invoke( object );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
-
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Object object, String method )
         throws ArtifactResolverException
     {
         try
         {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
         throws ArtifactResolverException
     {
         try
         {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
     }
 
-    /**
-     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
-     * 
-     * @param objectClazz the class of the static method
-     * @param staticMethod the static method to call
-     * @param argClasses the classes of the argument, used to select the right static method
-     * @param args the actual arguments to be passed
-     * @return the result of the method invocation
-     * @throws ArtifactResolverException if any checked exception occurs
-     */
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-        throws ArtifactResolverException
-    {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
index e5f820c..95a6dc5 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResolver.java
@@ -61,7 +61,7 @@ class Maven30ArtifactResolver
                                                                                         throws ArtifactResolverException
     // CHECKSTYLE_ON: LineLength
     {
-        Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+        Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                              org.apache.maven.artifact.Artifact.class, mavenArtifact );
 
         return resolveArtifact( aetherArtifact );
@@ -98,11 +98,7 @@ class Maven30ArtifactResolver
 
             return new Maven30ArtifactResult( repositorySystem.resolveArtifact( session, request ) );
         }
-        catch ( ArtifactDescriptorException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( ArtifactResolutionException e )
+        catch ( ArtifactDescriptorException | ArtifactResolutionException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
index 8358096..3bbea28 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven30ArtifactResult.java
@@ -26,12 +26,11 @@ import org.sonatype.aether.resolution.ArtifactResult;
 
 /**
  * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
+ *
  * @author Robert Scholte
  * @since 3.0
  */
-class Maven30ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
 {
     private final ArtifactResult artifactResult;
 
@@ -48,8 +47,7 @@ class Maven30ArtifactResult
     {
         try
         {
-            return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
         }
         catch ( ArtifactResolverException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
index 888a683..9ef5658 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResolver.java
@@ -56,13 +56,11 @@ class Maven31ArtifactResolver
     }
 
     @Override
-    // CHECKSTYLE_OFF: LineLength
-    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact( org.apache.maven.artifact.Artifact mavenArtifact )
-                                                                                        throws ArtifactResolverException
-    // CHECKSTYLE_ON: LineLength
+    public org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult resolveArtifact(
+            org.apache.maven.artifact.Artifact mavenArtifact ) throws ArtifactResolverException
     {
-        Artifact aetherArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                             org.apache.maven.artifact.Artifact.class, mavenArtifact );
+        Artifact aetherArtifact = Invoker.invoke( RepositoryUtils.class, "toArtifact",
+                org.apache.maven.artifact.Artifact.class, mavenArtifact );
 
         return resolveArtifact( aetherArtifact );
     }
@@ -98,11 +96,7 @@ class Maven31ArtifactResolver
 
             return new Maven31ArtifactResult( repositorySystem.resolveArtifact( session, request ) );
         }
-        catch ( ArtifactDescriptorException e )
-        {
-            throw new ArtifactResolverException( e.getMessage(), e );
-        }
-        catch ( ArtifactResolutionException e )
+        catch ( ArtifactDescriptorException | ArtifactResolutionException e )
         {
             throw new ArtifactResolverException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
index 055ee22..7b56826 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/Maven31ArtifactResult.java
@@ -48,7 +48,7 @@ class Maven31ArtifactResult
     {
         try
         {
-            return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                                         Artifact.class, artifactResult.getArtifact() );
         }
         catch ( ArtifactResolverException e )
diff --git a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
index 2e9fb74..2413968 100644
--- a/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/artifact/resolve/internal/MavenArtifactResolver.java
@@ -29,7 +29,7 @@ import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
  * @author Robert Scholte
  *
  */
-public interface MavenArtifactResolver
+interface MavenArtifactResolver
 {
     ArtifactResult resolveArtifact( Artifact mavenArtifact ) throws ArtifactResolverException;
 
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
index 2c8151a..962fd0a 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/DefaultDependencyCollector.java
@@ -27,10 +27,10 @@ import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
 import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.apache.maven.shared.transfer.collection.CollectResult;
 import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
 import org.apache.maven.shared.transfer.collection.DependencyCollector;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.annotations.Component;
@@ -51,7 +51,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
 
     @Override
     public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-        throws DependencyCollectionException
+            throws DependencyCollectionException
     {
         validateParameters( buildingRequest, root );
 
@@ -67,7 +67,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
 
     @Override
     public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-        throws DependencyCollectionException
+            throws DependencyCollectionException
     {
         validateParameters( buildingRequest, root );
 
@@ -83,7 +83,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
 
     @Override
     public CollectResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-        throws DependencyCollectionException
+            throws DependencyCollectionException
     {
         validateParameters( buildingRequest, root );
 
@@ -95,7 +95,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
         {
             throw new DependencyCollectionException( e.getMessage(), e );
         }
-  }
+    }
 
   private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
   {
@@ -136,72 +136,65 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
     return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
   }
 
-  private boolean canFindCoreClass( String className )
-  {
-    try
+    private boolean canFindCoreClass( String className )
     {
-      Thread.currentThread().getContextClassLoader().loadClass( className );
+        try
+        {
+            Thread.currentThread().getContextClassLoader().loadClass( className );
 
-      return true;
+            return true;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            return false;
+        }
     }
-    catch ( ClassNotFoundException e )
+
+    /**
+     * Injects the Plexus content.
+     *
+     * @param context Plexus context to inject.
+     * @throws ContextException if the PlexusContainer could not be located.
+     */
+    public void contextualize( Context context ) throws ContextException
     {
-      return false;
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
-  }
 
-  /**
-   * Injects the Plexus content.
-   *
-   * @param context Plexus context to inject.
-   * @throws ContextException if the PlexusContainer could not be located.
-   */
-  public void contextualize( Context context )
-      throws ContextException
-  {
-    container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-  }
+    private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
+            throws ComponentLookupException, DependencyCollectionException
+    {
+        ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
 
-  private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
-      throws ComponentLookupException, DependencyCollectionException
-  {
-    ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
+        if ( isMaven31() )
+        {
+            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
 
-    if ( isMaven31() )
-    {
-      org.eclipse.aether.RepositorySystem m31RepositorySystem =
-          container.lookup( org.eclipse.aether.RepositorySystem.class );
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-      org.eclipse.aether.RepositorySystemSession session =
-          (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
-      @SuppressWarnings( "unchecked" )
-      List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =
-          (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
-              List.class,
-              buildingRequest.getRemoteRepositories() );
+            return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+        }
+        else
+        {
+            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
 
-      return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-          aetherRepositories );
-    }
-    else
-    {
-      org.sonatype.aether.RepositorySystem m30RepositorySystem =
-          container.lookup( org.sonatype.aether.RepositorySystem.class );
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-      org.sonatype.aether.RepositorySystemSession session =
-          (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
-      @SuppressWarnings( "unchecked" )
-      List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =
-          ( List<org.sonatype.aether.repository.RemoteRepository> ) Invoker.invoke( RepositoryUtils.class,
-              "toRepos", List.class,
-              buildingRequest.getRemoteRepositories() );
+            return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
+                    aetherRepositories );
+        }
 
-      return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
-          aetherRepositories );
     }
 
-  }
-
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
index 31951f8..c78b5af 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Invoker.java
@@ -21,8 +21,8 @@ package org.apache.maven.shared.transfer.collection.internal;
 
 import java.lang.reflect.InvocationTargetException;
 
-import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
 import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
+import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
 
 /**
  * Invokes method on objects using reflection.
@@ -34,71 +34,31 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws DependencyCollectionException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
+    public static <T> T invoke( Object object, String method )
         throws DependencyCollectionException
     {
         try
         {
-            return objectClazz.getMethod( method ).invoke( object );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectionException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
-        throws DependencyCollectionException
-    {
-        try
-        {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
-    
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
                     throws DependencyCollectionException
     {
         try
         {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectionException( e.getMessage(), e );
         }
@@ -114,53 +74,24 @@ final class Invoker
      * @return the result of the method invocation
      * @throws DependencyCollectorException if any checked exception occurs
      */
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
                     throws DependencyCollectionException
     {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-        }
-        catch ( IllegalAccessException e )
+        if ( args.length != argClasses.length )
         {
-            throw new DependencyCollectionException( e.getMessage(), e );
+            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
         }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-    }
 
-    public static Object newInstance( Class<?> objectClazz, Class<?> argClazz, Object arg )
-        throws DependencyCollectionException
-    {
         try
         {
-            return objectClazz.getConstructor( argClazz ).newInstance( arg );
-        }
-        catch ( InstantiationException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            return invoke;
         }
-        catch ( IllegalArgumentException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectionException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectionException( e.getMessage(), e );
         }
     }
+
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
index 67e3556..5d9032d 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyCollector.java
@@ -26,10 +26,10 @@ import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.model.Model;
-import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.apache.maven.shared.transfer.collection.CollectResult;
 import org.apache.maven.shared.transfer.collection.DependencyCollectionException;
 import org.apache.maven.shared.transfer.collection.DependencyCollector;
+import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -70,10 +70,9 @@ class Maven30DependencyCollector
     public CollectResult collectDependencies( org.apache.maven.model.Dependency root )
         throws DependencyCollectionException
     {
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker
-                            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker
+            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
@@ -113,10 +112,9 @@ class Maven30DependencyCollector
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker
-                            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker
+            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
         List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
@@ -164,7 +162,6 @@ class Maven30DependencyCollector
 
         Object[] args = new Object[] { mavenDependency, typeRegistry };
 
-        return (Dependency) Invoker
-            .invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
     }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
index 052353f..b8e6ea9 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven30DependencyNodeAdapter.java
@@ -152,7 +152,7 @@ class Maven30DependencyNodeAdapter implements DependencyNode
     {
         try
         {
-            return (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
                 org.sonatype.aether.artifact.Artifact.class, aetherArtifact );
         }
         catch ( DependencyCollectionException e )
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
index b6c5744..ef5057b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyCollector.java
@@ -70,10 +70,9 @@ class Maven31DependencyCollector
     public CollectResult collectDependencies( org.apache.maven.model.Dependency root )
         throws DependencyCollectionException
     {
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker
-                            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker
+            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
@@ -113,10 +112,9 @@ class Maven31DependencyCollector
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker
-                            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker
+            .invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
         List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
@@ -163,7 +161,7 @@ class Maven31DependencyCollector
 
         Object[] args = new Object[] { root, typeRegistry };
 
-        return (Dependency) Invoker
+        return Invoker
             .invoke( RepositoryUtils.class, "toDependency", argClasses, args );
     }
 
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
index 3b3dbb7..5987f7f 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/Maven31DependencyNodeAdapter.java
@@ -152,7 +152,7 @@ class Maven31DependencyNodeAdapter implements DependencyNode
     {
         try
         {
-            return (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
                 org.eclipse.aether.artifact.Artifact.class, aetherArtifact );
         }
         catch ( DependencyCollectionException e )
diff --git a/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
index 2181380..fc7edb8 100644
--- a/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/collection/internal/MavenDependencyCollector.java
@@ -28,7 +28,7 @@ import org.apache.maven.shared.transfer.collection.DependencyCollectionException
 /**
  * @author Robert Scholte
  */
-public interface MavenDependencyCollector
+interface MavenDependencyCollector
 {
 
   CollectResult collectDependencies( Dependency root )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
index 0a61845..ca416ec 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -40,17 +40,17 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
  * This DependencyCollector passes the request to the proper Maven 3.x implementation
- * 
+ *
  * @author Robert Scholte
  */
 @Component( role = DependencyCollector.class, hint = "default" )
-class DefaultDependencyCollector implements DependencyCollector, Contextualizable 
+class DefaultDependencyCollector implements DependencyCollector, Contextualizable
 {
     private PlexusContainer container;
 
     @Override
     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
-        throws DependencyCollectorException
+            throws DependencyCollectorException
     {
         validateParameters( buildingRequest, root );
 
@@ -66,7 +66,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
 
     @Override
     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
-        throws DependencyCollectorException
+            throws DependencyCollectorException
     {
         validateParameters( buildingRequest, root );
 
@@ -82,7 +82,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
 
     @Override
     public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
-        throws DependencyCollectorException
+            throws DependencyCollectorException
     {
         validateParameters( buildingRequest, root );
 
@@ -158,51 +158,44 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
      * @param context Plexus context to inject.
      * @throws ContextException if the PlexusContainer could not be located.
      */
-    public void contextualize( Context context )
-        throws ContextException
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
-    
+
     private MavenDependencyCollector getMavenDependencyCollector( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, DependencyCollectorException
+            throws ComponentLookupException, DependencyCollectorException
     {
         ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-        
+
         if ( isMaven31() )
         {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem =
-                container.lookup( org.eclipse.aether.RepositorySystem.class );
+            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
 
-            org.eclipse.aether.RepositorySystemSession session =
-                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-            @SuppressWarnings( "unchecked" )
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
-                                                                           List.class,
-                                                                           buildingRequest.getRemoteRepositories() );
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
             return new Maven31DependencyCollector( m31RepositorySystem, artifactHandlerManager, session,
-                                                   aetherRepositories );
+                    aetherRepositories );
         }
         else
         {
 
-            org.sonatype.aether.RepositorySystem m30RepositorySystem =
-                            container.lookup( org.sonatype.aether.RepositorySystem.class );
+            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
 
-            org.sonatype.aether.RepositorySystemSession session =
-                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-            @SuppressWarnings( "unchecked" )
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,
-                                                                            "toRepos", List.class,
-                                                                            buildingRequest.getRemoteRepositories() );
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
             return new Maven30DependencyCollector( m30RepositorySystem, artifactHandlerManager, session,
-                                                   aetherRepositories );
+                    aetherRepositories );
         }
 
     }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
index 01a8410..17c7432 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Invoker.java
@@ -33,133 +33,61 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws DependencyCollectorException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
-        throws DependencyCollectorException
+    public static <T> T invoke( Object object, String method ) throws DependencyCollectorException
     {
         try
         {
-            return objectClazz.getMethod( method ).invoke( object );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectorException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
-        throws DependencyCollectorException
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+            throws DependencyCollectorException
     {
         try
         {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectorException( e.getMessage(), e );
         }
     }
-    
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-                    throws DependencyCollectorException
-    {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
-    
+
     /**
-     * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements 
-     * 
-     * @param objectClazz the class of the static method
+     * @param objectClazz  the class of the static method
      * @param staticMethod the static method to call
-     * @param argClasses the classes of the argument, used to select the right static method
-     * @param args the actual arguments to be passed
+     * @param argClasses   the classes of the argument, used to select the right static method
+     * @param args         the actual arguments to be passed
      * @return the result of the method invocation
      * @throws DependencyCollectorException if any checked exception occurs
      */
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
-                    throws DependencyCollectorException
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+            throws DependencyCollectorException
     {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
+        if ( args.length != argClasses.length )
         {
-            throw new DependencyCollectorException( e.getMessage(), e );
+            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
         }
-        catch ( NoSuchMethodException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-    }
 
-    public static Object newInstance( Class<?> objectClazz, Class<?> argClazz, Object arg )
-        throws DependencyCollectorException
-    {
         try
         {
-            return objectClazz.getConstructor( argClazz ).newInstance( arg );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            return invoke;
         }
-        catch ( InstantiationException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( IllegalArgumentException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyCollectorException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyCollectorException( e.getMessage(), e );
         }
     }
+
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
index 057e0bd..1a33fbc 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -42,23 +42,21 @@ import org.sonatype.aether.util.artifact.DefaultArtifact;
 
 /**
  * Maven 3.0 implementation of the {@link DependencyCollector}
- * 
- * @author Robert Scholte
  *
+ * @author Robert Scholte
  */
-class Maven30DependencyCollector
-    implements MavenDependencyCollector
+class Maven30DependencyCollector implements MavenDependencyCollector
 {
     private final RepositorySystem repositorySystem;
 
     private final ArtifactHandlerManager artifactHandlerManager;
 
     private final RepositorySystemSession session;
-    
+
     private final List<RemoteRepository> aetherRepositories;
-    
+
     Maven30DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
     {
         super();
         this.repositorySystem = repositorySystem;
@@ -67,13 +65,22 @@ class Maven30DependencyCollector
         this.aetherRepositories = aetherRepositories;
     }
 
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
+    {
+        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
+
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+    }
+
     @Override
     public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
-        throws DependencyCollectorException
+            throws DependencyCollectorException
     {
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
@@ -82,42 +89,39 @@ class Maven30DependencyCollector
     }
 
     @Override
-    public CollectorResult collectDependencies( DependableCoordinate root )
-        throws DependencyCollectorException
+    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
     {
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-        
+
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-        
+
         Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                                                       extension, root.getVersion() );
-        
+                extension, root.getVersion() );
+
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
         return collectDependencies( request );
     }
-    
+
     @Override
-    public CollectorResult collectDependencies( Model root )
-        throws DependencyCollectorException
+    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-        
+
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-        
-        Artifact aetherArtifact =
-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
-        
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
+                root.getVersion() );
+
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
 
-        List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
+        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
         {
             aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
@@ -126,22 +130,21 @@ class Maven30DependencyCollector
 
         if ( root.getDependencyManagement() != null )
         {
-            List<Dependency> aetherManagerDependencies =
-                new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );
-            
+            List<Dependency> aetherManagerDependencies = new ArrayList<>(
+                    root.getDependencyManagement().getDependencies().size() );
+
             for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
             {
                 aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
             }
-            
+
             request.setManagedDependencies( aetherManagerDependencies );
         }
-        
+
         return collectDependencies( request );
     }
 
-    private CollectorResult collectDependencies( CollectRequest request )
-        throws DependencyCollectorException
+    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
     {
         request.setRepositories( aetherRepositories );
 
@@ -154,15 +157,4 @@ class Maven30DependencyCollector
             throw new DependencyCollectorException( e.getMessage(), e );
         }
     }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-                                            ArtifactTypeRegistry typeRegistry )
-        throws DependencyCollectorException
-    {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-        Object[] args = new Object[] { mavenDependency, typeRegistry };
-
-        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
index 0ee0385..de98210 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -42,23 +42,21 @@ import org.eclipse.aether.repository.RemoteRepository;
 
 /**
  * Maven 3.1+ implementation of the {@link DependencyCollector}
- * 
- * @author Robert Scholte
  *
+ * @author Robert Scholte
  */
-class Maven31DependencyCollector
-    implements MavenDependencyCollector
+class Maven31DependencyCollector implements MavenDependencyCollector
 {
     private final RepositorySystem repositorySystem;
 
     private final ArtifactHandlerManager artifactHandlerManager;
-    
+
     private final RepositorySystemSession session;
-    
+
     private final List<RemoteRepository> aetherRepositories;
-    
+
     Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
-                                RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
     {
         super();
         this.repositorySystem = repositorySystem;
@@ -67,13 +65,22 @@ class Maven31DependencyCollector
         this.aetherRepositories = aetherRepositories;
     }
 
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyCollectorException
+    {
+        Class<?>[] argClasses = new Class<?>[] {org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class};
+
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+    }
+
     @Override
     public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
-        throws DependencyCollectorException
+            throws DependencyCollectorException
     {
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
 
         CollectRequest request = new CollectRequest();
         request.setRoot( toDependency( root, typeRegistry ) );
@@ -82,42 +89,39 @@ class Maven31DependencyCollector
     }
 
     @Override
-    public CollectorResult collectDependencies( DependableCoordinate root )
-        throws DependencyCollectorException
+    public CollectorResult collectDependencies( DependableCoordinate root ) throws DependencyCollectorException
     {
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
-        
+
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-        
+
         Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
-                                                       extension, root.getVersion() );
-        
+                extension, root.getVersion() );
+
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
 
         return collectDependencies( request );
     }
-    
+
     @Override
-    public CollectorResult collectDependencies( Model root )
-        throws DependencyCollectorException
+    public CollectorResult collectDependencies( Model root ) throws DependencyCollectorException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
-        
+
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-        
-        Artifact aetherArtifact =
-            new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
-        
+
+        Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension,
+                root.getVersion() );
+
         CollectRequest request = new CollectRequest();
         request.setRoot( new Dependency( aetherArtifact, null ) );
-        
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
-        List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
+        ArtifactTypeRegistry typeRegistry = Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+
+        List<Dependency> aetherDependencies = new ArrayList<>( root.getDependencies().size() );
         for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
         {
             aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
@@ -126,22 +130,21 @@ class Maven31DependencyCollector
 
         if ( root.getDependencyManagement() != null )
         {
-            List<Dependency> aetherManagerDependencies =
-                new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );
-            
+            List<Dependency> aetherManagerDependencies = new ArrayList<>(
+                    root.getDependencyManagement().getDependencies().size() );
+
             for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
             {
                 aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
             }
-            
+
             request.setManagedDependencies( aetherManagerDependencies );
         }
 
         return collectDependencies( request );
     }
 
-    private CollectorResult collectDependencies( CollectRequest request )
-        throws DependencyCollectorException
+    private CollectorResult collectDependencies( CollectRequest request ) throws DependencyCollectorException
     {
         request.setRepositories( aetherRepositories );
 
@@ -154,14 +157,4 @@ class Maven31DependencyCollector
             throw new DependencyCollectorException( e.getMessage(), e );
         }
     }
-
-    private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
-                    throws DependencyCollectorException
-    {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-        Object[] args = new Object[] { root, typeRegistry };
-
-        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
-    }
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
index 53823f8..ce647f5 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
@@ -29,7 +29,7 @@ import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector
  * 
  * @author Robert Scholte
  */
-public interface MavenDependencyCollector
+interface MavenDependencyCollector
 {
 
     CollectorResult collectDependencies( Dependency root )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
index 19faa28..05a63c8 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/DefaultDependencyResolver.java
@@ -41,27 +41,24 @@ import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 /**
- * 
+ *
  */
 @Component( role = DependencyResolver.class, hint = "default" )
-class DefaultDependencyResolver
-    implements DependencyResolver, Contextualizable
+class DefaultDependencyResolver implements DependencyResolver, Contextualizable
 {
     private PlexusContainer container;
 
     @Override
     public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                         Collection<Dependency> coordinates,
-                                                         Collection<Dependency> managedDependencies,
-                                                         TransformableFilter filter )
-        throws DependencyResolverException
+            Collection<Dependency> coordinates, Collection<Dependency> managedDependencies, TransformableFilter filter )
+            throws DependencyResolverException
     {
         validateBuildingRequest( buildingRequest );
-        
+
         try
         {
             return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
-                                                                                      filter );
+                    filter );
         }
         catch ( ComponentLookupException e )
         {
@@ -71,8 +68,7 @@ class DefaultDependencyResolver
 
     @Override
     public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
-                                                         DependableCoordinate coordinate, TransformableFilter filter )
-        throws DependencyResolverException
+            DependableCoordinate coordinate, TransformableFilter filter ) throws DependencyResolverException
     {
         validateParameters( buildingRequest, coordinate );
         try
@@ -87,8 +83,7 @@ class DefaultDependencyResolver
 
     @Override
     public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
-                                                         TransformableFilter filter )
-        throws DependencyResolverException
+            TransformableFilter filter ) throws DependencyResolverException
     {
         validateParameters( buildingRequest, model );
         try
@@ -129,8 +124,7 @@ class DefaultDependencyResolver
      * @param context Plexus context to inject.
      * @throws ContextException if the PlexusContainer could not be located.
      */
-    public void contextualize( Context context )
-        throws ContextException
+    public void contextualize( Context context ) throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
@@ -153,45 +147,39 @@ class DefaultDependencyResolver
         }
 
     }
-    
+
     private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
-        throws ComponentLookupException, DependencyResolverException
+            throws ComponentLookupException, DependencyResolverException
     {
         ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
-        
+
         if ( isMaven31() )
         {
-            org.eclipse.aether.RepositorySystem m31RepositorySystem =
-                container.lookup( org.eclipse.aether.RepositorySystem.class );
+            org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
+                    org.eclipse.aether.RepositorySystem.class );
 
-            org.eclipse.aether.RepositorySystemSession session =
-                (org.eclipse.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, 
-                                                                           "toRepos",
-                                                                           List.class,
-                                                                           buildingRequest.getRemoteRepositories() );
+            List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
             return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
-                                                  aetherRepositories );
+                    aetherRepositories );
         }
         else
         {
-            org.sonatype.aether.RepositorySystem m30RepositorySystem =
-                container.lookup( org.sonatype.aether.RepositorySystem.class );
+            org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
+                    org.sonatype.aether.RepositorySystem.class );
 
-            org.sonatype.aether.RepositorySystemSession session =
-                (org.sonatype.aether.RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
+                    "getRepositorySession" );
 
-            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories =
-                (List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,
-                                                                            "toRepos", 
-                                                                            List.class,
-                                                                            buildingRequest.getRemoteRepositories() );
+            List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
+                    RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
 
             return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,
-                                                  aetherRepositories );
+                    aetherRepositories );
 
         }
     }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
index 3c8619f..dc7ad4c 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Invoker.java
@@ -33,71 +33,31 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws DependencyResolverException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
+    public static <T> T invoke( Object object, String method )
         throws DependencyResolverException
     {
         try
         {
-            return objectClazz.getMethod( method ).invoke( object );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyResolverException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
         throws DependencyResolverException
     {
         try
         {
-            final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+            return invoke;
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-    }
-
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
-        throws DependencyResolverException
-    {
-        try
-        {
-            return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyResolverException( e.getMessage(), e );
         }
@@ -113,22 +73,21 @@ final class Invoker
      * @return the result of the method invocation
      * @throws DependencyResolverException if any checked exception occurs
      */
-    public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+    public static <T> T invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
         throws DependencyResolverException
     {
-        try
+        if ( args.length != argClasses.length )
         {
-            return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            throw new IllegalArgumentException( "The number of elements in argClasses and args are not the same." );
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new DependencyResolverException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
+
+        try
         {
-            throw new DependencyResolverException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new DependencyResolverException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
index ce1f497..b9f37d9 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30ArtifactResult.java
@@ -26,12 +26,11 @@ import org.sonatype.aether.resolution.ArtifactResult;
 
 /**
  * {@link org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
- * 
+ *
  * @author Robert Scholte
  * @since 3.0
  */
-class Maven30ArtifactResult
-    implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
+class Maven30ArtifactResult implements org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult
 {
     private final ArtifactResult artifactResult;
 
@@ -48,8 +47,7 @@ class Maven30ArtifactResult
     {
         try
         {
-            return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
-                                                                        Artifact.class, artifactResult.getArtifact() );
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact", Artifact.class, artifactResult.getArtifact() );
         }
         catch ( DependencyResolverException e )
         {
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
index b70a7f0..3b04c47 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven30DependencyResolver.java
@@ -19,11 +19,6 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
@@ -33,7 +28,6 @@ import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
 import org.apache.maven.shared.artifact.filter.resolve.transform.SonatypeAetherFilterTransformer;
 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
 import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
-
 import org.sonatype.aether.RepositorySystem;
 import org.sonatype.aether.RepositorySystemSession;
 import org.sonatype.aether.artifact.Artifact;
@@ -49,6 +43,12 @@ import org.sonatype.aether.resolution.ArtifactResult;
 import org.sonatype.aether.util.artifact.DefaultArtifact;
 import org.sonatype.aether.util.artifact.DefaultArtifactType;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * 
  */
@@ -58,11 +58,11 @@ class Maven30DependencyResolver
     private final RepositorySystem repositorySystem;
 
     private final ArtifactHandlerManager artifactHandlerManager;
-    
+
     private final RepositorySystemSession session;
-    
+
     private final List<RemoteRepository> aetherRepositories;
-    
+
     Maven30DependencyResolver( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
                                       RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
     {
@@ -80,9 +80,7 @@ class Maven30DependencyResolver
     // CHECKSTYLE_ON: LineLength
         throws DependencyResolverException
     {
-        ArtifactTypeRegistry typeRegistry =
-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                   ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
 
         Dependency aetherRoot = toDependency( coordinate, typeRegistry );
 
@@ -90,7 +88,17 @@ class Maven30DependencyResolver
 
         return resolveDependencies( dependencyFilter, request );
     }
-    
+
+    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {
+            org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class
+    };
+
+    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
+    {
+        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+    }
+
     @Override
     // CHECKSTYLE_OFF: LineLength
     public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
@@ -109,94 +117,69 @@ class Maven30DependencyResolver
         Dependency aetherRoot = new Dependency( aetherArtifact, null );
         
         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-        
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
 
-        List<Dependency> aetherDependencies = new ArrayList<Dependency>( model.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : model.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
+        request.setDependencies( resolveDependencies( model.getDependencies() ) );
 
         DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
         if ( mavenDependencyManagement != null )
         {
-            List<Dependency> aetherManagerDependencies =
-                new ArrayList<Dependency>( mavenDependencyManagement.getDependencies().size() );
-            
-            for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencyManagement.getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-            
-            request.setManagedDependencies( aetherManagerDependencies );
+            request.setManagedDependencies( resolveDependencies( mavenDependencyManagement.getDependencies() ) );
         }
 
         return resolveDependencies( dependencyFilter, request );
     }
 
-    @Override
+    /**
+     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
+     * @return List of resolved dependencies.
+     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
+     */
     // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies,
-                                                                                                  Collection<org.apache.maven.model.Dependency> managedMavenDependencies,
-                                                                                                  TransformableFilter filter )
+    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies ) throws
+            DependencyResolverException
     // CHECKSTYLE_ON: LineLength
-        throws DependencyResolverException
     {
-        ArtifactTypeRegistry typeRegistry =
-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                   ArtifactHandlerManager.class, artifactHandlerManager );
-
-        final Class<?>[] argClasses =
-            new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-         List<Dependency> aetherDependencies = null;
-
-         if ( mavenDependencies != null )
-         {
-             aetherDependencies = new ArrayList<Dependency>( mavenDependencies.size() );
-
-             for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
-             {
-                 Object[] args = new Object[] { mavenDependency, typeRegistry };
-
-                 Dependency aetherDependency =
-                     (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        if ( mavenDependencies == null )
+        {
+            return Collections.emptyList();
+        }
 
-                 aetherDependencies.add( aetherDependency );
-             }
-         }
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
 
-        List<Dependency> aetherManagedDependencies = null;
+        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
 
-        if ( managedMavenDependencies != null )
+        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
         {
-            aetherManagedDependencies = new ArrayList<Dependency>( managedMavenDependencies.size() );
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+        }
 
-            for ( org.apache.maven.model.Dependency mavenDependency : managedMavenDependencies )
-            {
-                Object[] args = new Object[] { mavenDependency, typeRegistry };
+        return aetherDependencies;
+    }
 
-                Dependency aetherDependency =
-                    (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            Collection<org.apache.maven.model.Dependency> mavenDependencies,
+            Collection<org.apache.maven.model.Dependency> managedMavenDependencies, TransformableFilter filter )
+    // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
+    {
 
-                aetherManagedDependencies.add( aetherDependency );
-            }
-        }
+        List<Dependency> aetherDependencies = resolveDependencies( mavenDependencies );
+
+        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
 
-        CollectRequest request =
-            new CollectRequest( aetherDependencies, aetherManagedDependencies, aetherRepositories );
+        CollectRequest request = new CollectRequest( aetherDependencies, aetherManagedDependencies,
+                aetherRepositories );
 
         return resolveDependencies( filter, request );
     }
 
     // CHECKSTYLE_OFF: LineLength
-    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( TransformableFilter dependencyFilter,
-                                                                                                   CollectRequest request )
-                                                                                                       throws DependencyResolverException
+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            TransformableFilter dependencyFilter,
+            CollectRequest request
+    ) throws DependencyResolverException
     // CHECKSTYLE_ON :LineLength
     {
         try
@@ -217,8 +200,8 @@ class Maven30DependencyResolver
                 public Iterator<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> iterator()
                 {
                     // CHECKSTYLE_OFF: LineLength
-                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults =
-                        new ArrayList<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>( dependencyResults.size() );
+                    Collection<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> artResults = new ArrayList<>(
+                            dependencyResults.size() );
                     // CHECKSTYLE_ON: LineLength
                     
                     for ( ArtifactResult artifactResult : dependencyResults )
@@ -242,9 +225,9 @@ class Maven30DependencyResolver
 
     /**
      * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
-     * 
-     * @param coordinate
-     * @param stereotypes
+     *
+     * @param coordinate {@link DependableCoordinate}
+     * @param stereotypes {@link org.eclipse.aether.artifact.ArtifactTypeRegistry
      * @return as Aether Dependency
      */
     private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
@@ -266,10 +249,8 @@ class Maven30DependencyResolver
                                             ArtifactTypeRegistry typeRegistry )
         throws DependencyResolverException
     {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
         Object[] args = new Object[] { mavenDependency, typeRegistry };
 
-        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
     }  
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
index dba4e8e..fe26ce4 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31ArtifactResult.java
@@ -48,7 +48,7 @@ class Maven31ArtifactResult
     {
         try
         {
-            return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+            return Invoker.invoke( RepositoryUtils.class, "toArtifact",
                                                                         Artifact.class, artifactResult.getArtifact() );
         }
         catch ( DependencyResolverException e )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
index 3d23f08..ad7c82b 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/Maven31DependencyResolver.java
@@ -19,11 +19,6 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
  * under the License.
  */
 
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
@@ -49,15 +44,21 @@ import org.eclipse.aether.resolution.DependencyRequest;
 import org.eclipse.aether.resolution.DependencyResolutionException;
 import org.eclipse.aether.resolution.DependencyResult;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * 
  */
 class Maven31DependencyResolver
     implements MavenDependencyResolver
 {
-    private RepositorySystem repositorySystem;
+    private final RepositorySystem repositorySystem;
 
-    private ArtifactHandlerManager artifactHandlerManager;
+    private final ArtifactHandlerManager artifactHandlerManager;
 
     private final RepositorySystemSession session;
 
@@ -77,12 +78,10 @@ class Maven31DependencyResolver
     // CHECKSTYLE_OFF: LineLength
     public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( DependableCoordinate coordinate,
                                                                                                   TransformableFilter dependencyFilter )
-                                                                                                      throws DependencyResolverException
     // CHECKSTYLE_ON: LineLength
+        throws DependencyResolverException
     {
-        ArtifactTypeRegistry typeRegistry =
-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                   ArtifactHandlerManager.class, artifactHandlerManager );
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
 
         Dependency aetherRoot = toDependency( coordinate, typeRegistry );
 
@@ -90,7 +89,17 @@ class Maven31DependencyResolver
 
         return resolveDependencies( dependencyFilter, request );
     }
-    
+
+    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {
+            org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class
+    };
+
+    private ArtifactTypeRegistry createTypeRegistry() throws DependencyResolverException
+    {
+        return Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+                ArtifactHandlerManager.class, artifactHandlerManager );
+    }
+
     @Override
     // CHECKSTYLE_OFF: LineLength
     public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Model model,
@@ -109,83 +118,56 @@ class Maven31DependencyResolver
         Dependency aetherRoot = new Dependency( aetherArtifact, null );
         
         CollectRequest request = new CollectRequest( aetherRoot, aetherRepositories );
-        
-        ArtifactTypeRegistry typeRegistry =
-                        (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                               ArtifactHandlerManager.class, artifactHandlerManager );
-        
-        List<Dependency> aetherDependencies = new ArrayList<Dependency>( model.getDependencies().size() );
-        for ( org.apache.maven.model.Dependency mavenDependency : model.getDependencies() )
-        {
-            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-        }
-        request.setDependencies( aetherDependencies );
+
+        request.setDependencies( resolveDependencies( model.getDependencies() ) );
 
         DependencyManagement mavenDependencyManagement = model.getDependencyManagement();
         if ( mavenDependencyManagement != null )
         {
-            List<Dependency> aetherManagerDependencies =
-                new ArrayList<Dependency>( mavenDependencyManagement.getDependencies().size() );
-            
-            for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencyManagement.getDependencies() )
-            {
-                aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
-            }
-            
-            request.setManagedDependencies( aetherManagerDependencies );
+            request.setManagedDependencies( resolveDependencies( model.getDependencyManagement().getDependencies() ) );
         }
 
         return resolveDependencies( dependencyFilter, request );
     }
 
-    @Override
+    /**
+     * @param mavenDependencies {@link org.apache.maven.model.Dependency} can be {@code null}.
+     * @return List of resolved dependencies.
+     * @throws DependencyResolverException in case of a failure of the typeRegistry error.
+     */
     // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies,
-                                                                                                  Collection<org.apache.maven.model.Dependency> managedMavenDependencies,
-                                                                                                  TransformableFilter filter )
-                                                                                                      throws DependencyResolverException
+    private List<Dependency> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies ) throws DependencyResolverException
     // CHECKSTYLE_ON: LineLength
     {
-        ArtifactTypeRegistry typeRegistry =
-            (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
-                                                   ArtifactHandlerManager.class, artifactHandlerManager );
-
-        final Class<?>[] argClasses =
-            new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
-        List<Dependency> aetherDeps = null;
-
-        if ( mavenDependencies != null )
+        if ( mavenDependencies == null )
         {
-            aetherDeps = new ArrayList<Dependency>( mavenDependencies.size() );
+            return Collections.emptyList();
+        }
 
-            for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
-            {
-                Object[] args = new Object[] { mavenDependency, typeRegistry };
+        ArtifactTypeRegistry typeRegistry = createTypeRegistry();
 
-                Dependency aetherDependency =
-                    (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        List<Dependency> aetherDependencies = new ArrayList<>( mavenDependencies.size() );
 
-                aetherDeps.add( aetherDependency );
-            }
+        for ( org.apache.maven.model.Dependency mavenDependency : mavenDependencies )
+        {
+            aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
         }
 
-        List<Dependency> aetherManagedDependencies = null;
-        
-        if ( managedMavenDependencies != null )
-        {
-            aetherManagedDependencies = new ArrayList<Dependency>( managedMavenDependencies.size() );
+        return aetherDependencies;
+    }
 
-            for ( org.apache.maven.model.Dependency mavenDependency : managedMavenDependencies )
-            {
-                Object[] args = new Object[] { mavenDependency, typeRegistry };
+    @Override
+    // CHECKSTYLE_OFF: LineLength
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( Collection<org.apache.maven.model.Dependency> mavenDependencies,
+            Collection<org.apache.maven.model.Dependency> managedMavenDependencies,
+            TransformableFilter filter )
+    // CHECKSTYLE_ON: LineLength
+              throws DependencyResolverException
+    {
 
-                Dependency aetherDependency =
-                    (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        List<Dependency> aetherDeps = resolveDependencies( mavenDependencies );
 
-                aetherManagedDependencies.add( aetherDependency );
-            }
-        }
+        List<Dependency> aetherManagedDependencies = resolveDependencies( managedMavenDependencies );
 
         CollectRequest request = new CollectRequest( aetherDeps, aetherManagedDependencies, aetherRepositories );
 
@@ -193,9 +175,10 @@ class Maven31DependencyResolver
     }
 
     // CHECKSTYLE_OFF: LineLength
-    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( TransformableFilter dependencyFilter,
-                                                                                                   CollectRequest request )
-                                                                                                       throws DependencyResolverException
+    private Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            TransformableFilter dependencyFilter,
+            CollectRequest request
+    ) throws DependencyResolverException
     // CHECKSTYLE_ON: LineLength
     {
         try
@@ -261,10 +244,8 @@ class Maven31DependencyResolver
     private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
                     throws DependencyResolverException
     {
-        Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
-
         Object[] args = new Object[] { root, typeRegistry };
 
-        return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
     }    
 }
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
index da0222d..8652207 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/resolve/internal/MavenDependencyResolver.java
@@ -33,7 +33,7 @@ import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverE
  * @author Robert Scholte
  *
  */
-public interface MavenDependencyResolver
+interface MavenDependencyResolver
 {
 
     Iterable<ArtifactResult> resolveDependencies( DependableCoordinate coordinate,
diff --git a/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java b/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
index dd6de0d..02ec826 100644
--- a/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
+++ b/src/main/java/org/apache/maven/shared/transfer/project/install/internal/DefaultProjectInstaller.java
@@ -149,10 +149,8 @@ class DefaultProjectInstaller
         }
     }
 
-    // CHECKSTYLE_OFF: LineLength
     private void addMetaDataFilesForArtifact( ProjectBuildingRequest buildingRequest, Artifact artifact,
-                                              Collection<File> targetMetadataFiles )
-    // CHECKSTYLE_ON: LineLength
+            Collection<File> targetMetadataFiles )
     {
         Collection<ArtifactMetadata> metadatas = artifact.getMetadataList();
         if ( metadatas != null )
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
index 2da84bc..48342dc 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Invoker.java
@@ -33,50 +33,32 @@ final class Invoker
         // do not instantiate
     }
 
-    public static Object invoke( Object object, String method )
-        throws RepositoryManagerException
-    {
-        return invoke( object.getClass(), object, method );
-    }
-
-    public static Object invoke( Class<?> objectClazz, Object object, String method )
+    public static <T> T invoke( Object object, String method )
         throws RepositoryManagerException
     {
         try
         {
-            return objectClazz.getMethod( method ).invoke( object );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) object.getClass().getMethod( method ).invoke( object );
+            return invoke;
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new RepositoryManagerException( e.getMessage(), e );
         }
     }
 
-    public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+    public static <T> T invoke( Object object, String method, Class<?> argClazz, Object arg )
         throws RepositoryManagerException
     {
         try
         {
             final Class<?> objectClazz = object.getClass();
-            return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
+            @SuppressWarnings( "unchecked" )
+            T invoke = (T) objectClazz.getMethod( method, argClazz ).invoke( object, arg );
+            return invoke;
         }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new RepositoryManagerException( e.getMessage(), e );
         }
@@ -89,15 +71,7 @@ final class Invoker
         {
             return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new RepositoryManagerException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
+        catch ( IllegalAccessException | InvocationTargetException | NoSuchMethodException e )
         {
             throw new RepositoryManagerException( e.getMessage(), e );
         }
diff --git a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
index 86ae613..6f486a0 100644
--- a/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
+++ b/src/main/java/org/apache/maven/shared/transfer/repository/internal/Maven31RepositoryManager.java
@@ -103,7 +103,7 @@ class Maven31RepositoryManager
         RepositorySystemSession session;
         try
         {
-            session = (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+            session = Invoker.invoke( buildingRequest, "getRepositorySession" );
         }
         catch ( RepositoryManagerException e )
         {