MNG-2930: Patch from J. Dillon.
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/branches/maven-plugin-tools-java-MNG-2930@525648 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java b/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
index 5a8320a..a563abe 100644
--- a/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
+++ b/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
@@ -23,7 +23,6 @@
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;
-import com.thoughtworks.qdox.model.JavaSource;
import com.thoughtworks.qdox.model.Type;
import org.apache.maven.plugin.descriptor.InvalidParameterException;
@@ -34,6 +33,8 @@
import org.apache.maven.plugin.descriptor.Requirement;
import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
+import org.apache.maven.tools.plugin.extractor.ExtractionException;
+
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.util.StringUtils;
@@ -44,8 +45,9 @@
import java.util.Map;
import java.util.TreeMap;
-
/**
+ * Extracts Mojo descriptors from Java sources.
+ *
* @todo add example usage tag that can be shown in the doco
* @todo need to add validation directives so that systems embedding maven2 can
* get validation directives to help users in IDEs.
@@ -121,11 +123,11 @@
public static final String GOAL_REQUIRES_DIRECT_INVOCATION = "requiresDirectInvocation";
- private static final String COMPONENT = "component";
+ public static final String COMPONENT = "component";
- private static final String COMPONENT_ROLE = "role";
+ public static final String COMPONENT_ROLE = "role";
- private static final String COMPONENT_ROLEHINT = "roleHint";
+ public static final String COMPONENT_ROLEHINT = "roleHint";
protected void validateParameter( Parameter parameter, int i )
throws InvalidParameterException
@@ -159,15 +161,11 @@
// Mojo descriptor creation from @tags
// ----------------------------------------------------------------------
- private MojoDescriptor createMojoDescriptor( JavaSource javaSource, PluginDescriptor pluginDescriptor )
+ protected MojoDescriptor createMojoDescriptor( JavaClass javaClass )
throws InvalidPluginDescriptorException
{
MojoDescriptor mojoDescriptor = new MojoDescriptor();
- mojoDescriptor.setPluginDescriptor( pluginDescriptor );
-
- JavaClass javaClass = getJavaClass( javaSource );
-
mojoDescriptor.setLanguage( "java" );
mojoDescriptor.setImplementation( javaClass.getFullyQualifiedName() );
@@ -529,71 +527,24 @@
return rawParams;
}
- private JavaClass getJavaClass( JavaSource javaSource )
- {
- return javaSource.getClasses()[0];
- }
-
public List execute( MavenProject project, PluginDescriptor pluginDescriptor )
- throws InvalidPluginDescriptorException
+ throws ExtractionException, InvalidPluginDescriptorException
{
- JavaDocBuilder builder = new JavaDocBuilder();
-
- for ( Iterator i = project.getCompileSourceRoots().iterator(); i.hasNext(); )
- {
- builder.addSourceTree( new File( (String) i.next() ) );
- }
-
- JavaSource[] javaSources = builder.getSources();
+ JavaClass[] javaClasses = discoverClasses( project );
List descriptors = new ArrayList();
- for ( int i = 0; i < javaSources.length; i++ )
+ for ( int i = 0; i < javaClasses.length; i++ )
{
- JavaClass javaClass = getJavaClass( javaSources[i] );
-
- DocletTag tag = javaClass.getTagByName( GOAL );
+ DocletTag tag = javaClasses[i].getTagByName( GOAL );
if ( tag != null )
{
- MojoDescriptor mojoDescriptor = createMojoDescriptor( javaSources[i], pluginDescriptor );
+ MojoDescriptor mojoDescriptor = createMojoDescriptor( javaClasses[i] );
+ mojoDescriptor.setPluginDescriptor( pluginDescriptor );
- // ----------------------------------------------------------------------
- // Validate the descriptor as best we can before allowing it
- // to be processed.
- // ----------------------------------------------------------------------
-
- List parameters = mojoDescriptor.getParameters();
-
- if ( parameters != null )
- {
- for ( int j = 0; j < parameters.size(); j++ )
- {
- validateParameter( (Parameter) parameters.get( j ), j );
- }
- }
-
- // Commented because it causes a VerifyError:
- // java.lang.VerifyError:
- // (class:
- // org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor,
- // method: execute signature:
- // (Ljava/lang/String;Lorg/apache/maven/project/MavenProject;)Ljava/util/Set;)
- // Incompatible object argument for function call
- //
- // Refactored to allow MavenMojoDescriptor.getComponentFactory()
- // return MavenMojoDescriptor.getMojoDescriptor().getLanguage(),
- // and removed all usage of MavenMojoDescriptor from extractors.
- //
- //
- // MavenMojoDescriptor mmDescriptor = new
- // MavenMojoDescriptor(mojoDescriptor);
- //
- // JavaClass javaClass = getJavaClass(javaSources[i]);
- //
- // mmDescriptor.setImplementation(javaClass.getFullyQualifiedName());
- //
- // descriptors.add( mmDescriptor );
+ // Validate the descriptor as best we can before allowing it to be processed.
+ validate( mojoDescriptor );
descriptors.add( mojoDescriptor );
}
@@ -602,4 +553,30 @@
return descriptors;
}
+ protected JavaClass[] discoverClasses( final MavenProject project )
+ throws ExtractionException
+ {
+ JavaDocBuilder builder = new JavaDocBuilder();
+
+ for ( Iterator i = project.getCompileSourceRoots().iterator(); i.hasNext(); )
+ {
+ builder.addSourceTree( new File( (String) i.next() ) );
+ }
+
+ return builder.getClasses();
+ }
+
+ protected void validate( MojoDescriptor mojoDescriptor )
+ throws InvalidParameterException
+ {
+ List parameters = mojoDescriptor.getParameters();
+
+ if ( parameters != null )
+ {
+ for ( int j = 0; j < parameters.size(); j++ )
+ {
+ validateParameter( (Parameter) parameters.get( j ), j );
+ }
+ }
+ }
}