You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2012/05/04 12:04:31 UTC
svn commit: r1333849 - in
/maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations:
JavaAnnotationsMojoDescriptorExtractor.java
scanner/DefaultMojoAnnotationsScanner.java
Author: olamy
Date: Fri May 4 10:04:31 2012
New Revision: 1333849
URL: http://svn.apache.org/viewvc?rev=1333849&view=rev
Log:
support @since @deprecated and description at class level
Modified:
maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java
maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java
Modified: maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java
URL: http://svn.apache.org/viewvc/maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java?rev=1333849&r1=1333848&r2=1333849&view=diff
==============================================================================
--- maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java (original)
+++ maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java Fri May 4 10:04:31 2012
@@ -19,6 +19,7 @@ package org.apache.maven.tools.plugin.an
*/
import com.thoughtworks.qdox.JavaDocBuilder;
+import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.plugin.descriptor.DuplicateParameterException;
@@ -28,6 +29,7 @@ import org.apache.maven.plugin.descripto
import org.apache.maven.plugin.descriptor.Requirement;
import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.DefaultPluginToolsRequest;
+import org.apache.maven.tools.plugin.ExtendedMojoDescriptor;
import org.apache.maven.tools.plugin.PluginToolsRequest;
import org.apache.maven.tools.plugin.annotations.datamodel.ComponentAnnotationContent;
import org.apache.maven.tools.plugin.annotations.datamodel.ExecuteAnnotationContent;
@@ -44,6 +46,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -82,7 +85,9 @@ public class JavaAnnotationsMojoDescript
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses =
mojoAnnotationsScanner.scan( mojoAnnotationsScannerRequest );
- JavaClass[] javaClasses = discoverClasses( request );
+ Map<String, JavaClass> javaClassesMap = discoverClasses( request );
+
+ populateDataFromJavadoc( mojoAnnotatedClasses, javaClassesMap );
return toMojoDescriptors( mojoAnnotatedClasses, request );
}
@@ -92,7 +97,61 @@ public class JavaAnnotationsMojoDescript
}
}
- protected JavaClass[] discoverClasses( final PluginToolsRequest request )
+ /**
+ * from sources scan to get @since and @deprecated and description of classes and fields.
+ *
+ * @param mojoAnnotatedClasses
+ * @param javaClassesMap
+ */
+ protected void populateDataFromJavadoc( Map<String, MojoAnnotatedClass> mojoAnnotatedClasses,
+ Map<String, JavaClass> javaClassesMap )
+ {
+
+ for ( Map.Entry<String, MojoAnnotatedClass> entry : mojoAnnotatedClasses.entrySet() )
+ {
+ JavaClass javaClass = javaClassesMap.get( entry.getKey() );
+ if ( javaClass != null )
+ {
+ entry.getValue().getMojo().setDescription( javaClass.getComment() );
+ DocletTag since = findInClassHierarchy( javaClass, "since" );
+ if ( since != null )
+ {
+ entry.getValue().getMojo().setSince( since.getValue() );
+ }
+
+ DocletTag deprecated = findInClassHierarchy( javaClass, "deprecated" );
+ if ( deprecated != null )
+ {
+ entry.getValue().getMojo().setDeprecated( deprecated.getValue() );
+ }
+ }
+ }
+
+ }
+
+ /**
+ * @param javaClass not null
+ * @param tagName not null
+ * @return docletTag instance
+ */
+ private static DocletTag findInClassHierarchy( JavaClass javaClass, String tagName )
+ {
+ DocletTag tag = javaClass.getTagByName( tagName );
+
+ if ( tag == null )
+ {
+ JavaClass superClass = javaClass.getSuperJavaClass();
+
+ if ( superClass != null )
+ {
+ tag = findInClassHierarchy( superClass, tagName );
+ }
+ }
+
+ return tag;
+ }
+
+ protected Map<String, JavaClass> discoverClasses( final PluginToolsRequest request )
{
JavaDocBuilder builder = new JavaDocBuilder();
builder.setEncoding( request.getEncoding() );
@@ -111,7 +170,21 @@ public class JavaAnnotationsMojoDescript
builder.addSourceTree( generatedPlugin );
}
- return builder.getClasses();
+ JavaClass[] javaClasses = builder.getClasses();
+
+ if ( javaClasses == null || javaClasses.length < 1 )
+ {
+ return Collections.emptyMap();
+ }
+
+ Map<String, JavaClass> javaClassMap = new HashMap<String, JavaClass>( javaClasses.length );
+
+ for ( JavaClass javaClass : javaClasses )
+ {
+ javaClassMap.put( javaClass.getFullyQualifiedName(), javaClass );
+ }
+
+ return javaClassMap;
}
private List<File> toFiles( List<String> directories )
@@ -135,7 +208,7 @@ public class JavaAnnotationsMojoDescript
List<MojoDescriptor> mojoDescriptors = new ArrayList<MojoDescriptor>( mojoAnnotatedClasses.size() );
for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values() )
{
- MojoDescriptor mojoDescriptor = new MojoDescriptor();
+ ExtendedMojoDescriptor mojoDescriptor = new ExtendedMojoDescriptor();
//mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
//mojoDescriptor.setRoleHint( "default" );
@@ -144,10 +217,15 @@ public class JavaAnnotationsMojoDescript
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
+ mojoDescriptor.setDescription( mojo.getDescription() );
+ mojoDescriptor.setSince( mojo.getSince() );
+ mojo.setDeprecated( mojo.getDeprecated() );
+
mojoDescriptor.setAggregator( mojo.aggregator() );
mojoDescriptor.setDependencyResolutionRequired( mojo.requiresDependencyResolution() );
mojoDescriptor.setDirectInvocationOnly( mojo.requiresDirectInvocation() );
mojoDescriptor.setDeprecated( mojo.getDeprecated() );
+ mojoDescriptor.setThreadSafe( mojo.threadSafe() );
ExecuteAnnotationContent execute = mojoAnnotatedClass.getExecute();
@@ -176,7 +254,6 @@ public class JavaAnnotationsMojoDescript
parameter.setDefaultValue( parameterAnnotationContent.defaultValue() );
parameter.setDeprecated( parameterAnnotationContent.getDeprecated() );
parameter.setDescription( parameterAnnotationContent.getDescription() );
- // FIXME olamy wtf ?
parameter.setEditable( !parameterAnnotationContent.readonly() );
parameter.setExpression( parameterAnnotationContent.expression() );
mojoDescriptor.addParameter( parameter );
@@ -190,6 +267,7 @@ public class JavaAnnotationsMojoDescript
parameter.setRequirement(
new Requirement( componentAnnotationContent.role(), componentAnnotationContent.roleHint() ) );
parameter.setEditable( false );
+
mojoDescriptor.addParameter( parameter );
}
Modified: maven/plugin-tools/branches/MPLUGIN-189/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/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java?rev=1333849&r1=1333848&r2=1333849&view=diff
==============================================================================
--- maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java (original)
+++ maven/plugin-tools/branches/MPLUGIN-189/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/scanner/DefaultMojoAnnotationsScanner.java Fri May 4 10:04:31 2012
@@ -66,7 +66,6 @@ public class DefaultMojoAnnotationsScann
if ( classDirectory.exists() && classDirectory.isDirectory() )
{
mojoAnnotatedClasses.putAll( scanDirectory( classDirectory, request.getIncludePatterns() ) );
- // TODO scan sources to get @since and @deprecated and description of classes and fields.
}
}