Author: jdcasey
Date: Wed Apr  7 21:01:37 2010
New Revision: 931686

URL: http://svn.apache.org/viewvc?rev=931686&view=rev
Log:
[MJAVADOC-280] Initial implementation of the aggregate-from-dependency-sources 
feature.

Added:
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java
   (with props)
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java
   (with props)
Modified:
    maven/plugins/trunk/maven-javadoc-plugin/pom.xml
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocJar.java
    
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocReport.java

Modified: maven/plugins/trunk/maven-javadoc-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/pom.xml?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/pom.xml Wed Apr  7 21:01:37 2010
@@ -235,12 +235,27 @@ under the License.
       <version>6.1.19</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+       <groupId>org.apache.maven.shared</groupId>
+       <artifactId>maven-common-artifact-filters</artifactId>
+       <version>1.2</version>
+       <type>jar</type>
+       <scope>compile</scope>
+    </dependency>
   </dependencies>
 
   <build>
     <pluginManagement>
       <plugins>
         <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.1</version>
+          <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+          </configuration>
+        </plugin>
+        <plugin>
           <groupId>org.codehaus.modello</groupId>
           <artifactId>modello-maven-plugin</artifactId>
           <version>1.1</version>

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/AbstractJavadocMojo.java
 Wed Apr  7 21:01:37 2010
@@ -55,6 +55,7 @@ import org.apache.maven.artifact.resolve
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
 import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.execution.MavenSession;
@@ -71,6 +72,8 @@ import org.apache.maven.plugin.javadoc.o
 import org.apache.maven.plugin.javadoc.options.Tag;
 import org.apache.maven.plugin.javadoc.options.Taglet;
 import org.apache.maven.plugin.javadoc.options.TagletArtifact;
+import org.apache.maven.plugin.javadoc.resolver.ResourceResolver;
+import org.apache.maven.plugin.javadoc.resolver.SourceResolverConfig;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
@@ -78,6 +81,8 @@ import org.apache.maven.project.artifact
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Settings;
+import org.apache.maven.shared.artifact.filter.PatternExcludesArtifactFilter;
+import org.apache.maven.shared.artifact.filter.PatternIncludesArtifactFilter;
 import org.apache.maven.shared.invoker.MavenInvocationException;
 import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
@@ -367,7 +372,7 @@ public abstract class AbstractJavadocMoj
      * @parameter expression="${reactorProjects}"
      * @readonly
      */
-    private List reactorProjects;
+    private List<MavenProject> reactorProjects;
 
     /**
      * Whether to build an aggregated report at the root, or build individual 
reports.
@@ -1545,6 +1550,54 @@ public abstract class AbstractJavadocMoj
      */
     private String windowtitle;
 
+    /**
+     * Whether dependency -sources jars should be resolved and included as 
source paths for javadoc generation.
+     * This is useful when creating javadocs for a distribution project.
+     * 
+     * @parameter default-value="false"
+     * @since 2.6.2
+     */
+    private boolean includeDependencySources;
+
+    /**
+     * Directory where unpacked project sources / test-sources should be 
cached.
+     *
+     * @parameter 
default-value="${project.build.directory}/distro-javadoc-sources"
+     * @since 2.6.2
+     * @see #includeDependencySources
+     */
+    private File sourceDependencyCacheDir;
+
+    /**
+     * Whether to include transitive dependencies in the list of dependency 
-sources jars to include
+     * in this javadoc run.
+     * 
+     * @parameter default-value="false"
+     * @since 2.6.2
+     * @see #includeDependencySources
+     */
+    private boolean includeTransitiveDependencySources;
+    
+    /**
+     * List of included dependency-source patterns. Example: org.apache.maven:*
+     *
+     * 
+     * @parameter
+     * @since 2.6.2
+     * @see #includeDependencySources
+     */
+    private List<String> dependencySourceIncludes;
+
+    /**
+     * List of excluded dependency-source patterns. Example: 
org.apache.maven.shared:*
+     *
+     * 
+     * @parameter
+     * @since 2.6.2
+     * @see #includeDependencySources
+     */
+    private List<String> dependencySourceExcludes;
+    
     // ----------------------------------------------------------------------
     // static
     // ----------------------------------------------------------------------
