support @since @deprecated and description at class level
git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/branches/MPLUGIN-189@1333849 13f79535-47bb-0310-9956-ffa450edef68master
parent
06470fdc2a
commit
ddebc219e5
|
|
@ -19,6 +19,7 @@ package org.apache.maven.tools.plugin.annotations;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import com.thoughtworks.qdox.JavaDocBuilder;
|
import com.thoughtworks.qdox.JavaDocBuilder;
|
||||||
|
import com.thoughtworks.qdox.model.DocletTag;
|
||||||
import com.thoughtworks.qdox.model.JavaClass;
|
import com.thoughtworks.qdox.model.JavaClass;
|
||||||
import org.apache.maven.artifact.DependencyResolutionRequiredException;
|
import org.apache.maven.artifact.DependencyResolutionRequiredException;
|
||||||
import org.apache.maven.plugin.descriptor.DuplicateParameterException;
|
import org.apache.maven.plugin.descriptor.DuplicateParameterException;
|
||||||
|
|
@ -28,6 +29,7 @@ import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
import org.apache.maven.plugin.descriptor.Requirement;
|
import org.apache.maven.plugin.descriptor.Requirement;
|
||||||
import org.apache.maven.project.MavenProject;
|
import org.apache.maven.project.MavenProject;
|
||||||
import org.apache.maven.tools.plugin.DefaultPluginToolsRequest;
|
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.PluginToolsRequest;
|
||||||
import org.apache.maven.tools.plugin.annotations.datamodel.ComponentAnnotationContent;
|
import org.apache.maven.tools.plugin.annotations.datamodel.ComponentAnnotationContent;
|
||||||
import org.apache.maven.tools.plugin.annotations.datamodel.ExecuteAnnotationContent;
|
import org.apache.maven.tools.plugin.annotations.datamodel.ExecuteAnnotationContent;
|
||||||
|
|
@ -44,6 +46,7 @@ import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -82,7 +85,9 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses =
|
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses =
|
||||||
mojoAnnotationsScanner.scan( mojoAnnotationsScannerRequest );
|
mojoAnnotationsScanner.scan( mojoAnnotationsScannerRequest );
|
||||||
|
|
||||||
JavaClass[] javaClasses = discoverClasses( request );
|
Map<String, JavaClass> javaClassesMap = discoverClasses( request );
|
||||||
|
|
||||||
|
populateDataFromJavadoc( mojoAnnotatedClasses, javaClassesMap );
|
||||||
|
|
||||||
return toMojoDescriptors( mojoAnnotatedClasses, request );
|
return toMojoDescriptors( mojoAnnotatedClasses, request );
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +97,61 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
JavaDocBuilder builder = new JavaDocBuilder();
|
||||||
builder.setEncoding( request.getEncoding() );
|
builder.setEncoding( request.getEncoding() );
|
||||||
|
|
@ -111,7 +170,21 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
builder.addSourceTree( generatedPlugin );
|
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 )
|
private List<File> toFiles( List<String> directories )
|
||||||
|
|
@ -135,7 +208,7 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
List<MojoDescriptor> mojoDescriptors = new ArrayList<MojoDescriptor>( mojoAnnotatedClasses.size() );
|
List<MojoDescriptor> mojoDescriptors = new ArrayList<MojoDescriptor>( mojoAnnotatedClasses.size() );
|
||||||
for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values() )
|
for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values() )
|
||||||
{
|
{
|
||||||
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
ExtendedMojoDescriptor mojoDescriptor = new ExtendedMojoDescriptor();
|
||||||
|
|
||||||
//mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
|
//mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
|
||||||
//mojoDescriptor.setRoleHint( "default" );
|
//mojoDescriptor.setRoleHint( "default" );
|
||||||
|
|
@ -144,10 +217,15 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
|
|
||||||
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
|
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
|
||||||
|
|
||||||
|
mojoDescriptor.setDescription( mojo.getDescription() );
|
||||||
|
mojoDescriptor.setSince( mojo.getSince() );
|
||||||
|
mojo.setDeprecated( mojo.getDeprecated() );
|
||||||
|
|
||||||
mojoDescriptor.setAggregator( mojo.aggregator() );
|
mojoDescriptor.setAggregator( mojo.aggregator() );
|
||||||
mojoDescriptor.setDependencyResolutionRequired( mojo.requiresDependencyResolution() );
|
mojoDescriptor.setDependencyResolutionRequired( mojo.requiresDependencyResolution() );
|
||||||
mojoDescriptor.setDirectInvocationOnly( mojo.requiresDirectInvocation() );
|
mojoDescriptor.setDirectInvocationOnly( mojo.requiresDirectInvocation() );
|
||||||
mojoDescriptor.setDeprecated( mojo.getDeprecated() );
|
mojoDescriptor.setDeprecated( mojo.getDeprecated() );
|
||||||
|
mojoDescriptor.setThreadSafe( mojo.threadSafe() );
|
||||||
|
|
||||||
ExecuteAnnotationContent execute = mojoAnnotatedClass.getExecute();
|
ExecuteAnnotationContent execute = mojoAnnotatedClass.getExecute();
|
||||||
|
|
||||||
|
|
@ -176,7 +254,6 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
parameter.setDefaultValue( parameterAnnotationContent.defaultValue() );
|
parameter.setDefaultValue( parameterAnnotationContent.defaultValue() );
|
||||||
parameter.setDeprecated( parameterAnnotationContent.getDeprecated() );
|
parameter.setDeprecated( parameterAnnotationContent.getDeprecated() );
|
||||||
parameter.setDescription( parameterAnnotationContent.getDescription() );
|
parameter.setDescription( parameterAnnotationContent.getDescription() );
|
||||||
// FIXME olamy wtf ?
|
|
||||||
parameter.setEditable( !parameterAnnotationContent.readonly() );
|
parameter.setEditable( !parameterAnnotationContent.readonly() );
|
||||||
parameter.setExpression( parameterAnnotationContent.expression() );
|
parameter.setExpression( parameterAnnotationContent.expression() );
|
||||||
mojoDescriptor.addParameter( parameter );
|
mojoDescriptor.addParameter( parameter );
|
||||||
|
|
@ -190,6 +267,7 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
parameter.setRequirement(
|
parameter.setRequirement(
|
||||||
new Requirement( componentAnnotationContent.role(), componentAnnotationContent.roleHint() ) );
|
new Requirement( componentAnnotationContent.role(), componentAnnotationContent.roleHint() ) );
|
||||||
parameter.setEditable( false );
|
parameter.setEditable( false );
|
||||||
|
|
||||||
mojoDescriptor.addParameter( parameter );
|
mojoDescriptor.addParameter( parameter );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,6 @@ public class DefaultMojoAnnotationsScanner
|
||||||
if ( classDirectory.exists() && classDirectory.isDirectory() )
|
if ( classDirectory.exists() && classDirectory.isDirectory() )
|
||||||
{
|
{
|
||||||
mojoAnnotatedClasses.putAll( scanDirectory( classDirectory, request.getIncludePatterns() ) );
|
mojoAnnotatedClasses.putAll( scanDirectory( classDirectory, request.getIncludePatterns() ) );
|
||||||
// TODO scan sources to get @since and @deprecated and description of classes and fields.
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue