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 16:01:54 UTC

[maven-artifact-transfer] branch MSHARED-864 updated (7c565c7 -> 5d54787)

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

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


 discard 7c565c7  [MSHADRED-864] - Refactor and simplify code
     new 5d54787  [MSHADRED-864] - Refactor and simplify code

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (7c565c7)
            \
             N -- N -- N   refs/heads/MSHARED-864 (5d54787)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../deploy/internal/Maven31ArtifactDeployer.java   |  36 +++---
 .../internal/Maven30DependencyResolver.java        | 137 ++++++++++-----------
 2 files changed, 79 insertions(+), 94 deletions(-)


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

Posted by kh...@apache.org.
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 5d547877f605f0ad53e5d8f72ecbb2f3120ff2dd
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   |  37 ++--
 .../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        | 222 +++++++++------------
 .../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, 579 insertions(+), 1087 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..ed61b12 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
@@ -37,16 +37,15 @@ import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.util.artifact.SubArtifact;
 
 /**
- * 
+ *
  */
-class Maven31ArtifactDeployer
-    implements MavenArtifactDeployer
+class Maven31ArtifactDeployer implements MavenArtifactDeployer
 {
 
     private final RepositorySystem repositorySystem;
-    
+
     private final RepositorySystemSession session;
-    
+
     Maven31ArtifactDeployer( RepositorySystem repositorySystem, RepositorySystemSession session )
     {
         super();
@@ -55,16 +54,14 @@ class Maven31ArtifactDeployer
     }
 
     @Override
-    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+    public void deploy( Collection<org.apache.maven.artifact.Artifact> mavenArtifacts ) throws ArtifactDeployerException
     {
         deploy( null, mavenArtifacts );
     }
 
     @Override
     public void deploy( ArtifactRepository remoteRepository,
-                        Collection<org.apache.maven.artifact.Artifact> mavenArtifacts )
-                            throws ArtifactDeployerException
+            Collection<org.apache.maven.artifact.Artifact> mavenArtifacts ) throws ArtifactDeployerException
     {
         // prepare request
         DeployRequest request = new DeployRequest();
@@ -79,9 +76,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;
@@ -105,15 +101,15 @@ class Maven31ArtifactDeployer
                     request.addArtifact( pomArtifact );
                 }
                 else if ( // metadata instanceof SnapshotArtifactRepositoryMetadata ||
-                metadata instanceof ArtifactRepositoryMetadata )
+                        metadata instanceof ArtifactRepositoryMetadata )
                 {
                     // eaten, handled by repo system
                 }
                 else if ( metadata instanceof org.apache.maven.shared.transfer.metadata.ArtifactMetadata )
                 {
-                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata = 
-                                    (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
-                    
+                    org.apache.maven.shared.transfer.metadata.ArtifactMetadata transferMetadata =
+                            (org.apache.maven.shared.transfer.metadata.ArtifactMetadata) metadata;
+
                     request.addMetadata( new Maven31MetadataBridge( metadata ).setFile( transferMetadata.getFile() ) );
                 }
             }
@@ -131,13 +127,10 @@ class Maven31ArtifactDeployer
     }
 
     private RemoteRepository getRemoteRepository( RepositorySystemSession session, ArtifactRepository remoteRepository )
-        throws ArtifactDeployerException
+            throws ArtifactDeployerException
     {
-        // CHECKSTYLE_OFF: LineLength
-        RemoteRepository aetherRepo = (RemoteRepository) Invoker.invoke( RepositoryUtils.class, "toRepo",
-                                                                         ArtifactRepository.class,
-                                                                         remoteRepository );
-        // CHECKSTYLE_ON: LineLength
+        RemoteRepository aetherRepo = Invoker.invoke( RepositoryUtils.class, "toRepo", ArtifactRepository.class,
+                remoteRepository );
 
         if ( aetherRepo.getAuthentication() == null || aetherRepo.getProxy() == null )
         {
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..031d604 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
@@ -21,6 +21,7 @@ package org.apache.maven.shared.transfer.dependencies.resolve.internal;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -33,7 +34,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;
@@ -50,21 +50,19 @@ import org.sonatype.aether.util.artifact.DefaultArtifact;
 import org.sonatype.aether.util.artifact.DefaultArtifactType;
 
 /**
- * 
+ *
  */
-class Maven30DependencyResolver
-    implements MavenDependencyResolver
+class Maven30DependencyResolver implements MavenDependencyResolver
 {
+    private static final Class<?>[] ARG_CLASSES = new Class<?>[] {org.apache.maven.model.Dependency.class,
+            ArtifactTypeRegistry.class};
     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 )
+            RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
     {
         super();
         this.repositorySystem = repositorySystem;
@@ -73,16 +71,43 @@ class Maven30DependencyResolver
         this.aetherRepositories = aetherRepositories;
     }
 
+    /**
+     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
+     *
+     * @param coordinate  {@link DependableCoordinate}
+     * @param stereotypes {@link org.eclipse.aether.artifact.ArtifactTypeRegistry
+     * @return as Aether Dependency
+     */
+    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
+    {
+        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
+        if ( stereotype == null )
+        {
+            stereotype = new DefaultArtifactType( coordinate.getType() );
+        }
+
+        Artifact artifact = new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(),
+                coordinate.getClassifier(), null, coordinate.getVersion(), null, stereotype );
+
+        return new Dependency( artifact, null );
+    }
+
+    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
+            ArtifactTypeRegistry typeRegistry ) throws DependencyResolverException
+    {
+        Object[] args = new Object[] {mavenDependency, typeRegistry};
+
+        return Invoker.invoke( RepositoryUtils.class, "toDependency", ARG_CLASSES, args );
+    }
+
     @Override
     // CHECKSTYLE_OFF: LineLength
