You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2014/05/02 20:29:41 UTC

svn commit: r1591999 - /maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java

Author: hboutemy
Date: Fri May  2 18:29:41 2014
New Revision: 1591999

URL: http://svn.apache.org/r1591999
Log:
code simplification

Modified:
    maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java

Modified: maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java?rev=1591999&r1=1591998&r2=1591999&view=diff
==============================================================================
--- maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java (original)
+++ maven/plugin-tools/trunk/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java Fri May  2 18:29:41 2014
@@ -37,6 +37,7 @@ import org.codehaus.plexus.util.Director
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.reflection.Reflector;
+import org.codehaus.plexus.util.reflection.ReflectorException;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.Type;
 
@@ -45,7 +46,6 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -67,63 +67,63 @@ public class DefaultMojoAnnotationsScann
         throws ExtractionException
     {
         Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = new HashMap<String, MojoAnnotatedClass>();
+
         try
         {
-
             for ( Artifact dependency : request.getDependencies() )
             {
-                File dependencyFile = dependency.getFile();
-                if ( dependencyFile != null && dependencyFile.exists() )
-                {
-                    if ( dependencyFile.isDirectory() )
-                    {
-                        mojoAnnotatedClasses.putAll(
-                            scanDirectory( dependencyFile, request.getIncludePatterns(), dependency, true ) );
-                    }
-                    else
-                    {
-                        mojoAnnotatedClasses.putAll(
-                            scanFile( dependencyFile, request.getIncludePatterns(), dependency, true ) );
-                    }
-                }
+                scan( mojoAnnotatedClasses, dependency.getFile(), request.getIncludePatterns(), dependency, true );
             }
 
             for ( File classDirectory : request.getClassesDirectories() )
             {
-                if ( classDirectory.exists() && classDirectory.isDirectory() )
-                {
-                    mojoAnnotatedClasses.putAll(
-                        scanDirectory( classDirectory, request.getIncludePatterns(), request.getProject().getArtifact(),
-                                       false ) );
-                }
+                scan( mojoAnnotatedClasses, classDirectory, request.getIncludePatterns(),
+                      request.getProject().getArtifact(), false );
             }
-
-            return mojoAnnotatedClasses;
         }
         catch ( IOException e )
         {
             throw new ExtractionException( e.getMessage(), e );
         }
+
+        return mojoAnnotatedClasses;
+    }
+
+    protected void scan( Map<String, MojoAnnotatedClass> mojoAnnotatedClasses, File source,
+                         List<String> includePatterns, Artifact artifact, boolean excludeMojo )
+        throws IOException, ExtractionException
+    {
+        if ( source == null || ! source.exists() )
+        {
+            return;
+        }
+
+        Map<String, MojoAnnotatedClass> scanResult;
+        if ( source.isDirectory() )
+        {
+            scanResult = scanDirectory( source, includePatterns, artifact, excludeMojo );
+        }
+        else
+        {
+            scanResult = scanArchive( source, artifact, excludeMojo );
+        }
+
+        mojoAnnotatedClasses.putAll( scanResult );
     }
 
     /**
      * @param archiveFile
-     * @param includePatterns
      * @param artifact
-     * @param excludeMojo     for dependencies we exclude Mojo annotations found
+     * @param excludeMojo     for dependencies, we exclude Mojo annotations found
      * @return
      * @throws IOException
      * @throws ExtractionException
      */
-    protected Map<String, MojoAnnotatedClass> scanFile( File archiveFile, List<String> includePatterns,
-                                                        Artifact artifact, boolean excludeMojo )
+    protected Map<String, MojoAnnotatedClass> scanArchive( File archiveFile, Artifact artifact, boolean excludeMojo )
         throws IOException, ExtractionException
     {
-        if ( !archiveFile.exists() )
-        {
-            return Collections.emptyMap();
-        }
         Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = new HashMap<String, MojoAnnotatedClass>();
+
         ZipInputStream archiveStream = new ZipInputStream( new FileInputStream( archiveFile ) );
 
         try
@@ -131,31 +131,12 @@ public class DefaultMojoAnnotationsScann
             for ( ZipEntry zipEntry = archiveStream.getNextEntry(); zipEntry != null;
                   zipEntry = archiveStream.getNextEntry() )
             {
-                if ( zipEntry.getName().endsWith( ".class" ) )
+                if ( !zipEntry.getName().endsWith( ".class" ) )
                 {
-                    MojoClassVisitor mojoClassVisitor = new MojoClassVisitor( getLogger() );
-
-                    ClassReader rdr = new ClassReader( archiveStream );
-                    rdr.accept( mojoClassVisitor,
-                                ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG );
-                    analyzeVisitors( mojoClassVisitor );
-                    if ( excludeMojo )
-                    {
-                        mojoClassVisitor.getMojoAnnotatedClass().setMojo( null );
-                    }
-                    if ( isStoreClass( mojoClassVisitor.getMojoAnnotatedClass() ) != null )
-                    {
-                        if ( getLogger().isDebugEnabled() )
-                        {
-                            getLogger().debug( "found MojoAnnotatedClass:"
-                                                   + mojoClassVisitor.getMojoAnnotatedClass().getClassName() + ":"
-                                                   + mojoClassVisitor.getMojoAnnotatedClass() );
-                        }
-                        mojoClassVisitor.getMojoAnnotatedClass().setArtifact( artifact );
-                        mojoAnnotatedClasses.put( mojoClassVisitor.getMojoAnnotatedClass().getClassName(),
-                                                  mojoClassVisitor.getMojoAnnotatedClass() );
-                    }
+                    continue;
                 }
+
+                analyzeClassStream( mojoAnnotatedClasses, archiveStream, artifact, excludeMojo );
             }
         }
         finally
