From 048015b7d891edd74c8d458aa582a504511872c6 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Fri, 28 Sep 2018 20:27:53 +0200
Subject: [PATCH] BZ 62424 minimal module support for javadoc
---
WHATSNEW | 3 +
manual/Tasks/javadoc.html | 73 +++++++--
.../apache/tools/ant/taskdefs/Javadoc.java | 142 +++++++++++++++++-
3 files changed, 207 insertions(+), 11 deletions(-)
diff --git a/WHATSNEW b/WHATSNEW
index 6cd11da77..e5bfed371 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -32,6 +32,9 @@ Other changes:
command line arguments that are not supported explicitly by the
tasks via attributes.
+ * added several attributes to that support modules.
+ Bugzilla Report 62424
+
Changes from Ant 1.9.12 TO Ant 1.9.13
=====================================
diff --git a/manual/Tasks/javadoc.html b/manual/Tasks/javadoc.html
index 430435ff8..a32ed4786 100644
--- a/manual/Tasks/javadoc.html
+++ b/manual/Tasks/javadoc.html
@@ -92,9 +92,9 @@ to <javadoc> using classpath, classpathref attributes or
sourcepath |
Specify where to find source files |
all |
- At least one of the three or nested
- <sourcepath> , <fileset> or
- <packageset> |
+ At least one of the four or nested
+ <sourcepath> , <fileset> .
+ module or <packageset> |
sourcepathref |
@@ -108,6 +108,12 @@ to <javadoc> using classpath, classpathref attributes or
the nested source
element.
all |
+
+ modulenames |
+ Comma separated list of module names -- see also
+ the nested module element. since Ant 1.9.14 |
+ all |
+
destdir |
Destination directory for output files |
@@ -530,6 +536,36 @@ to <javadoc> using classpath, classpathref attributes or
1.4 |
No |
+
+ modulesourcepath |
+ Specify where to find module source files
+ since Ant 1.9.14 |
+ all |
+ No |
+
+
+ modulesourcepathref |
+ Specify where to find module source files by reference to a PATH defined elsewhere.
+ since Ant 1.9.14 |
+ all |
+ No |
+
+
+ modulepath |
+ Specify where to find module files
+ since Ant 1.9.14 |
+ all |
+ No |
+
+
+ modulepathref |
+ Specify where to find module files by reference to a PATH defined elsewhere.
+ since Ant 1.9.14 |
+ all |
+ No |
+
@@ -607,6 +643,24 @@ javadoc as source files.
Parameters
Same as for package
.
+module
+since Ant 1.9.14
+Same as one entry in the list given by modulenames
.
+
+Parameters
+
+
+ Attribute |
+ Description |
+ Required |
+
+
+ name |
+ The module name |
+ Yes |
+
+
+
source
Same as one entry in the list given by sourcefiles
.
@@ -830,12 +884,13 @@ the javadoc program.
-sourcepath, classpath and bootclasspath
-Javadoc
's sourcepath, classpath and
-bootclasspath attributes are PATH like
-structure and can also be set via nested sourcepath,
-classpath and bootclasspath elements
-respectively.
+sourcepath, classpath, bootclasspath, modulepath, modulesourcepath
+Javadoc
's sourcepath, classpath,
+bootclasspath, modulepath, and modulesourcepath
+attributes are PATH like structure
+and can also be set via nested sourcepath,
+classpath, bootclasspath, modulepath,
+and modulesourcepath elements respectively.
arg
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
index 7a5c2ec84..999b103e6 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
@@ -37,6 +37,7 @@ import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -447,11 +448,14 @@ public class Javadoc extends Task {
private final Vector sourceFiles = new Vector();
private final Vector packageNames = new Vector();
private final Vector excludePackageNames = new Vector(1);
+ private final List moduleNames = new ArrayList();
private boolean author = true;
private boolean version = true;
private DocletInfo doclet = null;
private Path classpath = null;
private Path bootclasspath = null;
+ private Path modulePath = null;
+ private Path moduleSourcePath = null;
private String group = null;
private String packageList = null;
private final Vector links = new Vector();
@@ -562,6 +566,88 @@ public class Javadoc extends Task {
createSourcepath().setRefid(r);
}
+ /**
+ * Specify where to find modules
+ *
+ * @param src a Path instance containing the modules.
+ *
+ * @since Ant 1.9.14
+ */
+ public void setModulePath(final Path mp) {
+ if (modulePath == null) {
+ modulePath = mp;
+ } else {
+ modulePath.append(mp);
+ }
+ }
+
+ /**
+ * Create a path to be configured with the locations of the module
+ * files.
+ *
+ * @return a new Path instance to be configured by the Ant core.
+ *
+ * @since Ant 1.9.14
+ */
+ public Path createModulePath() {
+ if (modulePath == null) {
+ modulePath = new Path(getProject());
+ }
+ return modulePath.createPath();
+ }
+
+ /**
+ * Adds a reference to a path defined elsewhere that defines the module path.
+ *
+ * @param r the reference containing the module path definition.
+ *
+ * @since Ant 1.9.14
+ */
+ public void setModulePathref(final Reference r) {
+ createModulePath().setRefid(r);
+ }
+
+ /**
+ * Specify where to find sources for modules
+ *
+ * @param src a Path instance containing the sources for modules.
+ *
+ * @since Ant 1.9.14
+ */
+ public void setModuleSourcePath(final Path mp) {
+ if (moduleSourcePath == null) {
+ moduleSourcePath = mp;
+ } else {
+ moduleSourcePath.append(mp);
+ }
+ }
+
+ /**
+ * Create a path to be configured with the locations of the module
+ * source files.
+ *
+ * @return a new Path instance to be configured by the Ant core.
+ *
+ * @since Ant 1.9.14
+ */
+ public Path createModuleSourcePath() {
+ if (moduleSourcePath == null) {
+ moduleSourcePath = new Path(getProject());
+ }
+ return moduleSourcePath.createPath();
+ }
+
+ /**
+ * Adds a reference to a path defined elsewhere that defines the module source path.
+ *
+ * @param r the reference containing the module source path definition.
+ *
+ * @since Ant 1.9.14
+ */
+ public void setModuleSourcePathref(final Reference r) {
+ createModuleSourcePath().setRefid(r);
+ }
+
/**
* Set the directory where the Javadoc output will be generated.
*
@@ -615,6 +701,23 @@ public class Javadoc extends Task {
}
}
+ /**
+ * Set the module names to be processed.
+ *
+ * @param modules a comma separated list of module names
+ *
+ * @since Ant 1.9.14
+ */
+ public void setModulenames(final String modules) {
+ final StringTokenizer tok = new StringTokenizer(modules, ",");
+ while (tok.hasMoreTokens()) {
+ final String m = tok.nextToken();
+ final PackageName mn = new PackageName();
+ mn.setName(m);
+ addModule(mn);
+ }
+ }
+
/**
* Add a single package to be processed.
*
@@ -627,6 +730,17 @@ public class Javadoc extends Task {
packageNames.addElement(pn);
}
+ /**
+ * Add a single module to be processed.
+ *
+ * @param mn the module name
+ *
+ * @since Ant 1.9.14
+ */
+ public void addModule(final PackageName mn) {
+ moduleNames.add(mn);
+ }
+
/**
* Set the list of packages to be excluded.
*
@@ -1746,6 +1860,7 @@ public class Javadoc extends Task {
doGroup(toExecute); // group attribute
doGroups(toExecute); // groups attribute
doDocFilesSubDirs(toExecute); // docfilessubdir attribute
+ doModuleArguments(toExecute);
doJava14(toExecute);
if (breakiterator && (doclet == null || JAVADOC_5)) {
@@ -1862,8 +1977,8 @@ public class Javadoc extends Task {
private void checkPackagesToDoc(
final Vector packagesToDoc, final Vector sourceFilesToDoc) {
if (packageList == null && packagesToDoc.size() == 0
- && sourceFilesToDoc.size() == 0) {
- throw new BuildException("No source files and no packages have "
+ && sourceFilesToDoc.size() == 0 && moduleNames.isEmpty()) {
+ throw new BuildException("No source files, no packages and no modules have "
+ "been specified.");
}
}
@@ -2549,6 +2664,29 @@ public class Javadoc extends Task {
return fileContents;
}
+ private void doModuleArguments(Commandline toExecute) {
+ if (!moduleNames.isEmpty()) {
+ StringBuilder sb = null;
+ for (PackageName mn : moduleNames) {
+ if (sb == null) {
+ sb = new StringBuilder(mn.getName());
+ } else {
+ sb.append(",").append(mn.getName());
+ }
+ }
+ toExecute.createArgument().setValue("--module");
+ toExecute.createArgument().setValue(sb.toString());
+ }
+ if (modulePath != null) {
+ toExecute.createArgument().setValue("--module-path");
+ toExecute.createArgument().setPath(modulePath);
+ }
+ if (moduleSourcePath != null) {
+ toExecute.createArgument().setValue("--module-source-path");
+ toExecute.createArgument().setPath(moduleSourcePath);
+ }
+ }
+
private class JavadocOutputStream extends LogOutputStream {
JavadocOutputStream(final int level) {
super(Javadoc.this, level);