-    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies( DependableCoordinate coordinate,
-                                                                                                  TransformableFilter dependencyFilter )
-    // CHECKSTYLE_ON: LineLength
-        throws DependencyResolverException
+    public Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult> resolveDependencies(
+            DependableCoordinate coordinate, TransformableFilter dependencyFilter )
+        // 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,113 +115,92 @@ class Maven30DependencyResolver
 
         return resolveDependencies( dependencyFilter, request );
     }
-    
+
+    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,
-                                                                                                  TransformableFilter dependencyFilter )
-    // CHECKSTYLE_ON: LineLength
-        throws DependencyResolverException
+            TransformableFilter dependencyFilter )
+        // CHECKSTYLE_ON: LineLength
+            throws DependencyResolverException
     {
         // Are there examples where packaging and type are NOT in sync
         ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( model.getPackaging() );
-        
+
         String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
-        
-        Artifact aetherArtifact =
-            new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension, model.getVersion() );
-        
+
+        Artifact aetherArtifact = new DefaultArtifact( model.getGroupId(), model.getArtifactId(), extension,
+                model.getVersion() );
+
         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;
+    }
+
+    @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> aetherDependencies = resolveDependencies( mavenDependencies );
 
-                aetherManagedDependencies.add( aetherDependency );
-            }
-        }
+        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
@@ -207,8 +211,8 @@ class Maven30DependencyResolver
                 depFilter = dependencyFilter.transform( new SonatypeAetherFilterTransformer() );
             }
 
-            final List<ArtifactResult> dependencyResults =
-                repositorySystem.resolveDependencies( session, request, depFilter );
+            final List<ArtifactResult> dependencyResults = repositorySystem.resolveDependencies( session, request,
+                    depFilter );
 
             // Keep it lazy! Often artifactsResults aren't used, so transforming up front is too expensive
             return new Iterable<org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult>()
@@ -218,9 +222,10 @@ class Maven30DependencyResolver
                 {
                     // 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() );
+                            new ArrayList<>(
+                            dependencyResults.size() );
                     // CHECKSTYLE_ON: LineLength
-                    
+
                     for ( ArtifactResult artifactResult : dependencyResults )
                     {
                         artResults.add( new Maven30ArtifactResult( artifactResult ) );
@@ -239,37 +244,4 @@ class Maven30DependencyResolver
             throw new Maven30DependencyResolverException( e );
         }
     }
-
-    /**
-     * Based on RepositoryUtils#toDependency(org.apache.maven.model.Dependency, ArtifactTypeRegistry)
-     * 
-     * @param coordinate
-     * @param stereotypes
-     * @return as Aether Dependency
-     */
-    private static Dependency toDependency( DependableCoordinate coordinate, ArtifactTypeRegistry stereotypes )
-    {
-        ArtifactType stereotype = stereotypes.get( coordinate.getType() );
-        if ( stereotype == null )
-        {
-            stereotype = new DefaultArtifactType( coordinate.getType() );
-        }
-
-        Artifact artifact =
-            new DefaultArtifact( coordinate.getGroupId(), coordinate.getArtifactId(), coordinate.getClassifier(), null,
-                                 coordinate.getVersion(), null, stereotype );
-
-        return new Dependency( artifact, null );
-    }
-    
-    private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
-                                            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 );
-    }  
 }
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 )
         {