You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2018/12/09 14:45:42 UTC

[maven-javadoc-plugin] 01/05: [MJAVADOC-548] Directoryname mixed up with excludePackageNames

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MJAVADOC-548
in repository https://gitbox.apache.org/repos/asf/maven-javadoc-plugin.git

commit 9e053910f8b99814c1baec789f8938ec502a9b74
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Dec 7 10:31:54 2018 +0100

    [MJAVADOC-548] Directoryname mixed up with excludePackageNames
---
 .gitignore                                         |  1 +
 .../com/foo/bar/internal/{NotApi.java => Api.java} |  4 +-
 src/it/projects/MJAVADOC-384/verify.bsh            | 16 +++-
 .../maven/plugins/javadoc/AbstractJavadocMojo.java |  4 +-
 .../apache/maven/plugins/javadoc/JavadocUtil.java  | 92 +++++++---------------
 .../maven/plugins/javadoc/JavadocUtilTest.java     | 14 ++++
 6 files changed, 61 insertions(+), 70 deletions(-)

diff --git a/.gitignore b/.gitignore
index 384de6f..bdbdf67 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@ out/
 .java-version
 /javadoc-options-javadoc-resources.xml
 .checkstyle
+/src/it/mrm/3rdparty/_doclet-1.0.jar
diff --git a/src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/NotApi.java b/src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/Api.java
similarity index 95%
rename from src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/NotApi.java
rename to src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/Api.java
index 53480de..7121d40 100644
--- a/src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/NotApi.java
+++ b/src/it/projects/MJAVADOC-384/src/main/java/com/foo/bar/internal/Api.java
@@ -19,7 +19,7 @@ package com.foo.bar.internal;
  * under the License.
  */
 
-/** Not API */
-public class NotApi {
+/** API */
+public class Api {
 
 }
diff --git a/src/it/projects/MJAVADOC-384/verify.bsh b/src/it/projects/MJAVADOC-384/verify.bsh
index dce4671..1c80f44 100644
--- a/src/it/projects/MJAVADOC-384/verify.bsh
+++ b/src/it/projects/MJAVADOC-384/verify.bsh
@@ -36,11 +36,19 @@ for ( File javadocFile : nonExistingJavadocFiles )
     }
 }
 
-File javadocFile = new File ( basedir, "target/site/apidocs/com/foo/bar/Api.html" );
-if ( !javadocFile.exists() ) 
+File[] existingJavadocFiles = new File[] {
+    new File( basedir, "target/site/apidocs/com/foo/bar/Api.html" ),
+    new File( basedir, "target/site/apidocs/com/foo/bar/internal/Api.html" ),
+};
+
+for ( File javadocFile : existingJavadocFiles )
 {
-    System.err.println( javadocFile.getAbsolutePath() + " is missing." );
-    return false;
+    if ( !javadocFile.exists() ) 
+    {
+        System.err.println( javadocFile.getAbsolutePath() + " is missing." );
+        return false;
+    }
 }
 
+
 return true;
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
index addcd36..2b65b2e 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -2214,8 +2214,8 @@ public abstract class AbstractJavadocMojo
             for ( String sourcePath : sourcePaths )
             {
                 File sourceDirectory = new File( sourcePath );
-                JavadocUtil.addFilesFromSource( files, sourceDirectory, sourceFileIncludes, sourceFileExcludes,
-                                                excludedPackages );
+                files.addAll( JavadocUtil.getFilesFromSource( sourceDirectory, sourceFileIncludes, sourceFileExcludes,
+                                                              excludedPackages ) );
             }
         }
 
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
index 22cab64..23fd546 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -333,70 +333,39 @@ public class JavadocUtil
      * Method that gets the files or classes that would be included in the javadocs using the subpackages parameter.
      *
      * @param sourceDirectory the directory where the source files are located