@@ -1905,6 +1958,7 @@ public abstract class AbstractJavadocMoj
      * @see JavadocUtil#pruneDirs(MavenProject, List)
      */
     protected List getSourcePaths()
+        throws MavenReportException
     {
         List sourcePaths;
 
@@ -1934,6 +1988,11 @@ public abstract class AbstractJavadocMoj
                 }
             }
 
+            if ( includeDependencySources )
+            {
+                sourcePaths.addAll( getDependencySourcePaths() );
+            }
+            
             if ( isAggregator() && project.isExecutionRoot() )
             {
                 for ( Iterator i = reactorProjects.iterator(); i.hasNext(); )
@@ -1988,6 +2047,74 @@ public abstract class AbstractJavadocMoj
     }
 
     /**
+     * Override this method to customize the configuration for resolving 
dependency sources. The default
+     * behavior enables the resolution of -sources jar files.
+     */
+    protected SourceResolverConfig configureDependencySourceResolution( final 
SourceResolverConfig config )
+    {
+        return config.withCompileSources();
+    }
+
+    /**
+     * Resolve dependency sources so they can be included directly in the 
javadoc process. To customize this,
+     * override {...@link 
AbstractJavadocMojo#configureDependencySourceResolution(SourceResolverConfig)}.
+     */
+    protected final List<String> getDependencySourcePaths()
+        throws MavenReportException
+    {
+        final SourceResolverConfig config =
+            new SourceResolverConfig( project, localRepository, 
sourceDependencyCacheDir, resolver, factory,
+                                      artifactMetadataSource, archiverManager 
).withReactorProjects( reactorProjects );
+
+        configureDependencySourceResolution( config );
+
+        final AndArtifactFilter andFilter = new AndArtifactFilter();
+
+        final List<String> dependencyIncludes = dependencySourceIncludes;
+        final List<String> dependencyExcludes = dependencySourceExcludes;
+
+        if ( isNotEmpty( dependencyIncludes ) || isNotEmpty( 
dependencyExcludes ) )
+        {
+            if ( isNotEmpty( dependencyIncludes ) )
+            {
+                andFilter.add( new PatternIncludesArtifactFilter( 
dependencyIncludes,
+                                                                  
!includeTransitiveDependencySources ) );
+            }
+
+            if ( isNotEmpty( dependencyExcludes ) )
+            {
+                andFilter.add( new PatternExcludesArtifactFilter( 
dependencyExcludes,
+                                                                  
!includeTransitiveDependencySources ) );
+            }
+
+            config.withFilter( andFilter );
+        }
+
+        try
+        {
+            return ResourceResolver.resolveSourceDirs( config );
+        }
+        catch ( final ArtifactResolutionException e )
+        {
+            throw new MavenReportException( "Failed to resolve one or more 
javadoc source/resource artifacts:\n\n"
+                + e.getMessage(), e );
+        }
+        catch ( final ArtifactNotFoundException e )
+        {
+            throw new MavenReportException( "Failed to resolve one or more 
javadoc source/resource artifacts:\n\n"
+                + e.getMessage(), e );
+        }
+    }
+
+    /**
+     * Convenience method to determine that a collection is not empty or null.
+     */
+    protected final boolean isNotEmpty( final List<?> collection )
+    {
+        return collection != null && !collection.isEmpty();
+    }
+    
+    /**
      * Method that indicates whether the javadoc can be generated or not. If 
the project does not contain any source
      * files and no subpackages are specified, the plugin will terminate.
      *

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java
 Wed Apr  7 21:01:37 2010
@@ -206,7 +206,16 @@ public class JavadocReport
 
         if ( !this.isAggregator() || ( this.isAggregator() && 
this.project.isExecutionRoot() ) )
         {
-            List sourcePaths = getSourcePaths();
+            List sourcePaths;
+            try
+            {
+                sourcePaths = getSourcePaths();
+            }
+            catch ( MavenReportException e )
+            {
+                getLog().error( e.getMessage(), e );
+                return false;
+            }
 
             List files = getFiles( sourcePaths );
 

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
 Wed Apr  7 21:01:37 2010
@@ -108,7 +108,7 @@ public class JavadocUtil
      * @param dirs the list of <code>String</code> directories path that will 
be validated.
      * @return a List of valid <code>String</code> directories absolute paths.
      */
