This is an automated email from the ASF dual-hosted git repository.
simonetripodi pushed a commit to branch SLING-8273
in repository
https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git
The following commit(s) were added to refs/heads/SLING-8273 by this push:
new a3e6925 SLING-8277 - APIs jar MOJO doesn't produce any Javadoc if
package name is invalid or contains Java keywords
a3e6925 is described below
commit a3e692555c6a39c7a99cf884f8cea96c3895926f
Author: Simo Tripodi <[email protected]>
AuthorDate: Thu Feb 14 15:21:10 2019 +0100
SLING-8277 - APIs jar MOJO doesn't produce any Javadoc if package name
is invalid or contains Java keywords
---
.../sling/feature/maven/mojos/ApisJarMojo.java | 71 ++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git
a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
index 527f561..ab5fef6 100644
--- a/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
+++ b/src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java
@@ -25,11 +25,13 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Formatter;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.jar.Manifest;
+import java.util.regex.Pattern;
import javax.json.Json;
import javax.json.stream.JsonParser;
@@ -696,6 +698,62 @@ public class ApisJarMojo extends
AbstractIncludingFeatureMojo {
private static final class ApiRegion {
+ private static final Pattern PACKAGE_NAME_VALIDATION =
+ Pattern.compile("^[a-z]+(\\.[a-zA-Z_][a-zA-Z0-9_]*)*$");
+
+ private static final Set<String> KEYWORDS = new HashSet<>();
+
+ static {
+ KEYWORDS.add("abstract");
+ KEYWORDS.add("continue");
+ KEYWORDS.add("for");
+ KEYWORDS.add("new");
+ KEYWORDS.add("switch");
+ KEYWORDS.add("assert");
+ KEYWORDS.add("default");
+ KEYWORDS.add("package");
+ KEYWORDS.add("synchronized");
+ KEYWORDS.add("boolean");
+ KEYWORDS.add("do");
+ KEYWORDS.add("if");
+ KEYWORDS.add("private");
+ KEYWORDS.add("this");
+ KEYWORDS.add("break");
+ KEYWORDS.add("double");
+ KEYWORDS.add("implements");
+ KEYWORDS.add("protected");
+ KEYWORDS.add("throw");
+ KEYWORDS.add("byte");
+ KEYWORDS.add("else");
+ KEYWORDS.add("import");
+ KEYWORDS.add("public");
+ KEYWORDS.add("throws");
+ KEYWORDS.add("case");
+ KEYWORDS.add("enum");
+ KEYWORDS.add("instanceof");
+ KEYWORDS.add("return");
+ KEYWORDS.add("transient");
+ KEYWORDS.add("catch");
+ KEYWORDS.add("extends");
+ KEYWORDS.add("int");
+ KEYWORDS.add("short");
+ KEYWORDS.add("try");
+ KEYWORDS.add("char");
+ KEYWORDS.add("final");
+ KEYWORDS.add("interface");
+ KEYWORDS.add("static");
+ KEYWORDS.add("void");
+ KEYWORDS.add("class");
+ KEYWORDS.add("finally");
+ KEYWORDS.add("long");
+ KEYWORDS.add("strictfp");
+ KEYWORDS.add("volatile");
+ KEYWORDS.add("float");
+ KEYWORDS.add("native");
+ KEYWORDS.add("super");
+ KEYWORDS.add("while");
+ }
+
private final Set<String> apis = new TreeSet<>();
private final Set<String> filteringApis = new TreeSet<>();
@@ -719,6 +777,19 @@ public class ApisJarMojo extends
AbstractIncludingFeatureMojo {
}
public void addApi(String api) {
+ // ignore non well-formed packages names, i.e. javax.jms.doc-files
+ if (!PACKAGE_NAME_VALIDATION.matcher(api).matches()) {
+ // ignore it
+ return;
+ }
+
+ // ignore packages with reserved keywords, i.e.
org.apache.commons.lang.enum
+ for (String apiPart : api.split("\\.")) {
+ if (KEYWORDS.contains(apiPart)) {
+ return;
+ }
+ }
+
apis.add(api);
filteringApis.add("**/" + api.replace('.', '/') + "/*");
}