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 138a9c53336bf74508acafddc402535b243333a9
Author: rfscholte <rfscho...@apache.org>
AuthorDate: Sun Dec 9 11:24:39 2018 +0100

    Refactoring
---
 .../maven/plugins/javadoc/AbstractJavadocMojo.java | 24 ++-----
 .../apache/maven/plugins/javadoc/JavadocUtil.java  | 79 +++++++++++++++-------
 .../maven/plugins/javadoc/JavadocUtilTest.java     |  3 +-
 3 files changed, 62 insertions(+), 44 deletions(-)

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 2b65b2e..efc45bc 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java
@@ -2209,8 +2209,8 @@ public abstract class AbstractJavadocMojo
         List<String> files = new ArrayList<>();
         if ( StringUtils.isEmpty( subpackages ) )
         {
-            String[] excludedPackages = getExcludedPackages();
-
+            Collection<String> excludedPackages = getExcludedPackages();
+            
             for ( String sourcePath : sourcePaths )
             {
                 File sourceDirectory = new File( sourcePath );
@@ -2470,9 +2470,8 @@ public abstract class AbstractJavadocMojo
 
         if ( StringUtils.isNotEmpty( sourcepath ) && StringUtils.isNotEmpty( 
subpackages ) )
         {
-            String[] excludedPackages = getExcludedPackages();
-            String[] subpackagesList = subpackages.split( "[:]" );
-
+            Collection<String> excludedPackages = getExcludedPackages();
+            
             excludedNames = JavadocUtil.getExcludedNames( sourcePaths, 
excludedPackages );
         }
 
@@ -2513,7 +2512,7 @@ public abstract class AbstractJavadocMojo
      * @return an array of String objects that contain the package names
      * @throws MavenReportException
      */
-    private String[] getExcludedPackages()
+    private Collection<String> getExcludedPackages()
         throws MavenReportException
     {
         Set<String> excluded = new LinkedHashSet<>();
@@ -2550,18 +2549,7 @@ public abstract class AbstractJavadocMojo
             excluded.addAll( trimValues( packageNames ) );
         }
 
-        String[] result = new String[excluded.size()];
-        if ( isNotEmpty( excluded ) )
-        {
-            int idx = 0;
-            for ( String exclude : excluded )
-            {
-                result[idx] = exclude.replace( '.', File.separatorChar );
-                idx++;
-            }
-        }
-
-        return result;
+        return excluded;
     }
 
     private static List<String> trimValues( List<String> items )
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 d6a8ae6..a9a547c 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -78,6 +78,12 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.charset.Charset;
 import java.nio.charset.IllegalCharsetNameException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -195,12 +201,20 @@ public class JavadocUtil
      * @param excludedPackages the package names to be excluded in the javadoc
      * @return a List of the source files to be excluded in the generated 
javadoc
      */
-    protected static List<String> getExcludedNames( Collection<String> 
sourcePaths, String[] excludedPackages )
+    protected static List<String> getExcludedNames( Collection<String> 
sourcePaths,
+                                                    Collection<String> 
excludedPackages )
     {
         List<String> excludedNames = new ArrayList<>();
         for ( String path : sourcePaths )
         {
-            excludedNames.addAll( getExcludedPackages( path, excludedPackages 
) );
+            for ( String file : getExcludedPackages( Paths.get( path ), 
excludedPackages ) )
+            {
+                String tmpStr = file.replace( '\\', '/' );
+
+                String[] srcSplit = tmpStr.split( Pattern.quote( path.replace( 
'\\', '/' ) + '/' ) );
+
+                excludedNames.add( srcSplit[1].replace( '/', '.' ) );
+            }
         }
 
         return excludedNames;
@@ -336,15 +350,16 @@ public class JavadocUtil
      * @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 )
+    protected static List<String> getIncludedFiles( File sourceDirectory, 
String[] fileList,
+                                                    Collection<String> 
excludePackages )
     {
         List<String> files = new ArrayList<>();
         
-        List<Pattern> excludePackagePatterns = new ArrayList<>( 
excludePackages.length );
+        List<Pattern> excludePackagePatterns = new ArrayList<>( 
excludePackages.size() );
         for ( String excludePackage :  excludePackages )
         {
-            excludePackagePatterns.add( Pattern.compile( 
excludePackage.replace( "\\", "\\\\" )
-                                                                       
.replace( ".", "\\." )
+            excludePackagePatterns.add( Pattern.compile( 
excludePackage.replace( '.', File.separatorChar )
+                                                                       
.replace( "\\", "\\\\" )
                                                                        
.replace( "*", ".+" )
                                                                        
.concat( "[\\\\/][^\\\\/]+\\.java" )
                                                                                
 ) );
@@ -379,40 +394,53 @@ public class JavadocUtil
      * @param excludePackagenames package names to be excluded in the javadoc
      * @return a List of the packagenames to be excluded
      */
-    protected static Collection<String> getExcludedPackages( String 
sourceDirectory, String[] excludePackagenames )
+    protected static Collection<String> getExcludedPackages( Path 
sourceDirectory,
+                                                             
Collection<String> excludePackagenames )
     {
+        final Collection<String> fileList = new ArrayList<>();
+        
+        try
+        {
+            Files.walkFileTree( sourceDirectory, new SimpleFileVisitor<Path>()
+            {
+                @Override
+                public FileVisitResult visitFile( Path file, 
BasicFileAttributes attrs )
+                    throws IOException
+                {
+                    if ( file.getFileName().toString().endsWith( ".java" ) )
+                    {
+                        fileList.add( file.toAbsolutePath().toString() );
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+            } );
+        }
+        catch ( IOException e )
+        {
+            // noop
+        }
+
         List<String> files = new ArrayList<>();
         for ( String excludePackagename : excludePackagenames )
         {
-            String[] excludeName = excludePackagename.split( "[*]" );
+            String[] excludeName = excludePackagename.replace( '.', 
File.separatorChar ).split( "[*]" );
 
-            String[] fileList = FileUtils.getFilesFromExtension( 
sourceDirectory, new String[] { "java" } );
             for ( String aFileList : fileList )
             {
                 for ( String excludePart : excludeName )
                 {
                     if ( !"".equals( excludePart.trim() ) && 
aFileList.contains( excludePart )
-                        && !sourceDirectory.contains( excludePart ) )
+                        && !sourceDirectory.toString().contains( excludePart ) 
)
                     {
-                        files.add( aFileList );
+                        int idx = aFileList.lastIndexOf( File.separatorChar );
+
+                        files.add( aFileList.substring( 0, idx ) );
                     }
                 }
             }
         }
 
-        Set<String> excluded = new LinkedHashSet<>();
-        for ( String file : files )
-        {
-            int idx = file.lastIndexOf( File.separatorChar );
-            String tmpStr = file.substring( 0, idx );
-            tmpStr = tmpStr.replace( '\\', '/' );
-            String[] srcSplit = tmpStr.split( Pattern.quote( 
sourceDirectory.replace( '\\', '/' ) + '/' ) );
-            String excludedPackage = srcSplit[1].replace( '/', '.' );
-
-            excluded.add( excludedPackage );
-        }
-
-        return excluded;
+        return files;
     }
 
     /**
@@ -424,7 +452,8 @@ public class JavadocUtil
      * @param sourceFileExcludes files to exclude.
      */
     protected static List<String> getFilesFromSource( File sourceDirectory, 
List<String> sourceFileIncludes,
-                                                      List<String> 
sourceFileExcludes, String[] excludePackages )
+                                                      List<String> 
sourceFileExcludes,
+                                                      Collection<String> 
excludePackages )
     {
         DirectoryScanner ds = new DirectoryScanner();
         if ( sourceFileIncludes == null )
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 b4db5c5..139a09f 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
@@ -29,6 +29,7 @@ import java.net.SocketTimeoutException;
 import java.net.URI;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -783,7 +784,7 @@ public class JavadocUtilTest
     {
         File sourceDirectory = new File("target/it").getAbsoluteFile();
         String[] fileList = new String[] { "Main.java" };
-        String[] excludePackages = new String[] { "*.it" };
+        Collection<String> excludePackages = Collections.singleton( "*.it" );
         
         List<String> includedFiles = JavadocUtil.getIncludedFiles( 
sourceDirectory, fileList, excludePackages );
         

Reply via email to