This is an automated email from the ASF dual-hosted git repository. olamy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-javadoc-plugin.git
The following commit(s) were added to refs/heads/master by this push: new 314203a0 [MJAVADOC-814] handle parameters such packages with multi lines (#337) 314203a0 is described below commit 314203a01e146a78ef8a2564034944d8c1b62b88 Author: Olivier Lamy <ol...@apache.org> AuthorDate: Mon Nov 18 21:07:07 2024 +1000 [MJAVADOC-814] handle parameters such packages with multi lines (#337) * [MJAVADOC-814] handle parameters such packages with multi lines * manage other parameters with multi lines --------- Signed-off-by: Olivier Lamy <ol...@apache.org> --- .../maven/plugins/javadoc/AbstractJavadocMojo.java | 2 +- .../apache/maven/plugins/javadoc/JavadocUtil.java | 33 ++++++++++++---------- .../maven/plugins/javadoc/JavadocUtilTest.java | 24 ++++++++++++++++ 3 files changed, 43 insertions(+), 16 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 9e63b7e8..99fc31ff 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/AbstractJavadocMojo.java @@ -5955,7 +5955,7 @@ public abstract class AbstractJavadocMojo extends AbstractMojo { options.setBootclasspathArtifacts(toList(bootclasspathArtifacts)); options.setDocfilesSubdirsUsed(docfilessubdirs); options.setDocletArtifacts(toList(docletArtifact, docletArtifacts)); - options.setExcludedDocfilesSubdirs(excludedocfilessubdir); + options.setExcludedDocfilesSubdirs(excludedocfilessubdir == null ? null : excludedocfilessubdir.trim()); options.setExcludePackageNames(toList(excludePackageNames)); options.setGroups(toList(groups)); options.setLinks(links); 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 ecd5d77b..7c723c24 100644 --- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java +++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java @@ -20,7 +20,6 @@ package org.apache.maven.plugins.javadoc; import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; @@ -57,6 +56,7 @@ import java.util.jar.JarInputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import java.util.stream.Collectors; import org.apache.http.HttpHeaders; import org.apache.http.HttpHost; @@ -221,14 +221,17 @@ public class JavadocUtil { * @return quoted option-argument */ protected static String quotedArgument(String value) { + if (value == null) { + return null; + } String arg = value; + List<String> list = Arrays.stream(arg.split("\n")).map(String::trim).collect(Collectors.toList()); + arg = String.join("", list); + if (arg != null && !arg.isEmpty()) { arg = arg.replace("'", "\\'"); arg = "'" + arg + "'"; - - // To prevent javadoc error - arg = arg.replace("\n", " "); } return arg; @@ -253,7 +256,7 @@ public class JavadocUtil { for (int i = 0; i < split.length; i++) { if (i != split.length - 1) { - pathBuilder.append(split[i]).append("\\'"); + pathBuilder.append(split[i].trim()).append("\\'"); } else { pathBuilder.append(split[i]); } @@ -291,7 +294,7 @@ public class JavadocUtil { String current; while (st.hasMoreTokens()) { current = st.nextToken(); - excludes.add("**/" + current + "/**"); + excludes.add("**/" + current.trim() + "/**"); } } @@ -422,9 +425,9 @@ public class JavadocUtil { if (sourceFileIncludes == null) { sourceFileIncludes = Collections.singletonList("**/*.java"); } - ds.setIncludes(sourceFileIncludes.toArray(new String[sourceFileIncludes.size()])); - if (sourceFileExcludes != null && sourceFileExcludes.size() > 0) { - ds.setExcludes(sourceFileExcludes.toArray(new String[sourceFileExcludes.size()])); + ds.setIncludes(sourceFileIncludes.toArray(new String[0])); + if (sourceFileExcludes != null && !sourceFileExcludes.isEmpty()) { + ds.setExcludes(sourceFileExcludes.toArray(new String[0])); } ds.setBasedir(sourceDirectory); ds.scan(); @@ -753,7 +756,7 @@ public class JavadocUtil { if (!projectFile.isFile()) { throw new IllegalArgumentException(projectFile.getAbsolutePath() + " is not a file."); } - if (goals == null || goals.size() == 0) { + if (goals == null || goals.isEmpty()) { throw new IllegalArgumentException("goals should be not empty."); } if (localRepositoryDir == null || !localRepositoryDir.isDirectory()) { @@ -889,7 +892,7 @@ public class JavadocUtil { subpaths.add(pathTokenizer.nextToken()); } - return subpaths.toArray(new String[subpaths.size()]); + return subpaths.toArray(new String[0]); } /** @@ -932,7 +935,7 @@ public class JavadocUtil { List<String> classes = new ArrayList<>(); Pattern pattern = Pattern.compile("(?i)^(META-INF/versions/(?<v>[0-9]+)/)?(?<n>.+)[.]class$"); - try (JarInputStream jarStream = new JarInputStream(new FileInputStream(jarFile))) { + try (JarInputStream jarStream = new JarInputStream(Files.newInputStream(jarFile.toPath()))) { for (JarEntry jarEntry = jarStream.getNextJarEntry(); jarEntry != null; jarEntry = jarStream.getNextJarEntry()) { @@ -1179,7 +1182,7 @@ public class JavadocUtil { lookahead = nextToken; } } - return token; + return token.trim(); } } @@ -1223,7 +1226,7 @@ public class JavadocUtil { sb.append(elementSuffix); } - result.add(sb.toString()); + result.add(sb.toString().trim()); } return result; @@ -1513,7 +1516,7 @@ public class JavadocUtil { builder.setUserAgent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); // Some server reject requests that do not have an Accept header - builder.setDefaultHeaders(Arrays.asList(new BasicHeader(HttpHeaders.ACCEPT, "*/*"))); + builder.setDefaultHeaders(Collections.singletonList(new BasicHeader(HttpHeaders.ACCEPT, "*/*"))); if (settings != null && settings.getActiveProxy() != null) { Proxy activeProxy = settings.getActiveProxy(); 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 a421706f..25c4c485 100644 --- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java +++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java @@ -654,6 +654,11 @@ public class JavadocUtilTest extends PlexusTestCase { assertEquals( path1 + ps + path2 + ps + path1 + ps + path2, JavadocUtil.unifyPathSeparator(path1 + ";" + path2 + ":" + path1 + ":" + path2)); + + path1 = "/tmp/maven-javadoc-plugin/src/main/java;\n" + "/tmp/maven-javadoc-plugin/src/main/javadoc\n"; + assertEquals( + "/tmp/maven-javadoc-plugin/src/main/java" + ps + "/tmp/maven-javadoc-plugin/src/main/javadoc", + JavadocUtil.unifyPathSeparator(path1)); } public void testGetIncludedFiles() { @@ -675,4 +680,23 @@ public class JavadocUtilTest extends PlexusTestCase { // ignored } } + + public void testQuotedArgument() throws Exception { + + String value = " org.apache.uima.analysis_component:\n org.apache.uima.analysis_engine\n"; + + String arg = JavadocUtil.quotedArgument(value); + assertEquals("'org.apache.uima.analysis_component:org.apache.uima.analysis_engine'", arg); + + value = "org.apache.uima.analysis_component:org.apache.uima.analysis_engine"; + + arg = JavadocUtil.quotedArgument(value); + assertEquals("'org.apache.uima.analysis_component:org.apache.uima.analysis_engine'", arg); + } + + public void testToList() throws Exception { + String value = " *.internal:org.acme.exclude1.*:\n org.acme.exclude2\n "; + List<String> values = JavadocUtil.toList(value); + assertThat(values).containsExactly("*.internal", "org.acme.exclude1.*", "org.acme.exclude2"); + } }