Add project/artifact key to set of sourcePaths to recognize reactor projects versus dependencies

git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1816346 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
index b6ecbe0..171736e 100644
--- a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -23,7 +23,6 @@
 import static org.apache.maven.plugins.javadoc.JavadocUtil.isNotEmpty;

 import static org.apache.maven.plugins.javadoc.JavadocUtil.toList;

 import static org.apache.maven.plugins.javadoc.JavadocUtil.toRelative;

-import static org.codehaus.plexus.util.IOUtil.close;

 

 import java.io.File;

 import java.io.FileNotFoundException;

@@ -46,6 +45,7 @@
 import java.util.Collections;

 import java.util.HashMap;

 import java.util.HashSet;

+import java.util.LinkedHashMap;

 import java.util.LinkedHashSet;

 import java.util.LinkedList;

 import java.util.List;

@@ -61,6 +61,7 @@
 import org.apache.commons.lang3.JavaVersion;

 import org.apache.commons.lang3.SystemUtils;

 import org.apache.maven.artifact.Artifact;

+import org.apache.maven.artifact.ArtifactUtils;

 import org.apache.maven.artifact.handler.ArtifactHandler;

 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;

 import org.apache.maven.artifact.repository.ArtifactRepository;

@@ -1977,9 +1978,9 @@
             throw new MavenReportException( "Failed to generate javadoc options file: " + e.getMessage(), e );

         }

 

-        Collection<Collection<String>> sourcePaths = getSourcePaths();

+        Map<String, Collection<String>> sourcePaths = getSourcePaths();

         

-        Collection<String> collectedSourcePaths = collect( sourcePaths );

+        Collection<String> collectedSourcePaths = collect( sourcePaths.values() );

         

         List<String> files = getFiles( collectedSourcePaths );

         if ( !canGenerateReport( files ) )

@@ -2224,10 +2225,10 @@
      * @throws MavenReportException {@link MavenReportException}

      * @see JavadocUtil#pruneDirs(MavenProject, List)

      */

-    protected Collection<Collection<String>> getSourcePaths()

+    protected Map<String, Collection<String>> getSourcePaths()

         throws MavenReportException

     {

-        Collection<Collection<String>> allSourcePaths = new ArrayList<>();

+        Map<String, Collection<String>> mappedSourcePaths = new LinkedHashMap<>();

 

         if ( StringUtils.isEmpty( sourcepath ) )

         {

@@ -2255,11 +2256,13 @@
                     sourcePaths.addAll( l );

                 }

             }

+            mappedSourcePaths.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ),

+                                   sourcePaths );

+            

             if ( includeDependencySources )

             {

-                sourcePaths.addAll( getDependencySourcePaths() );

+                mappedSourcePaths.putAll( getDependencySourcePaths() );

             }

-            allSourcePaths.add( sourcePaths );

 

             if ( isAggregator() && project.isExecutionRoot() )

             {

@@ -2295,7 +2298,9 @@
                                 additionalSourcePaths.addAll( l );

                             }

                         }

-                        allSourcePaths.add( additionalSourcePaths );

+                        mappedSourcePaths.put( ArtifactUtils.versionlessKey( subProject.getGroupId(),

+                                                                             subProject.getArtifactId() ),

+                                               additionalSourcePaths );

                     }

                 }

             }

@@ -2310,10 +2315,11 @@
                     getJavadocDirectory().getAbsolutePath() ) );

                 sourcePaths.addAll( l );

             }

-            allSourcePaths.add( sourcePaths );

+            mappedSourcePaths.put( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ),

+                                   sourcePaths );

         }

 

-        return allSourcePaths;

+        return mappedSourcePaths;

     }

 

     /**

@@ -2333,7 +2339,7 @@
      * @return List of source paths.

      * @throws MavenReportException {@link MavenReportException}

      */

-    protected final List<String> getDependencySourcePaths()

+    protected final Map<String, Collection<String>> getDependencySourcePaths()

         throws MavenReportException

     {

         try

@@ -4641,10 +4647,10 @@
      * @throws MavenReportException if any

      * @see <a href="http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#javadocoptions">http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html#javadocoptions</a>

      */

-    private void addJavadocOptions( List<String> arguments, Collection<Collection<String>> allSourcePaths )

+    private void addJavadocOptions( List<String> arguments, Map<String, Collection<String>> allSourcePaths )

         throws MavenReportException

     {

-        Collection<String> sourcePaths = collect( allSourcePaths );

+        Collection<String> sourcePaths = collect( allSourcePaths.values() );

         

         validateJavadocOptions();

 

@@ -6039,16 +6045,11 @@
         }

 

         File optionsFile = getJavadocOptionsFile();

-        Writer writer = null;

-        try

+        

+        try ( Writer writer = WriterFactory.newXmlWriter( optionsFile ) )

         {

-            writer = WriterFactory.newXmlWriter( optionsFile );

             new JavadocOptionsXpp3Writer().write( writer, options );

         }

-        finally

-        {

-            close( writer );

-        }

 

         return options;

     }

