Repository: ant Updated Branches: refs/heads/1.9.x d100b9003 -> 048015b7d
BZ 62424 minimal module support for javadoc Project: http://git-wip-us.apache.org/repos/asf/ant/repo Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/048015b7 Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/048015b7 Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/048015b7 Branch: refs/heads/1.9.x Commit: 048015b7d891edd74c8d458aa582a504511872c6 Parents: d100b90 Author: Stefan Bodewig <bode...@apache.org> Authored: Fri Sep 28 20:27:53 2018 +0200 Committer: Stefan Bodewig <bode...@apache.org> Committed: Fri Sep 28 20:27:53 2018 +0200 ---------------------------------------------------------------------- WHATSNEW | 3 + manual/Tasks/javadoc.html | 73 ++++++++-- .../org/apache/tools/ant/taskdefs/Javadoc.java | 142 ++++++++++++++++++- 3 files changed, 207 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant/blob/048015b7/WHATSNEW ---------------------------------------------------------------------- diff --git a/WHATSNEW b/WHATSNEW index 6cd11da..e5bfed3 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 <javadoc> that support modules. + Bugzilla Report 62424 + Changes from Ant 1.9.12 TO Ant 1.9.13 ===================================== http://git-wip-us.apache.org/repos/asf/ant/blob/048015b7/manual/Tasks/javadoc.html ---------------------------------------------------------------------- diff --git a/manual/Tasks/javadoc.html b/manual/Tasks/javadoc.html index 430435f..a32ed47 100644 --- a/manual/Tasks/javadoc.html +++ b/manual/Tasks/javadoc.html @@ -92,9 +92,9 @@ to <javadoc> using <tt>classpath</tt>, <tt>classpathref</tt> attributes or <td valign="top">sourcepath</td> <td valign="top">Specify where to find source files</td> <td align="center" valign="top">all</td> - <td align="center" rowspan="3">At least one of the three or nested - <code><sourcepath></code>, <code><fileset></code> or - <code><packageset></code></td> + <td align="center" rowspan="3">At least one of the four or nested + <code><sourcepath></code>, <code><fileset></code>. + <code>module</code> or <code><packageset></code></td> </tr> <tr> <td valign="top">sourcepathref</td> @@ -109,6 +109,12 @@ to <javadoc> using <tt>classpath</tt>, <tt>classpathref</tt> attributes or <td align="center" valign="top">all</td> </tr> <tr> + <td valign="top">modulenames</td> + <td valign="top">Comma separated list of module names -- see also + the nested <code>module</code> element. <em>since Ant 1.9.14</em></td> + <td align="center" valign="top">all</td> + </tr> + <tr> <td valign="top">destdir</td> <td valign="top">Destination directory for output files</td> <td align="center" valign="top">all</td> @@ -530,6 +536,36 @@ to <javadoc> using <tt>classpath</tt>, <tt>classpathref</tt> attributes or <td align="center" valign="top">1.4</td> <td align="center" valign="top">No</td> </tr> + <tr> + <td valign="top">modulesourcepath</td> + <td valign="top">Specify where to find module source files + <em>since Ant 1.9.14</em></td> + <td align="center" valign="top">all</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">modulesourcepathref</td> + <td valign="top">Specify where to find module source files by <a + href="../using.html#references">reference</a> to a PATH defined elsewhere. + <em>since Ant 1.9.14</em></td> + <td align="center" valign="top">all</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">modulepath</td> + <td valign="top">Specify where to find module files + <em>since Ant 1.9.14</em></td> + <td align="center" valign="top">all</td> + <td align="center" valign="top">No</td> + </tr> + <tr> + <td valign="top">modulepathref</td> + <td valign="top">Specify where to find module files by <a + href="../using.html#references">reference</a> to a PATH defined elsewhere. + <em>since Ant 1.9.14</em></td> + <td align="center" valign="top">all</td> + <td align="center" valign="top">No</td> + </tr> </table> <h4><a name="groupattribute">Format of the group attribute</a></h4> @@ -607,6 +643,24 @@ javadoc as source files.</p> <h5>Parameters</h5> Same as for <code>package</code>. +<h4>module</h4> +<p><em>since Ant 1.9.14</em></p> +<p>Same as one entry in the list given by <code>modulenames</code>.</p> + +<h5>Parameters</h5> +<table width="90%" border="1" cellpadding="2" cellspacing="0"> + <tr> + <td valign="top"><b>Attribute</b></td> + <td valign="top"><b>Description</b></td> + <td align="center" valign="top"><b>Required</b></td> + </tr> + <tr> + <td valign="top">name</td> + <td valign="top">The module name</td> + <td align="center" valign="top">Yes</td> + </tr> +</table> + <h4>source</h4> <p>Same as one entry in the list given by <code>sourcefiles</code>.</p> @@ -830,12 +884,13 @@ the javadoc program. </tr> </table> -<h4>sourcepath, classpath and bootclasspath</h4> -<p><code>Javadoc</code>'s <i>sourcepath</i>, <i>classpath</i> and -<i>bootclasspath</i> attributes are <a href="../using.html#path">PATH like -structure</a> and can also be set via nested <i>sourcepath</i>, -<i>classpath</i> and <i>bootclasspath</i> elements -respectively.</p> +<h4>sourcepath, classpath, bootclasspath, modulepath, modulesourcepath</h4> +<p><code>Javadoc</code>'s <i>sourcepath</i>, <i>classpath</i>, +<i>bootclasspath</i>, <i>modulepath</i>, and <i>modulesourcepath</i> +attributes are <a href="../using.html#path">PATH like structure</a> +and can also be set via nested <i>sourcepath</i>, +<i>classpath</i>, <i>bootclasspath</i>, <i>modulepath</i>, +and <i>modulesourcepath</i> elements respectively.</p> <h4>arg</h4> http://git-wip-us.apache.org/repos/asf/ant/blob/048015b7/src/main/org/apache/tools/ant/taskdefs/Javadoc.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index 7a5c2ec..999b103 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<SourceFile> sourceFiles = new Vector<SourceFile>(); private final Vector<PackageName> packageNames = new Vector<PackageName>(); private final Vector<PackageName> excludePackageNames = new Vector<PackageName>(1); + private final List<PackageName> moduleNames = new ArrayList<PackageName>(); 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<LinkArgument> links = new Vector<LinkArgument>(); @@ -563,6 +567,88 @@ public class Javadoc extends Task { } /** + * 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. * * @param dir the destination directory. @@ -616,6 +702,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. * * If the package name ends with ".*" the Javadoc task @@ -628,6 +731,17 @@ public class Javadoc extends Task { } /** + * 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. * * @param packages a comma separated 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<String> packagesToDoc, final Vector<SourceFile> 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);