-     * @param fileList the list of all files found in the sourceDirectory
+     * @param fileList the list of all relative files found in the sourceDirectory
      * @param excludePackages package names to be excluded in the javadoc
      * @return a StringBuilder that contains the appended file names of the files to be included in the javadoc
      */
     protected static List<String> getIncludedFiles( File sourceDirectory, String[] fileList, String[] excludePackages )
     {
         List<String> files = new ArrayList<>();
+        
+        List<Pattern> excludePackagePatterns = new ArrayList<>( excludePackages.length );
+        for ( String excludePackage :  excludePackages )
+        {
+            excludePackagePatterns.add( Pattern.compile( excludePackage.replace( "\\", "\\\\" )
+                                                                       .replace( ".", "\\." )
+                                                                       .replace( "*", ".+" )
+                                                                       .concat( "[\\\\/][^\\\\/]+\\.java" )
+                                                                                ) );
+        }
 
-        for ( String aFileList : fileList )
+        for ( String file : fileList )
         {
-            boolean include = true;
-            for ( int k = 0; k < excludePackages.length && include; k++ )
+            boolean excluded = false;
+            for ( Pattern excludePackagePattern :  excludePackagePatterns )
             {
-                // handle wildcards (*) in the excludePackageNames
-                String[] excludeName = excludePackages[k].split( "[*]" );
-
-                if ( excludeName.length == 0 )
+                if ( excludePackagePattern.matcher( file ).matches() )
                 {
-                    continue;
-                }
-
-                if ( excludeName.length > 1 )
-                {
-                    int u = 0;
-                    while ( include && u < excludeName.length )
-                    {
-                        if ( !"".equals( excludeName[u].trim() ) && aFileList.contains( excludeName[u] ) )
-                        {
-                            include = false;
-                        }
-                        u++;
-                    }
-                }
-                else
-                {
-                    if ( aFileList.startsWith( sourceDirectory.toString() + File.separatorChar + excludeName[0] ) )
-                    {
-                        if ( excludeName[0].endsWith( String.valueOf( File.separatorChar ) ) )
-                        {
-                            int i = aFileList.lastIndexOf( File.separatorChar );
-                            String packageName = aFileList.substring( 0, i + 1 );
-                            File currentPackage = new File( packageName );
-                            File excludedPackage = new File( sourceDirectory, excludeName[0] );
-                            if ( currentPackage.equals( excludedPackage )
-                                && aFileList.substring( i ).contains( ".java" ) )
-                            {
-                                include = true;
-                            }
-                            else
-                            {
-                                include = false;
-                            }
-                        }
-                        else
-                        {
-                            include = false;
-                        }
-                    }
+                    excluded = true;
+                    break;
                 }
             }
-
-            if ( include )
+            
+            if ( !excluded )
             {
-                files.add( quotedPathArgument( aFileList ) );
+                files.add( file );
             }
         }
 
@@ -455,13 +424,12 @@ public class JavadocUtil
      * Convenience method that gets the files to be included in the javadoc.
      *
      * @param sourceDirectory the directory where the source files are located
-     * @param files the variable that contains the appended filenames of the files to be included in the javadoc
      * @param excludePackages the packages to be excluded in the javadocs
      * @param sourceFileIncludes files to include.
      * @param sourceFileExcludes files to exclude.
      */
-    protected static void addFilesFromSource( List<String> files, File sourceDirectory, List<String> sourceFileIncludes,
-                                              List<String> sourceFileExcludes, String[] excludePackages )
+    protected static List<String> getFilesFromSource( File sourceDirectory, List<String> sourceFileIncludes,
+                                                      List<String> sourceFileExcludes, String[] excludePackages )
     {
         DirectoryScanner ds = new DirectoryScanner();
         if ( sourceFileIncludes == null )
@@ -477,17 +445,17 @@ public class JavadocUtil
         ds.scan();
 
         String[] fileList = ds.getIncludedFiles();
-        String[] pathList = new String[fileList.length];
-        for ( int x = 0; x < fileList.length; x++ )
-        {
-            pathList[x] = new File( sourceDirectory, fileList[x] ).getAbsolutePath();
-        }
 
-        if ( pathList.length != 0 )
+        List<String> files = new ArrayList<>();
+        if ( fileList.length != 0 )
         {
-            List<String> tmpFiles = getIncludedFiles( sourceDirectory, pathList, excludePackages );
-            files.addAll( tmpFiles );
+            for ( String includedFile : getIncludedFiles( sourceDirectory, fileList, excludePackages ) )
+            {
+                files.add( quotedPathArgument( new File( sourceDirectory, includedFile ).getAbsolutePath() ) );
+            }
         }
+
+        return files;
     }
 
     /**
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
index 825c2a0..b4db5c5 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
@@ -1,5 +1,7 @@
 package org.apache.maven.plugins.javadoc;
 
+import static org.junit.Assert.assertArrayEquals;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -775,6 +777,18 @@ public class JavadocUtilTest
         assertEquals( path1 + ps + path2 + ps + path1 + ps + path2, JavadocUtil.unifyPathSeparator( path1 + ";"
             + path2 + ":" + path1 + ":" + path2 ) );
     }
+    
+    
+    public void testGetIncludedFiles() throws Exception
+    {
+        File sourceDirectory = new File("target/it").getAbsoluteFile();
+        String[] fileList = new String[] { "Main.java" };
+        String[] excludePackages = new String[] { "*.it" };
+        
+        List<String> includedFiles = JavadocUtil.getIncludedFiles( sourceDirectory, fileList, excludePackages );
+        
+        assertArrayEquals( fileList, includedFiles.toArray( new String[0] ) );
+    }
 
     private void stopSilently( Server server )
     {