move to a Map with className as key to merge with javadoc scan
git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/branches/MPLUGIN-189@1333848 13f79535-47bb-0310-9956-ffa450edef68master
parent
5da55eb1be
commit
06470fdc2a
|
|
@ -71,6 +71,12 @@
|
||||||
<artifactId>asm-commons</artifactId>
|
<artifactId>asm-commons</artifactId>
|
||||||
<version>3.3.1</version>
|
<version>3.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.thoughtworks.qdox</groupId>
|
||||||
|
<artifactId>qdox</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ package org.apache.maven.tools.plugin.annotations;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import com.thoughtworks.qdox.JavaDocBuilder;
|
||||||
|
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;
|
||||||
import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
|
import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
|
||||||
|
|
@ -43,6 +45,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Olivier Lamy
|
* @author Olivier Lamy
|
||||||
|
|
@ -76,9 +79,11 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
|
|
||||||
mojoAnnotationsScannerRequest.setDependencies( request.getProject().getCompileClasspathElements() );
|
mojoAnnotationsScannerRequest.setDependencies( request.getProject().getCompileClasspathElements() );
|
||||||
|
|
||||||
List<MojoAnnotatedClass> mojoAnnotatedClasses =
|
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses =
|
||||||
mojoAnnotationsScanner.scan( mojoAnnotationsScannerRequest );
|
mojoAnnotationsScanner.scan( mojoAnnotationsScannerRequest );
|
||||||
|
|
||||||
|
JavaClass[] javaClasses = discoverClasses( request );
|
||||||
|
|
||||||
return toMojoDescriptors( mojoAnnotatedClasses, request );
|
return toMojoDescriptors( mojoAnnotatedClasses, request );
|
||||||
}
|
}
|
||||||
catch ( DependencyResolutionRequiredException e )
|
catch ( DependencyResolutionRequiredException e )
|
||||||
|
|
@ -87,6 +92,28 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected JavaClass[] discoverClasses( final PluginToolsRequest request )
|
||||||
|
{
|
||||||
|
JavaDocBuilder builder = new JavaDocBuilder();
|
||||||
|
builder.setEncoding( request.getEncoding() );
|
||||||
|
|
||||||
|
MavenProject project = request.getProject();
|
||||||
|
|
||||||
|
for ( String source : (List<String>) project.getCompileSourceRoots() )
|
||||||
|
{
|
||||||
|
builder.addSourceTree( new File( source ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO be more dynamic
|
||||||
|
File generatedPlugin = new File( project.getBasedir(), "target/generated-sources/plugin" );
|
||||||
|
if ( !project.getCompileSourceRoots().contains( generatedPlugin.getAbsolutePath() ) )
|
||||||
|
{
|
||||||
|
builder.addSourceTree( generatedPlugin );
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.getClasses();
|
||||||
|
}
|
||||||
|
|
||||||
private List<File> toFiles( List<String> directories )
|
private List<File> toFiles( List<String> directories )
|
||||||
{
|
{
|
||||||
if ( directories == null )
|
if ( directories == null )
|
||||||
|
|
@ -101,18 +128,19 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MojoDescriptor> toMojoDescriptors( List<MojoAnnotatedClass> mojoAnnotatedClasses,
|
private List<MojoDescriptor> toMojoDescriptors( Map<String, MojoAnnotatedClass> mojoAnnotatedClasses,
|
||||||
PluginToolsRequest request )
|
PluginToolsRequest request )
|
||||||
throws DuplicateParameterException
|
throws DuplicateParameterException
|
||||||
{
|
{
|
||||||
List<MojoDescriptor> mojoDescriptors = new ArrayList<MojoDescriptor>( mojoAnnotatedClasses.size() );
|
List<MojoDescriptor> mojoDescriptors = new ArrayList<MojoDescriptor>( mojoAnnotatedClasses.size() );
|
||||||
for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses )
|
for ( MojoAnnotatedClass mojoAnnotatedClass : mojoAnnotatedClasses.values() )
|
||||||
{
|
{
|
||||||
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
||||||
|
|
||||||
//mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
|
//mojoDescriptor.setRole( mojoAnnotatedClass.getClassName() );
|
||||||
//mojoDescriptor.setRoleHint( "default" );
|
//mojoDescriptor.setRoleHint( "default" );
|
||||||
mojoDescriptor.setImplementation( mojoAnnotatedClass.getClassName() );
|
mojoDescriptor.setImplementation( mojoAnnotatedClass.getClassName() );
|
||||||
|
mojoDescriptor.setLanguage( "java" );
|
||||||
|
|
||||||
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
|
MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
|
||||||
|
|
||||||
|
|
@ -138,7 +166,6 @@ public class JavaAnnotationsMojoDescriptorExtractor
|
||||||
mojoDescriptor.setOnlineRequired( mojo.requiresOnline() );
|
mojoDescriptor.setOnlineRequired( mojo.requiresOnline() );
|
||||||
|
|
||||||
mojoDescriptor.setPhase( mojo.defaultPhase().id() );
|
mojoDescriptor.setPhase( mojo.defaultPhase().id() );
|
||||||
mojoDescriptor.setLanguage( "java" );
|
|
||||||
|
|
||||||
for ( ParameterAnnotationContent parameterAnnotationContent : mojoAnnotatedClass.getParameters() )
|
for ( ParameterAnnotationContent parameterAnnotationContent : mojoAnnotatedClass.getParameters() )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -55,22 +55,21 @@ public class DefaultMojoAnnotationsScanner
|
||||||
{
|
{
|
||||||
private Reflector reflector = new Reflector();
|
private Reflector reflector = new Reflector();
|
||||||
|
|
||||||
public List<MojoAnnotatedClass> scan( MojoAnnotationsScannerRequest request )
|
public Map<String, MojoAnnotatedClass> scan( MojoAnnotationsScannerRequest request )
|
||||||
throws ExtractionException
|
throws ExtractionException
|
||||||
{
|
{
|
||||||
List<MojoAnnotatedClass> mojoAnnotatedClasses = new ArrayList<MojoAnnotatedClass>();
|
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = new HashMap<String, MojoAnnotatedClass>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for ( File classDirectory : request.getClassesDirectories() )
|
for ( File classDirectory : request.getClassesDirectories() )
|
||||||
{
|
{
|
||||||
if ( classDirectory.exists() && classDirectory.isDirectory() )
|
if ( classDirectory.exists() && classDirectory.isDirectory() )
|
||||||
{
|
{
|
||||||
mojoAnnotatedClasses.addAll( scanDirectory( classDirectory, request.getIncludePatterns() ) );
|
mojoAnnotatedClasses.putAll( scanDirectory( classDirectory, request.getIncludePatterns() ) );
|
||||||
// TODO scan sources to get @since and @deprecated and description of classes and fields.
|
// TODO scan sources to get @since and @deprecated and description of classes and fields.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//TODO scan dependencies to get super class annotations if exist request.getDependencies()
|
//TODO scan dependencies to get super class annotations if exist request.getDependencies()
|
||||||
|
|
||||||
return mojoAnnotatedClasses;
|
return mojoAnnotatedClasses;
|
||||||
|
|
@ -81,10 +80,10 @@ public class DefaultMojoAnnotationsScanner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<MojoAnnotatedClass> scanDirectory( File classDirectory, List<String> includePatterns )
|
protected Map<String, MojoAnnotatedClass> scanDirectory( File classDirectory, List<String> includePatterns )
|
||||||
throws IOException, ExtractionException
|
throws IOException, ExtractionException
|
||||||
{
|
{
|
||||||
List<MojoAnnotatedClass> mojoAnnotatedClasses = new ArrayList<MojoAnnotatedClass>();
|
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = new HashMap<String, MojoAnnotatedClass>();
|
||||||
DirectoryScanner scanner = new DirectoryScanner();
|
DirectoryScanner scanner = new DirectoryScanner();
|
||||||
scanner.setBasedir( classDirectory );
|
scanner.setBasedir( classDirectory );
|
||||||
scanner.addDefaultExcludes();
|
scanner.addDefaultExcludes();
|
||||||
|
|
@ -110,7 +109,8 @@ public class DefaultMojoAnnotationsScanner
|
||||||
analyzeVisitors( mojoClassVisitor );
|
analyzeVisitors( mojoClassVisitor );
|
||||||
if ( isMojoAnnnotatedClassCandidate( mojoClassVisitor.getMojoAnnotatedClass() ) != null )
|
if ( isMojoAnnnotatedClassCandidate( mojoClassVisitor.getMojoAnnotatedClass() ) != null )
|
||||||
{
|
{
|
||||||
mojoAnnotatedClasses.add( mojoClassVisitor.getMojoAnnotatedClass() );
|
mojoAnnotatedClasses.put( mojoClassVisitor.getMojoAnnotatedClass().getClassName(),
|
||||||
|
mojoClassVisitor.getMojoAnnotatedClass() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import org.apache.maven.tools.plugin.extractor.ExtractionException;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Olivier Lamy
|
* @author Olivier Lamy
|
||||||
|
|
@ -41,6 +42,6 @@ public interface MojoAnnotationsScanner
|
||||||
static final List<String> acceptedFieldLevelAnnotationClasses =
|
static final List<String> acceptedFieldLevelAnnotationClasses =
|
||||||
Arrays.asList( Parameter.class.getName(), Component.class.getName() );
|
Arrays.asList( Parameter.class.getName(), Component.class.getName() );
|
||||||
|
|
||||||
List<MojoAnnotatedClass> scan( MojoAnnotationsScannerRequest request )
|
Map<String, MojoAnnotatedClass> scan( MojoAnnotationsScannerRequest request )
|
||||||
throws ExtractionException;
|
throws ExtractionException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Olivier Lamy
|
* @author Olivier Lamy
|
||||||
|
|
@ -50,13 +51,13 @@ public class TestAnnotationsReader
|
||||||
request.setClassesDirectories( Collections.singletonList( new File( "target/test-classes" ) ) );
|
request.setClassesDirectories( Collections.singletonList( new File( "target/test-classes" ) ) );
|
||||||
request.setIncludePatterns( Arrays.asList( "**/FooMojo.class" ) );
|
request.setIncludePatterns( Arrays.asList( "**/FooMojo.class" ) );
|
||||||
|
|
||||||
List<MojoAnnotatedClass> mojoAnnotatedClasses = mojoAnnotationsScanner.scan( request );
|
Map<String, MojoAnnotatedClass> mojoAnnotatedClasses = mojoAnnotationsScanner.scan( request );
|
||||||
|
|
||||||
System.out.println( "mojoAnnotatedClasses:" + mojoAnnotatedClasses );
|
System.out.println( "mojoAnnotatedClasses:" + mojoAnnotatedClasses );
|
||||||
|
|
||||||
Assertions.assertThat( mojoAnnotatedClasses ).isNotNull().isNotEmpty().hasSize( 1 );
|
Assertions.assertThat( mojoAnnotatedClasses ).isNotNull().isNotEmpty().hasSize( 1 );
|
||||||
|
|
||||||
MojoAnnotatedClass mojoAnnotatedClass = mojoAnnotatedClasses.get( 0 );
|
MojoAnnotatedClass mojoAnnotatedClass = mojoAnnotatedClasses.values().iterator().next();
|
||||||
|
|
||||||
assertEquals( FooMojo.class.getName(), mojoAnnotatedClass.getClassName() );
|
assertEquals( FooMojo.class.getName(), mojoAnnotatedClass.getClassName() );
|
||||||
assertEquals( AbstractMojo.class.getName(), mojoAnnotatedClass.getParentClassName() );
|
assertEquals( AbstractMojo.class.getName(), mojoAnnotatedClass.getParentClassName() );
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,6 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.thoughtworks.qdox</groupId>
|
<groupId>com.thoughtworks.qdox</groupId>
|
||||||
<artifactId>qdox</artifactId>
|
<artifactId>qdox</artifactId>
|
||||||
<version>1.11</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
6
pom.xml
6
pom.xml
|
|
@ -229,6 +229,12 @@
|
||||||
<version>1.0-alpha-9-stable-1</version>
|
<version>1.0-alpha-9-stable-1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.thoughtworks.qdox</groupId>
|
||||||
|
<artifactId>qdox</artifactId>
|
||||||
|
<version>1.11</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven.plugin-testing</groupId>
|
<groupId>org.apache.maven.plugin-testing</groupId>
|
||||||
<artifactId>maven-plugin-testing-harness</artifactId>
|
<artifactId>maven-plugin-testing-harness</artifactId>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue