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 );