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 +

Format of the group attribute

@@ -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
+ + + + + + + + + + + +
AttributeDescriptionRequired
nameThe module nameYes
+

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