diff --git a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
index 76b68c7..f431114 100644
--- a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
+++ b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/JavadocReport.java
@@ -240,7 +240,7 @@
             List<String> files;

             try

             {

-                sourcePaths = collect( getSourcePaths() );

+                sourcePaths = collect( getSourcePaths().values() );

                 files = getFiles( sourcePaths );

             }

             catch ( MavenReportException e )

diff --git a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
index e47aa99..b4d331f 100644
--- a/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
+++ b/maven-javadoc-plugin/src/main/java/org/apache/maven/plugins/javadoc/resolver/ResourceResolver.java
@@ -24,13 +24,17 @@
 import java.io.File;

 import java.io.FileInputStream;

 import java.io.IOException;

+import java.util.AbstractMap;

 import java.util.ArrayList;

 import java.util.Arrays;

 import java.util.Collection;

+import java.util.Collections;

 import java.util.HashMap;

+import java.util.LinkedHashMap;

 import java.util.LinkedHashSet;

 import java.util.List;

 import java.util.Map;

+import java.util.Map.Entry;

 import java.util.Set;

 

 import org.apache.maven.artifact.Artifact;

@@ -144,11 +148,11 @@
      * @throws ArtifactResolutionException {@link ArtifactResolutionException}

      * @throws ArtifactNotFoundException {@link ArtifactNotFoundException}

      */

-    public List<String> resolveDependencySourcePaths( final SourceResolverConfig config )

+    public Map<String, Collection<String>> resolveDependencySourcePaths( final SourceResolverConfig config )

         throws ArtifactResolutionException, ArtifactNotFoundException

     {

-        final List<String> dirs = new ArrayList<>();

-

+        final Map<String, Collection<String>> mappedDirs = new LinkedHashMap<>();

+        

         final Map<String, MavenProject> projectMap = new HashMap<>();

         if ( config.reactorProjects() != null )

         {

@@ -167,7 +171,7 @@
             final MavenProject p = projectMap.get( key );

             if ( p != null )

             {

-                dirs.addAll( resolveFromProject( config, p, artifact ) );

+                mappedDirs.put( key, resolveFromProject( config, p, artifact ) );

             }

             else

             {

@@ -175,9 +179,12 @@
             }

         }

 

-        dirs.addAll( resolveFromArtifacts( config, forResourceResolution ) );

+        for ( Map.Entry<String, String> entry : resolveFromArtifacts( config, forResourceResolution ) )

+        {

+            mappedDirs.put( entry.getKey(), Collections.singletonList( entry.getValue() ) );

+        }

 

-        return dirs;

+        return mappedDirs;

     }

 

     private static List<JavadocBundle> resolveBundleFromProject( SourceResolverConfig config, MavenProject project,

@@ -263,10 +270,14 @@
             }

         }

 

-        List<String> dirs = null;