-    protected static List pruneDirs( MavenProject project, List dirs )
+    public static List pruneDirs( MavenProject project, List dirs )
     {
         List pruned = new ArrayList( dirs.size() );
         for ( Iterator i = dirs.iterator(); i.hasNext(); )

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocJar.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocJar.java?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocJar.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocJar.java
 Wed Apr  7 21:01:37 2010
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.plugin.javadoc.resolver.SourceResolverConfig;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -199,4 +200,14 @@ public class TestJavadocJar
     {
         return JavadocUtil.getCompileArtifacts( result.getArtifacts(), true );
     }
+    
+    /**
+     * Overriden to enable the resolution of -test-sources jar files.
+     * 
+     * {...@inheritdoc}
+     */
+    protected SourceResolverConfig configureDependencySourceResolution( final 
SourceResolverConfig config )
+    {
+        return super.configureDependencySourceResolution( config 
).withoutCompileSources().withTestSources();
+    }
 }

Modified: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocReport.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocReport.java?rev=931686&r1=931685&r2=931686&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocReport.java
 (original)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/TestJavadocReport.java
 Wed Apr  7 21:01:37 2010
@@ -28,6 +28,7 @@ import java.util.Locale;
 import java.util.ResourceBundle;
 
 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.plugin.javadoc.resolver.SourceResolverConfig;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.MavenReportException;
 import org.codehaus.plexus.util.StringUtils;
@@ -335,4 +336,14 @@ public class TestJavadocReport
             links.add( "../apidocs" );
         }
     }
+    
+    /**
+     * Overriden to enable the resolution of -test-sources jar files.
+     * 
+     * {...@inheritdoc}
+     */
+    protected SourceResolverConfig configureDependencySourceResolution( final 
SourceResolverConfig config )
+    {
+        return super.configureDependencySourceResolution( config 
).withoutCompileSources().withTestSources();
+    }
 }

Added: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java?rev=931686&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java
 (added)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java
 Wed Apr  7 21:01:37 2010