@@ -169,7 +150,7 @@ public class DefaultMojoAnnotationsScann
      * @param classDirectory
      * @param includePatterns
      * @param artifact
-     * @param excludeMojo     for dependencies we exclude Mojo annotations found
+     * @param excludeMojo     for dependencies, we exclude Mojo annotations found
      * @return
      * @throws IOException
      * @throws ExtractionException
@@ -178,11 +159,8 @@ public class DefaultMojoAnnotationsScann
                                                              Artifact artifact, boolean excludeMojo )
         throws IOException, ExtractionException
     {
-        if ( !classDirectory.exists() )
-        {
-            return Collections.emptyMap();
-        }
         Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = new HashMap<String, MojoAnnotatedClass>();
+
         DirectoryScanner scanner = new DirectoryScanner();
         scanner.setBasedir( classDirectory );
         scanner.addDefaultExcludes();
@@ -203,29 +181,7 @@ public class DefaultMojoAnnotationsScann
             InputStream is = new BufferedInputStream( new FileInputStream( new File( classDirectory, classFile ) ) );
             try
             {
-                MojoClassVisitor mojoClassVisitor = new MojoClassVisitor( getLogger() );
-                ClassReader rdr = new ClassReader( is );
-                rdr.accept( mojoClassVisitor,
-                            ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG );
-                analyzeVisitors( mojoClassVisitor );
-
-                MojoAnnotatedClass mojoAnnotatedClass = mojoClassVisitor.getMojoAnnotatedClass();
-
-                if ( excludeMojo )
-                {
-                    mojoAnnotatedClass.setMojo( null );
-                }
-
-                if ( isStoreClass( mojoAnnotatedClass ) != null )
-                {
-                    if ( getLogger().isDebugEnabled() )
-                    {
-                        getLogger().debug( "found MojoAnnotatedClass:" + mojoAnnotatedClass.getClassName() + ":"
-                                               + mojoAnnotatedClass );
-                    }
-                    mojoAnnotatedClass.setArtifact( artifact );
-                    mojoAnnotatedClasses.put( mojoAnnotatedClass.getClassName(), mojoAnnotatedClass );
-                }
+                analyzeClassStream( mojoAnnotatedClasses, is, artifact, excludeMojo );
             }
             finally
             {
@@ -235,6 +191,36 @@ public class DefaultMojoAnnotationsScann
         return mojoAnnotatedClasses;
     }
 
+    private void analyzeClassStream( Map<String, MojoAnnotatedClass> mojoAnnotatedClasses, InputStream is,
+                                     Artifact artifact, boolean excludeMojo )
+        throws IOException, ExtractionException
+    {
+        MojoClassVisitor mojoClassVisitor = new MojoClassVisitor( getLogger() );
+
+        ClassReader rdr = new ClassReader( is );
+        rdr.accept( mojoClassVisitor, ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG );
+
+        analyzeVisitors( mojoClassVisitor );
+
+        MojoAnnotatedClass mojoAnnotatedClass = mojoClassVisitor.getMojoAnnotatedClass();
+
+        if ( excludeMojo )
+        {
+            mojoAnnotatedClass.setMojo( null );
+        }
+
+        if ( isStoreClass( mojoAnnotatedClass ) != null )
+        {
+            if ( getLogger().isDebugEnabled() )
+            {
+                getLogger().debug( "found MojoAnnotatedClass:" + mojoAnnotatedClass.getClassName() + ":"
+                                       + mojoAnnotatedClass );
+            }
+            mojoAnnotatedClass.setArtifact( artifact );
+            mojoAnnotatedClasses.put( mojoAnnotatedClass.getClassName(), mojoAnnotatedClass );
+        }
+    }
+
     private MojoAnnotatedClass isStoreClass( MojoAnnotatedClass mojoAnnotatedClass )
     {
         // see MPLUGIN-206 we can have intermediate classes without annotations
@@ -253,59 +239,58 @@ public class DefaultMojoAnnotationsScann
          **/
     }
 
+    protected void populateAnnotationContent( Object content, MojoAnnotationVisitor mojoAnnotationVisitor )
+        throws ReflectorException
+    {
+        for ( Map.Entry<String, Object> entry : mojoAnnotationVisitor.getAnnotationValues().entrySet() )
+        {
+            reflector.invoke( content, entry.getKey(), new Object[] { entry.getValue() } );
+        }
+    }
 
     protected void analyzeVisitors( MojoClassVisitor mojoClassVisitor )
         throws ExtractionException
     {
+        final MojoAnnotatedClass mojoAnnotatedClass = mojoClassVisitor.getMojoAnnotatedClass();
 
         try
         {
+            // @Mojo annotations
             MojoAnnotationVisitor mojoAnnotationVisitor =
                 mojoClassVisitor.getAnnotationVisitorMap().get( Mojo.class.getName() );
             if ( mojoAnnotationVisitor != null )
             {
                 MojoAnnotationContent mojoAnnotationContent = new MojoAnnotationContent();
-                for ( Map.Entry<String, Object> entry : mojoAnnotationVisitor.getAnnotationValues().entrySet() )
-                {
-                    reflector.invoke( mojoAnnotationContent, entry.getKey(), new Object[]{ entry.getValue() } );
-                }
-                mojoClassVisitor.getMojoAnnotatedClass().setMojo( mojoAnnotationContent );
+                populateAnnotationContent( mojoAnnotationContent, mojoAnnotationVisitor );
+                mojoAnnotatedClass.setMojo( mojoAnnotationContent );
             }
 
+            // @Execute annotations
             mojoAnnotationVisitor = mojoClassVisitor.getAnnotationVisitorMap().get( Execute.class.getName() );
             if ( mojoAnnotationVisitor != null )
             {
                 ExecuteAnnotationContent executeAnnotationContent = new ExecuteAnnotationContent();
-
-                for ( Map.Entry<String, Object> entry : mojoAnnotationVisitor.getAnnotationValues().entrySet() )
-                {
-                    reflector.invoke( executeAnnotationContent, entry.getKey(), new Object[]{ entry.getValue() } );
-                }
-                mojoClassVisitor.getMojoAnnotatedClass().setExecute( executeAnnotationContent );
+                populateAnnotationContent( executeAnnotationContent, mojoAnnotationVisitor );
+                mojoAnnotatedClass.setExecute( executeAnnotationContent );
             }
 
+            // @Parameter annotations
             List<MojoFieldVisitor> mojoFieldVisitors =
                 mojoClassVisitor.findFieldWithAnnotationClass( Parameter.class.getName() );
-
             for ( MojoFieldVisitor mojoFieldVisitor : mojoFieldVisitors )
             {
                 ParameterAnnotationContent parameterAnnotationContent =
                     new ParameterAnnotationContent( mojoFieldVisitor.getFieldName(), mojoFieldVisitor.getClassName() );
                 if ( mojoFieldVisitor.getMojoAnnotationVisitor() != null )
                 {
-                    for ( Map.Entry<String, Object> entry : mojoFieldVisitor.getMojoAnnotationVisitor().getAnnotationValues().entrySet() )
-                    {
-                        reflector.invoke( parameterAnnotationContent, entry.getKey(),
-                                          new Object[]{ entry.getValue() } );
-                    }
-
+                    populateAnnotationContent( parameterAnnotationContent, mojoFieldVisitor.getMojoAnnotationVisitor() );
                 }
-                mojoClassVisitor.getMojoAnnotatedClass().getParameters().put( parameterAnnotationContent.getFieldName(),
-                                                                              parameterAnnotationContent );
+                mojoAnnotatedClass.getParameters().put( parameterAnnotationContent.getFieldName(),
+                                                        parameterAnnotationContent );
             }
 
+            // @Component annotations
             mojoFieldVisitors = mojoClassVisitor.findFieldWithAnnotationClass( Component.class.getName() );
-
             for ( MojoFieldVisitor mojoFieldVisitor : mojoFieldVisitors )
             {
                 ComponentAnnotationContent componentAnnotationContent =
@@ -327,17 +312,17 @@ public class DefaultMojoAnnotationsScann
                                               new Object[]{ entry.getValue() } );
                         }
                     }
+
                     if ( StringUtils.isEmpty( componentAnnotationContent.getRoleClassName() ) )
                     {
                         componentAnnotationContent.setRoleClassName( mojoFieldVisitor.getClassName() );
                     }
                 }
-                mojoClassVisitor.getMojoAnnotatedClass().getComponents().put( componentAnnotationContent.getFieldName(),
-                                                                              componentAnnotationContent );
+                mojoAnnotatedClass.getComponents().put( componentAnnotationContent.getFieldName(),
+                                                        componentAnnotationContent );
             }
-
         }
-        catch ( Exception e )
+        catch ( ReflectorException e )
         {
             throw new ExtractionException( e.getMessage(), e );
         }