+        List<String> dirs = new ArrayList<>( toResolve.size() );

         try

         {

-            dirs = resolveAndUnpack( toResolve, config, RESOURCE_VALID_CLASSIFIERS, false );

+            for ( Map.Entry<String, String> entry : resolveAndUnpack( toResolve, config, RESOURCE_VALID_CLASSIFIERS,

+                                                                      false ) )

+            {

+                dirs.add( entry.getValue() );

+            }

         }

         catch ( ArtifactResolutionException e )

         {

@@ -285,44 +296,35 @@
         

         List<JavadocBundle> result = new ArrayList<>();

 

-        if ( dirs != null )

+        for ( String d : dirs )

         {

-            for ( String d : dirs )

-            {

-                File dir = new File( d );

-                File resources = new File( dir, ResourcesBundleMojo.RESOURCES_DIR_PATH );

-                JavadocOptions options = null;

+            File dir = new File( d );

+            File resources = new File( dir, ResourcesBundleMojo.RESOURCES_DIR_PATH );

+            JavadocOptions options = null;

 

-                File javadocOptions = new File( dir, ResourcesBundleMojo.BUNDLE_OPTIONS_PATH );

-                if ( javadocOptions.exists() )

+            File javadocOptions = new File( dir, ResourcesBundleMojo.BUNDLE_OPTIONS_PATH );

+            if ( javadocOptions.exists() )

+            {

+                try ( FileInputStream reader = new FileInputStream( javadocOptions )  )

                 {

-                    FileInputStream reader = null;

-                    try

-                    {

-                        reader = new FileInputStream( javadocOptions );

-                        options = new JavadocOptionsXpp3Reader().read( reader );

-                    }

-                    catch ( XmlPullParserException e )

-                    {

-                        IOException error = new IOException( "Failed to parse javadoc options: " + e.getMessage() );

-                        error.initCause( e );

-                        

-                        throw error;

-                    }

-                    finally

-                    {

-                        close( reader );

-                    }

+                    options = new JavadocOptionsXpp3Reader().read( reader );

                 }

-                

-                result.add( new JavadocBundle( options, resources ) );

+                catch ( XmlPullParserException e )

+                {

+                    IOException error = new IOException( "Failed to parse javadoc options: " + e.getMessage() );

+                    error.initCause( e );

+                    

+                    throw error;

+                }

             }

+            

+            result.add( new JavadocBundle( options, resources ) );

         }

         

         return result;

     }

 

-    private List<String> resolveFromArtifacts( final SourceResolverConfig config,

+    private Collection<Entry<String, String>> resolveFromArtifacts( final SourceResolverConfig config,

                                                       final List<Artifact> artifacts )

         throws ArtifactResolutionException, ArtifactNotFoundException

     {

@@ -364,8 +366,20 @@
         return a;

     }

 

-    private List<String> resolveAndUnpack( final List<Artifact> artifacts, final SourceResolverConfig config,

-                                                  final List<String> validClassifiers, final boolean propagateErrors )

+    /**

+     * 

+     * @param artifacts the artifacts to resolve

+     * @param config the configuration

+     * @param validClassifiers 

+     * @param propagateErrors

+     * @return list of <dependencyConflictId, absolutePath>

+     * @throws ArtifactResolutionException if an exception occurs

+     * @throws ArtifactNotFoundException if an exception occurs

+     */

+    private Collection<Map.Entry<String, String>> resolveAndUnpack( final List<Artifact> artifacts,

+                                                                    final SourceResolverConfig config,

+                                                                    final List<String> validClassifiers,

+                                                                    final boolean propagateErrors )

         throws ArtifactResolutionException, ArtifactNotFoundException

     {

         // NOTE: Since these are '-sources' and '-test-sources' artifacts, they won't actually 

@@ -383,7 +397,7 @@
             filter = null;

         }

         

-        final List<String> result = new ArrayList<>( artifacts.size() );

+        final List<Map.Entry<String, String>> result = new ArrayList<>( artifacts.size() );

         for ( final Artifact a : artifactSet )

         {

             if ( !validClassifiers.contains( a.getClassifier() ) || ( filter != null && !filter.include( a ) ) )

@@ -418,7 +432,8 @@
 

                 unArchiver.extract();

 

-                result.add( d.getAbsolutePath() );

+                result.add( new AbstractMap.SimpleEntry<String, String>( a.getDependencyConflictId(),

+                                                                         d.getAbsolutePath() ) );

             }

             catch ( final NoSuchArchiverException e )

             {

diff --git a/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject1TestMavenProjectStub.java b/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject1TestMavenProjectStub.java
index def9961..68667ef 100644
--- a/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject1TestMavenProjectStub.java
+++ b/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject1TestMavenProjectStub.java
@@ -22,6 +22,7 @@
 import java.io.File;

 import java.util.ArrayList;

 import java.util.List;

+import java.util.Objects;

 

 import org.apache.maven.artifact.Artifact;

 import org.apache.maven.model.Build;

@@ -39,9 +40,9 @@
     {

         readModel( new File( getBasedir(), "pom.xml" ) );

 

-        setGroupId( getModel().getGroupId() );

+        setGroupId( Objects.toString( getModel().getGroupId(), getModel().getParent().getGroupId() ) );

         setArtifactId( getModel().getArtifactId() );

-        setVersion( getModel().getVersion() );

+        setVersion( Objects.toString( getModel().getVersion(), getModel().getParent().getVersion() ) );

         setName( getModel().getName() );

         setUrl( getModel().getUrl() );

         setPackaging( getModel().getPackaging() );

diff --git a/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject2TestMavenProjectStub.java b/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject2TestMavenProjectStub.java
index 9283309..bbc5647 100644
--- a/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject2TestMavenProjectStub.java
+++ b/maven-javadoc-plugin/src/test/java/org/apache/maven/plugins/javadoc/stubs/AggregateResourcesProject2TestMavenProjectStub.java
@@ -22,6 +22,7 @@
 import java.io.File;

 import java.util.ArrayList;

 import java.util.List;

+import java.util.Objects;

 

 import org.apache.maven.artifact.Artifact;

 import org.apache.maven.model.Build;

@@ -39,9 +40,9 @@
     {

         readModel( new File( getBasedir(), "pom.xml" ) );

 

-        setGroupId( getModel().getGroupId() );

+        setGroupId( Objects.toString( getModel().getGroupId(), getModel().getParent().getGroupId() ) );

         setArtifactId( getModel().getArtifactId() );

-        setVersion( getModel().getVersion() );

+        setVersion( Objects.toString( getModel().getVersion(), getModel().getParent().getVersion() ) );

         setName( getModel().getName() );

         setUrl( getModel().getUrl() );

         setPackaging( getModel().getPackaging() );