@@ -0,0 +1,226 @@
+package org.apache.maven.plugin.javadoc.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.plugin.javadoc.JavadocUtil;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public final class ResourceResolver
+{
+
+    private ResourceResolver()
+    {
+    }
+
+    @SuppressWarnings( "unchecked" )
+    public static List<String> resolveSourceDirs( final SourceResolverConfig 
config )
+        throws ArtifactResolutionException, ArtifactNotFoundException
+    {
+        final List<String> dirs = new ArrayList<String>();
+
+        //        dirs.addAll( resolveFromProject( config, config.project(), 
config.project().getArtifact() ) );
+
+        final Map<String, MavenProject> projectMap = new HashMap<String, 
MavenProject>();
+        if ( config.reactorProjects() != null )
+        {
+            for ( final MavenProject p : config.reactorProjects() )
+            {
+                projectMap.put( key( p.getGroupId(), p.getArtifactId() ), p );
+            }
+        }
+
+        final List<Artifact> artifacts = config.project().getTestArtifacts();
+
+        final List<Artifact> forResourceResolution = new ArrayList<Artifact>( 
artifacts.size() );
+        for ( final Artifact artifact : artifacts )
+        {
+            final String key = key( artifact.getGroupId(), 
artifact.getArtifactId() );
+            final MavenProject p = projectMap.get( key );
+            if ( p != null )
+            {
+                dirs.addAll( resolveFromProject( config, p, artifact ) );
+            }
+            else
+            {
+                forResourceResolution.add( artifact );
+            }
+        }
+
+        dirs.addAll( resolveFromArtifacts( config, forResourceResolution ) );
+
+        return dirs;
+    }
+
+    private static List<String> resolveFromArtifacts( final 
SourceResolverConfig config, final List<Artifact> artifacts )
+        throws ArtifactResolutionException, ArtifactNotFoundException
+    {
+        final List<Artifact> toResolve = new ArrayList<Artifact>( 
artifacts.size() );
+
+        for ( final Artifact artifact : artifacts )
+        {
+            if ( config.filter() != null && !config.filter().include( artifact 
) )
+            {
+                continue;
+            }
+
+            if ( config.includeCompileSources() )
+            {
+                toResolve.add( createSourceArtifact( artifact, "sources", 
config ) );
+            }
+
+            if ( config.includeTestSources() )
+            {
+                toResolve.add( createSourceArtifact( artifact, "test-sources", 
config ) );
+            }
+        }
+
+        return resolveAndUnpack( toResolve, config );
+    }
+
+    public static Artifact createSourceArtifact( final Artifact artifact, 
final String classifier,
+                                                 final SourceResolverConfig 
config )
+    {
+        final DefaultArtifact a =
+            (DefaultArtifact) 
config.artifactFactory().createArtifactWithClassifier( artifact.getGroupId(),
+                                                                               
      artifact.getArtifactId(),
+                                                                               
      artifact.getVersion(), "jar",
+                                                                               
      classifier );
+
+        a.setRepository( artifact.getRepository() );
+
+        return a;
+    }
+
+    @SuppressWarnings( "unchecked" )
+    private static List<String> resolveAndUnpack( final List<Artifact> 
artifacts, final SourceResolverConfig config )
+        throws ArtifactResolutionException, ArtifactNotFoundException
+    {
+        // NOTE: Since these are '-sources' and '-test-sources' artifacts, 
they won't actually 
+        // resolve transitively...this is just used to aggregate resolution 
failures into a single 
+        // exception.
+        final Set<Artifact> artifactSet = new LinkedHashSet<Artifact>( 
artifacts );
+        final Artifact pomArtifact = config.project().getArtifact();
+        final ArtifactRepository localRepo = config.localRepository();
+        final List<ArtifactRepository> remoteRepos = 
config.project().getRemoteArtifactRepositories();
+        final ArtifactMetadataSource metadataSource = 
config.artifactMetadataSource();
+        final ArtifactFilter filter = config.filter();
+
+        final ArtifactResolver resolver = config.artifactResolver();
+
+        final ArtifactResolutionResult resolutionResult =
+            resolver.resolveTransitively( artifactSet, pomArtifact, localRepo, 
remoteRepos, metadataSource, filter );
+
+        final List<String> result = new ArrayList<String>( artifacts.size() );
+        for ( final Artifact a : (Collection<Artifact>) 
resolutionResult.getArtifacts() )
+        {
+            if ( !"sources".equals( a.getClassifier() ) && 
!"test-sources".equals( a.getClassifier() ) )
+            {
+                continue;
+            }
+
+            final File d =
+                new File( config.outputBasedir(), a.getArtifactId() + "-" + 
a.getVersion() + "-" + a.getClassifier() );
+
+            if ( !d.exists() )
+            {
+                d.mkdirs();
+            }
+
+            try
+            {
+                final UnArchiver unArchiver = 
config.archiverManager().getUnArchiver( a.getType() );
+
+                unArchiver.setDestDirectory( d );
+                unArchiver.setSourceFile( a.getFile() );
+
+                unArchiver.extract();
+
+                result.add( d.getAbsolutePath() );
+            }
+            catch ( final NoSuchArchiverException e )
+            {
+                throw new ArtifactResolutionException(
+                                                       "Failed to retrieve 
valid un-archiver component: " + a.getType(),
+                                                       a, e );
+            }
+            catch ( final ArchiverException e )
+            {
+                throw new ArtifactResolutionException( "Failed to unpack: " + 
a.getId(), a, e );
+            }
+        }
+
+        return result;
+    }
+
+    @SuppressWarnings( "unchecked" )
+    private static List<String> resolveFromProject( final SourceResolverConfig 
config,
+                                                    final MavenProject 
reactorProject, final Artifact artifact )
+    {
+        final List<String> dirs = new ArrayList<String>();
+
+        if ( config.includeCompileSources() )
+        {
+            final List<String> srcRoots = 
reactorProject.getCompileSourceRoots();
+            for ( final String root : srcRoots )
+            {
+                dirs.add( root );
+            }
+        }
+
+        if ( config.includeTestSources() )
+        {
+            final List<String> srcRoots = 
reactorProject.getTestCompileSourceRoots();
+            final File basedir = reactorProject.getBasedir();
+            for ( final String root : srcRoots )
+            {
+                dirs.add( new File( basedir, root ).getAbsolutePath() );
+            }
+        }
+
+        return JavadocUtil.pruneDirs( reactorProject, dirs );
+    }
+
+    private static String key( final String gid, final String aid )
+    {
+        return gid + ":" + aid;
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/ResourceResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java?rev=931686&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java
 (added)
+++ 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java
 Wed Apr  7 21:01:37 2010
@@ -0,0 +1,164 @@
+package org.apache.maven.plugin.javadoc.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
+
+import java.io.File;
+import java.util.List;
+
+public class SourceResolverConfig
+{
+
+    private final MavenProject project;
+
+    private ArtifactFilter filter;
+
+    private List<MavenProject> reactorProjects;
+
+    private final File outputBasedir;
+
+    private boolean compileSourceIncluded;
+
+    private boolean testSourceIncluded;
+
+    private final ArtifactRepository localRepository;
+
+    private final ArtifactResolver artifactResolver;
+
+    private final ArtifactMetadataSource artifactMetadataSource;
+
+    private final ArchiverManager archiverManager;
+
+    private final ArtifactFactory artifactFactory;
+
+    public SourceResolverConfig( final MavenProject project, final 
ArtifactRepository localRepository,
+                                 final File outputBasedir, final 
ArtifactResolver artifactResolver,
+                                 final ArtifactFactory artifactFactory,
+                                 final ArtifactMetadataSource 
artifactMetadataSource,
+                                 final ArchiverManager archiverManager )
+    {
+        this.project = project;
+        this.localRepository = localRepository;
+        this.outputBasedir = outputBasedir;
+        this.artifactResolver = artifactResolver;
+        this.artifactFactory = artifactFactory;
+        this.artifactMetadataSource = artifactMetadataSource;
+        this.archiverManager = archiverManager;
+    }
+
+    public SourceResolverConfig withFilter( final ArtifactFilter filter )
+    {
+        this.filter = filter;
+        return this;
+    }
+
+    public SourceResolverConfig withReactorProjects( final List<MavenProject> 
reactorProjects )
+    {
+        this.reactorProjects = reactorProjects;
+        return this;
+    }
+
+    public SourceResolverConfig withCompileSources()
+    {
+        compileSourceIncluded = true;
+        return this;
+    }
+
+    public SourceResolverConfig withoutCompileSources()
+    {
+        compileSourceIncluded = false;
+        return this;
+    }
+
+    public SourceResolverConfig withTestSources()
+    {
+        testSourceIncluded = true;
+        return this;
+    }
+
+    public SourceResolverConfig withoutTestSources()
+    {
+        testSourceIncluded = false;
+        return this;
+    }
+
+    public MavenProject project()
+    {
+        return project;
+    }
+
+    public ArtifactRepository localRepository()
+    {
+        return localRepository;
+    }
+
+    public ArtifactFilter filter()
+    {
+        return filter;
+    }
+
+    public List<MavenProject> reactorProjects()
+    {
+        return reactorProjects;
+    }
+
+    public File outputBasedir()
+    {
+        return outputBasedir;
+    }
+
+    public boolean includeCompileSources()
+    {
+        return compileSourceIncluded;
+    }
+
+    public boolean includeTestSources()
+    {
+        return testSourceIncluded;
+    }
+
+    public ArtifactResolver artifactResolver()
+    {
+        return artifactResolver;
+    }
+
+    public ArtifactMetadataSource artifactMetadataSource()
+    {
+        return artifactMetadataSource;
+    }
+
+    public ArchiverManager archiverManager()
+    {
+        return archiverManager;
+    }
+
+    public ArtifactFactory artifactFactory()
+    {
+        return artifactFactory;
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/resolver/SourceResolverConfig.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to