8166144: New javadoc options don't conform to JEP 293 (GNU style options)
Reviewed-by: ksrini, bpatel
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java Fri Sep 30 13:15:22 2016 -0700
@@ -425,8 +425,7 @@
J("-J", "opt.arg.flag", "opt.J", STANDARD, INFO, ArgKind.ADJACENT) {
@Override
public boolean process(OptionHelper helper, String option) {
- throw new AssertionError
- ("the -J flag should be caught by the launcher.");
+ throw new AssertionError("the -J flag should be caught by the launcher.");
}
},
@@ -691,7 +690,7 @@
* This option takes an argument.
* If the name of option ends with ':' or '=', the argument must be provided directly
* after that separator.
- * Otherwise, if may appear after an '=' or in the following argument position.
+ * Otherwise, it may appear after an '=' or in the following argument position.
*/
REQUIRED,
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/api/JavadocTool.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/api/JavadocTool.java Fri Sep 30 13:15:22 2016 -0700
@@ -165,9 +165,11 @@
public int isSupportedOption(String option) {
if (option == null)
throw new NullPointerException();
- for (ToolOption o: ToolOption.values()) {
- if (o.opt.equals(option))
- return o.hasArg ? 1 : 0;
+ for (ToolOption o : ToolOption.values()) {
+ for (String name : o.names) {
+ if (name.equals(option))
+ return o.hasArg ? 1 : 0;
+ }
}
return -1;
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ConfigurationImpl.java Fri Sep 30 13:15:22 2016 -0700
@@ -595,8 +595,9 @@
@Override
public Set<Doclet.Option> getSupportedOptions() {
+ Resources resources = getResources();
Doclet.Option[] options = {
- new Option(this, "-bottom", 1) {
+ new Option(resources, "-bottom", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -604,7 +605,7 @@
return true;
}
},
- new Option(this, "-charset", 1) {
+ new Option(resources, "-charset", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -612,7 +613,7 @@
return true;
}
},
- new Option(this, "-doctitle", 1) {
+ new Option(resources, "-doctitle", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -620,7 +621,7 @@
return true;
}
},
- new Option(this, "-footer", 1) {
+ new Option(resources, "-footer", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -628,7 +629,7 @@
return true;
}
},
- new Option(this, "-header", 1) {
+ new Option(resources, "-header", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -636,7 +637,7 @@
return true;
}
},
- new Option(this, "-helpfile", 1) {
+ new Option(resources, "-helpfile", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -644,7 +645,7 @@
return true;
}
},
- new Option(this, "-html4") {
+ new Option(resources, "-html4") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -652,7 +653,7 @@
return true;
}
},
- new Option(this, "-html5") {
+ new Option(resources, "-html5") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -660,7 +661,7 @@
return true;
}
},
- new Option(this, "-nohelp") {
+ new Option(resources, "-nohelp") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -668,7 +669,7 @@
return true;
}
},
- new Option(this, "-nodeprecatedlist") {
+ new Option(resources, "-nodeprecatedlist") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -676,7 +677,7 @@
return true;
}
},
- new Option(this, "-noindex") {
+ new Option(resources, "-noindex") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -684,7 +685,7 @@
return true;
}
},
- new Option(this, "-nonavbar") {
+ new Option(resources, "-nonavbar") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -692,7 +693,7 @@
return true;
}
},
- new Hidden(this, "-nooverview") {
+ new Hidden(resources, "-nooverview") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -700,7 +701,7 @@
return true;
}
},
- new Option(this, "-notree") {
+ new Option(resources, "-notree") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -708,7 +709,7 @@
return true;
}
},
- new Option(this, "-overview", 1) {
+ new Option(resources, "-overview", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -716,7 +717,7 @@
return true;
}
},
- new Option(this, "--frames") {
+ new Option(resources, "--frames") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -724,7 +725,7 @@
return true;
}
},
- new Option(this, "--no-frames") {
+ new Option(resources, "--no-frames") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -732,7 +733,7 @@
return true;
}
},
- new Hidden(this, "-packagesheader", 1) {
+ new Hidden(resources, "-packagesheader", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -740,7 +741,7 @@
return true;
}
},
- new Option(this, "-splitindex") {
+ new Option(resources, "-splitindex") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -748,7 +749,7 @@
return true;
}
},
- new Option(this, "-stylesheetfile", 1) {
+ new Option(resources, "-stylesheetfile", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -756,7 +757,7 @@
return true;
}
},
- new Option(this, "-top", 1) {
+ new Option(resources, "-top", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -764,7 +765,7 @@
return true;
}
},
- new Option(this, "-use") {
+ new Option(resources, "-use") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -772,7 +773,7 @@
return true;
}
},
- new Option(this, "-windowtitle", 1) {
+ new Option(resources, "-windowtitle", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -780,7 +781,7 @@
return true;
}
},
- new XOption(this, "-Xdoclint") {
+ new XOption(resources, "-Xdoclint") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -788,7 +789,7 @@
return true;
}
},
- new XOption(this, "-Xdocrootparent", 1) {
+ new XOption(resources, "-Xdocrootparent", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -796,7 +797,7 @@
return true;
}
},
- new XOption(this, "doclet.xusage.xdoclint-extended.", "-Xdoclint:", 0) {
+ new XOption(resources, "doclet.usage.xdoclint-extended", "-Xdoclint:", 0) {
@Override
public boolean matches(String option) {
return option.toLowerCase().startsWith(getName().toLowerCase());
@@ -809,7 +810,7 @@
return true;
}
},
- new XOption(this, "doclet.xusage.xdoclint-package.", "-Xdoclint/package:", 0) {
+ new XOption(resources, "doclet.usage.xdoclint-package", "-Xdoclint/package:", 0) {
@Override
public boolean matches(String option) {
return option.toLowerCase().startsWith(getName().toLowerCase());
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties Fri Sep 30 13:15:22 2016 -0700
@@ -191,144 +191,196 @@
doclet.Same_package_name_used=Package name format used twice: {0}
# option specifiers
-doclet.usage.d.parameters=<directory>
-doclet.usage.d.description=Destination directory for output files
+doclet.usage.d.parameters=\
+ <directory>
+doclet.usage.d.description=\
+ Destination directory for output files
-doclet.usage.use.description=Create class and package usage pages
-
-doclet.usage.version.description=Include @version paragraphs
+doclet.usage.use.description=\
+ Create class and package usage pages
-doclet.usage.author.description=Include @author paragraphs
+doclet.usage.version.description=\
+ Include @version paragraphs
-doclet.usage.docfilessubdirs.description=Recursively copy doc-file subdirectories
+doclet.usage.author.description=\
+ Include @author paragraphs
-doclet.usage.splitindex.description=Split index into one file per letter
+doclet.usage.docfilessubdirs.description=\
+ Recursively copy doc-file subdirectories
-doclet.usage.overview.parameters=<file>
-doclet.usage.overview.description=Read overview documentation from HTML file
+doclet.usage.splitindex.description=\
+ Split index into one file per letter
+doclet.usage.overview.parameters=\
+ <file>
+doclet.usage.overview.description=\
+ Read overview documentation from HTML file
-doclet.usage.windowtitle.parameters=<text>
-doclet.usage.windowtitle.description=Browser window title for the documentation
-
-doclet.usage.doctitle.parameters=<html-code>
-doclet.usage.doctitle.description=Include title for the overview page
+doclet.usage.windowtitle.parameters=\
+ <text>
+doclet.usage.windowtitle.description=\
+ Browser window title for the documentation
-doclet.usage.header.parameters=<html-code>
-doclet.usage.header.description=Include header text for each page
-
-doclet.usage.html4.description=Generate HTML 4.01 output
+doclet.usage.doctitle.parameters=\
+ <html-code>
+doclet.usage.doctitle.description=\
+ Include title for the overview page
-doclet.usage.html5.description=Generate HTML 5 output
+doclet.usage.header.parameters=\
+ <html-code>
+doclet.usage.header.description=\
+ Include header text for each page
-doclet.usage.footer.parameters=<html-code>
-doclet.usage.footer.description=Include footer text for each page
+doclet.usage.html4.description=\
+ Generate HTML 4.01 output
+
+doclet.usage.html5.description=\
+ Generate HTML 5 output
-doclet.usage.top.parameters=<html-code>
-doclet.usage.top.description=Include top text for each page
+doclet.usage.footer.parameters=\
+ <html-code>
+doclet.usage.footer.description=\
+ Include footer text for each page
-doclet.usage.bottom.parameters=<html-code>
-doclet.usage.bottom.description=Include bottom text for each page
-
-doclet.usage.link.parameters=<url>
-doclet.usage.link.description=Create links to javadoc output at <url>
+doclet.usage.top.parameters=\
+ <html-code>
+doclet.usage.top.description=\
+ Include top text for each page
-doclet.usage.linkoffline.parameters=<url1> <url2>
-doclet.usage.linkoffline.description=Link to docs at <url1> using package list\n\
-\ at <url2>
+doclet.usage.bottom.parameters=\
+ <html-code>
+doclet.usage.bottom.description=\
+ Include bottom text for each page
-doclet.usage.excludedocfilessubdir.parameters=<name>:..
-doclet.usage.excludedocfilessubdir.description=\n\
-\ Exclude any doc-files subdirectories with\n\
-\ given name
+doclet.usage.link.parameters=\
+ <url>
+doclet.usage.link.description=\
+ Create links to javadoc output at <url>
-doclet.usage.group.parameters=<name> <p1>:<p2>..
-doclet.usage.group.description=Group specified packages together\n\
-\ in overview page
+doclet.usage.linkoffline.parameters=\
+ <url1> <url2>
+doclet.usage.linkoffline.description=\
+ Link to docs at <url1> using package list at <url2>
-doclet.usage.nocomment.description=Suppress description and tags, generate\n\
-\ only declarations
-
-doclet.usage.nodeprecated.description=Do not include @deprecated information
+doclet.usage.excludedocfilessubdir.parameters=\
+ <name>:..
+doclet.usage.excludedocfilessubdir.description=\
+ Exclude any doc-files subdirectories with given name
-doclet.usage.noqualifier.parameters=<name1>:<name2>:..
-doclet.usage.noqualifier.description=Exclude the list of qualifiers from the output
+doclet.usage.group.parameters=\
+ <name> <p1>:<p2>..
+doclet.usage.group.description=\
+ Group specified packages together in overview page
-doclet.usage.nosince.description=Do not include @since information
+doclet.usage.nocomment.description=\
+ Suppress description and tags, generate only declarations
-doclet.usage.notimestamp.description=Do not include hidden time stamp
+doclet.usage.nodeprecated.description=\
+ Do not include @deprecated information
-doclet.usage.nodeprecatedlist.description=Do not generate deprecated list
+doclet.usage.noqualifier.parameters=\
+ <name1>:<name2>:..
+doclet.usage.noqualifier.description=\
+ Exclude the list of qualifiers from the output
-doclet.usage.notree.description=Do not generate class hierarchy
+doclet.usage.nosince.description=\
+ Do not include @since information
-doclet.usage.noindex.description=Do not generate index
+doclet.usage.notimestamp.description=\
+ Do not include hidden time stamp
-doclet.usage.nohelp.description=Do not generate help link
+doclet.usage.nodeprecatedlist.description=\
+ Do not generate deprecated list
-doclet.usage.nonavbar.description=Do not generate navigation bar
+doclet.usage.notree.description=\
+ Do not generate class hierarchy
-doclet.usage.nooverview.description=Do not generate overview pages
+doclet.usage.noindex.description=\
+ Do not generate index
-doclet.usage.serialwarn.description=Generate warning about @serial tag
+doclet.usage.nohelp.description=\
+ Do not generate help link
+
+doclet.usage.nonavbar.description=\
+ Do not generate navigation bar
-doclet.usage.tag.parameters=<name>:<locations>:<header>
-doclet.usage.tag.description=\n\
-\ Specify single argument custom tags
+doclet.usage.nooverview.description=\
+ Do not generate overview pages
-doclet.usage.taglet.description=The fully qualified name of Taglet to register
+doclet.usage.serialwarn.description=\
+ Generate warning about @serial tag
-doclet.usage.tagletpath.description=The path to Taglets
+doclet.usage.tag.parameters=\
+ <name>:<locations>:<header>
+doclet.usage.tag.description=\
+ Specify single argument custom tags
-doclet.usage.charset.parameters=<charset>
-doclet.usage.charset.description=Charset for cross-platform viewing of\n\
-\ generated documentation
+doclet.usage.taglet.description=\
+ The fully qualified name of Taglet to register
-doclet.usage.helpfile.parameters=<file>
-doclet.usage.helpfile.description=Include file that help link links to
+doclet.usage.tagletpath.description=\
+ The path to Taglets
-doclet.usage.linksource.description=Generate source in HTML
+doclet.usage.charset.parameters=\
+ <charset>
+doclet.usage.charset.description=\
+ Charset for cross-platform viewing of generated documentation
-doclet.usage.sourcetab.parameters=<tab length>
-doclet.usage.sourcetab.description=Specify the number of spaces each tab\n\
-\ takes up in the source
+doclet.usage.helpfile.parameters=\
+ <file>
+doclet.usage.helpfile.description=\
+ Include file that help link links to
-doclet.usage.keywords.description=Include HTML meta tags with package,\n\
-\ class and member info
+doclet.usage.linksource.description=\
+ Generate source in HTML
-doclet.usage.stylesheetfile.parameters=<path>
-doclet.usage.stylesheetfile.description=File to change style of the generated\n\
-\ documentation
+doclet.usage.sourcetab.parameters=\
+ <tab length>
+doclet.usage.sourcetab.description=\
+ Specify the number of spaces each tab takes up in the source
-doclet.usage.docencoding.parameters=<name>
-doclet.usage.docencoding.description=Specify the character encoding for the output
-
-doclet.usage.frames.description=Enable the use of frames in the generated output (default)
+doclet.usage.keywords.description=\
+ Include HTML meta tags with package, class and member info
-doclet.usage.no-frames.description=Disable the use of frames in the generated output
+doclet.usage.stylesheetfile.parameters=\
+ <path>
+doclet.usage.stylesheetfile.description=\
+ File to change style of the generated documentation
-doclet.xusage.xdocrootparent.parameters=<url>
-doclet.xusage.xdocrootparent.description=Replaces all @docRoot followed by /..\n\
-\ in doc comments with <url>
+doclet.usage.docencoding.parameters=\
+ <name>
+doclet.usage.docencoding.description=\
+ Specify the character encoding for the output
-doclet.xusage.xdoclint.description=Enable recommended checks for problems in\n\
-\ javadoc comments
+doclet.usage.frames.description=\
+ Enable the use of frames in the generated output (default)
+
+doclet.usage.no-frames.description=\
+ Disable the use of frames in the generated output
-doclet.xusage.xdoclint-extended.parameters=(all|none|[-]<group>)
-# L10N: do not localize these words: all none accessibility html missing reference syntax
-doclet.xusage.xdoclint-extended.description=Enable or disable specific checks\n\
-\ for problems in javadoc comments, where \n\
-\ <group> is one of accessibility, html,\n\
-\ missing, reference, or syntax.\n
+doclet.usage.xdocrootparent.parameters=\
+ <url>
+doclet.usage.xdocrootparent.description=\
+ Replaces all @docRoot followed by /.. in doc comments with\n\
+ <url>
+
+doclet.usage.xdoclint.description=\
+ Enable recommended checks for problems in javadoc comments
-doclet.xusage.xdoclint-package.parameters=([-]<packages>)
-doclet.xusage.xdoclint-package.description=\n\
-\ Enable or disable checks in specific\n\
-\ packages. <packages> is a comma separated\n\
-\ list of package specifiers. Package\n\
-\ specifier is either a qualified name of a\n\
-\ package or a package name prefix followed\n\
-\ by .*, which expands to all sub-packages\n\
-\ of the given package. Prefix the package\n\
-\ specifier with - to disable checks for\n\
-\ the specified packages.\n
+doclet.usage.xdoclint-extended.parameters=\
+ (all|none|[-]<group>)
+# L10N: do not localize these words: all none accessibility html missing reference syntax
+doclet.usage.xdoclint-extended.description=\
+ Enable or disable specific checks for problems in javadoc\n\
+ comments, where <group> is one of accessibility, html,\n\
+ missing, reference, or syntax.
+
+doclet.usage.xdoclint-package.parameters=\
+ ([-]<packages>)
+doclet.usage.xdoclint-package.description=\
+ Enable or disable checks in specific packages. <packages> is a\n\
+ comma separated list of package specifiers. A package\n\
+ specifier is either a qualified name of a package or a package\n\
+ name prefix followed by .*, which expands to all sub-packages\n\
+ of the given package. Prefix the package specifier with - to\n\
+ disable checks for the specified packages.
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Configuration.java Fri Sep 30 13:15:22 2016 -0700
@@ -404,8 +404,9 @@
}
public Set<Doclet.Option> getSupportedOptions() {
+ Resources resources = getResources();
Doclet.Option[] options = {
- new Option(this, "-author") {
+ new Option(resources, "-author") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -413,7 +414,7 @@
return true;
}
},
- new Option(this, "-d", 1) {
+ new Option(resources, "-d", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -421,7 +422,7 @@
return true;
}
},
- new Option(this, "-docencoding", 1) {
+ new Option(resources, "-docencoding", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -429,7 +430,7 @@
return true;
}
},
- new Option(this, "-docfilessubdirs") {
+ new Option(resources, "-docfilessubdirs") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -437,7 +438,7 @@
return true;
}
},
- new Hidden(this, "-encoding", 1) {
+ new Hidden(resources, "-encoding", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -445,7 +446,7 @@
return true;
}
},
- new Option(this, "-excludedocfilessubdir", 1) {
+ new Option(resources, "-excludedocfilessubdir", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -453,7 +454,7 @@
return true;
}
},
- new Option(this, "-group", 2) {
+ new Option(resources, "-group", 2) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -461,7 +462,7 @@
return true;
}
},
- new Hidden(this, "-javafx") {
+ new Hidden(resources, "-javafx") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -469,7 +470,7 @@
return true;
}
},
- new Option(this, "-keywords") {
+ new Option(resources, "-keywords") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -477,7 +478,7 @@
return true;
}
},
- new Option(this, "-link", 1) {
+ new Option(resources, "-link", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -486,7 +487,7 @@
return true;
}
},
- new Option(this, "-linksource") {
+ new Option(resources, "-linksource") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -494,7 +495,7 @@
return true;
}
},
- new Option(this, "-linkoffline", 2) {
+ new Option(resources, "-linkoffline", 2) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -503,7 +504,7 @@
return true;
}
},
- new Option(this, "-nocomment") {
+ new Option(resources, "-nocomment") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -511,7 +512,7 @@
return true;
}
},
- new Option(this, "-nodeprecated") {
+ new Option(resources, "-nodeprecated") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -519,7 +520,7 @@
return true;
}
},
- new Option(this, "-nosince") {
+ new Option(resources, "-nosince") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -527,7 +528,7 @@
return true;
}
},
- new Option(this, "-notimestamp") {
+ new Option(resources, "-notimestamp") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -535,7 +536,7 @@
return true;
}
},
- new Option(this, "-noqualifier", 1) {
+ new Option(resources, "-noqualifier", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -543,7 +544,7 @@
return true;
}
},
- new Hidden(this, "-quiet") {
+ new Hidden(resources, "-quiet") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -551,7 +552,7 @@
return true;
}
},
- new Option(this, "-serialwarn") {
+ new Option(resources, "-serialwarn") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -559,7 +560,7 @@
return true;
}
},
- new Option(this, "-sourcetab", 1) {
+ new Option(resources, "-sourcetab", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -578,7 +579,7 @@
return true;
}
},
- new Option(this, "-tag", 1) {
+ new Option(resources, "-tag", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -589,7 +590,7 @@
return true;
}
},
- new Option(this, "-taglet", 1) {
+ new Option(resources, "-taglet", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -600,7 +601,7 @@
return true;
}
},
- new Option(this, "-tagletpath", 1) {
+ new Option(resources, "-tagletpath", 1) {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -608,7 +609,7 @@
return true;
}
},
- new Option(this, "-version") {
+ new Option(resources, "-version") {
@Override
public boolean process(String opt, ListIterator<String> args) {
optionsProcessed.add(this);
@@ -1057,37 +1058,30 @@
private final String description;
private final int argCount;
- protected final Configuration c;
+ protected Option(Resources resources, String name, int argCount) {
+ this(resources, "doclet.usage." + name.toLowerCase().replaceAll("^-*", ""), name, argCount);
+ }
- protected Option(Configuration config, String keyName, String name, int argCount) {
- c = config;
+ protected Option(Resources resources, String keyBase, String name, int argCount) {
this.name = name;
- String desc = getOptionsMessage(keyName + "description");
+ String desc = getOptionsMessage(resources, keyBase + ".description");
if (desc.isEmpty()) {
this.description = "<MISSING KEY>";
this.parameters = "<MISSING KEY>";
} else {
this.description = desc;
- this.parameters = getOptionsMessage(keyName + "parameters");
+ this.parameters = getOptionsMessage(resources, keyBase + ".parameters");
}
this.argCount = argCount;
}
- protected Option(String prefix, Configuration config, String name, int argCount) {
- this(config, prefix + name.toLowerCase().replaceAll("^-*", "") + ".", name, argCount);
- }
-
- protected Option(Configuration config, String name, int argCount) {
- this("doclet.usage.", config, name, argCount);
+ protected Option(Resources resources, String name) {
+ this(resources, name, 0);
}
- protected Option(Configuration config, String name) {
- this(config, name, 0);
- }
-
- private String getOptionsMessage(String key) {
+ private String getOptionsMessage(Resources resources, String key) {
try {
- return c.getResources().getText(key);
+ return resources.getText(key);
} catch (MissingResourceException ignore) {
return "";
}
@@ -1113,19 +1107,9 @@
return parameters;
}
- /**
- * Maintains the formatting for javadoc -help. Note the space
- * alignment.
- */
@Override
public String toString() {
- String opt = name + (name.endsWith(":") ? "" : " ") + parameters;
- StringBuffer sb = new StringBuffer(" ").append(opt).append(" ");
- for (int i = opt.length(); i < 32; i++) {
- sb.append(" ");
- }
- sb.append(description);
- return sb.toString();
+ return name;
}
@Override
@@ -1135,7 +1119,14 @@
@Override
public boolean matches(String option) {
- return name.toLowerCase().equals(option.toLowerCase());
+ boolean matchCase = name.startsWith("--");
+ if (option.startsWith("--") && option.contains("=")) {
+ return name.equals(option.substring(option.indexOf("=") + 1));
+ } else if (matchCase) {
+ return name.equals(option);
+ } else {
+ return name.toLowerCase().equals(option.toLowerCase());
+ }
}
@Override
@@ -1146,16 +1137,16 @@
public abstract class XOption extends Option {
- public XOption(Configuration config, String keyname, String name, int argCount) {
- super(config, keyname, name, argCount);
+ public XOption(Resources resources, String prefix, String name, int argCount) {
+ super(resources, prefix, name, argCount);
}
- public XOption(Configuration config, String name, int argCount) {
- super("doclet.xusage.", config, name, argCount);
+ public XOption(Resources resources, String name, int argCount) {
+ super(resources, name, argCount);
}
- public XOption(Configuration config, String name) {
- this(config, name, 0);
+ public XOption(Resources resources, String name) {
+ this(resources, name, 0);
}
@Override
@@ -1166,12 +1157,12 @@
public abstract class Hidden extends Option {
- public Hidden(Configuration config, String name, int argCount) {
- super("doclet.xusage.", config, name, argCount);
+ public Hidden(Resources resources, String name, int argCount) {
+ super(resources, name, argCount);
}
- public Hidden(Configuration config, String name) {
- this(config, name, 0);
+ public Hidden(Resources resources, String name) {
+ this(resources, name, 0);
}
@Override
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Messager.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Messager.java Fri Sep 30 13:15:22 2016 -0700
@@ -255,7 +255,7 @@
private void incrementErrorCount(String prefix, String msg) {
if (nerrors < MaxErrors) {
PrintWriter errWriter = getWriter(WriterKind.ERROR);
- errWriter.println(prefix + ": " + getText("javadoc.error") + " - " + msg);
+ printRawLines(errWriter, prefix + ": " + getText("javadoc.error") + " - " + msg);
errWriter.flush();
prompt();
nerrors++;
@@ -293,7 +293,7 @@
private void incrementWarningCount(String prefix, String msg) {
if (nwarnings < MaxWarnings) {
PrintWriter warnWriter = getWriter(WriterKind.WARNING);
- warnWriter.println(prefix + ": " + getText("javadoc.warning") + " - " + msg);
+ printRawLines(warnWriter, prefix + ": " + getText("javadoc.warning") + " - " + msg);
warnWriter.flush();
nwarnings++;
}
@@ -318,9 +318,9 @@
PrintWriter noticeWriter = getWriter(WriterKind.NOTICE);
if (path == null) {
- noticeWriter.println(msg);
+ printRawLines(noticeWriter, msg);
} else {
- noticeWriter.println(prefix + ": " + msg);
+ printRawLines(noticeWriter, prefix + ": " + msg);
}
noticeWriter.flush();
}
@@ -334,9 +334,9 @@
PrintWriter noticeWriter = getWriter(WriterKind.NOTICE);
if (e == null) {
- noticeWriter.println(msg);
+ printRawLines(noticeWriter, msg);
} else {
- noticeWriter.println(pos + ": " + msg);
+ printRawLines(noticeWriter, pos + ": " + msg);
}
noticeWriter.flush();
}
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/Start.java Fri Sep 30 13:15:22 2016 -0700
@@ -31,14 +31,18 @@
import java.io.PrintWriter;
import java.nio.file.Path;
import java.text.BreakIterator;
+import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
@@ -61,6 +65,7 @@
import jdk.javadoc.doclet.Doclet;
import jdk.javadoc.doclet.Doclet.Option;
import jdk.javadoc.doclet.DocletEnvironment;
+import jdk.javadoc.internal.doclets.toolkit.Resources;
import static javax.tools.DocumentationTool.Location.*;
@@ -168,7 +173,10 @@
}
void usage(boolean exit) {
- usage("main.usage", "-help", "main.usage.foot", exit);
+ usage("main.usage", "-help", "main.usage.foot");
+
+ if (exit)
+ throw new Messager.ExitJavadoc();
}
@Override
@@ -177,30 +185,128 @@
}
void Xusage(boolean exit) {
- usage("main.Xusage", "-X", "main.Xusage.foot", exit);
- }
-
- private void usage(String main, String option, String foot, boolean exit) {
- messager.notice(main);
- // let doclet print usage information (does nothing on error)
- if (docletClass != null) {
- String name = doclet.getName();
- Set<Option> supportedOptions = doclet.getSupportedOptions();
- messager.notice("main.doclet.usage.header", name);
- Option.Kind myKind = option.equals("-X")
- ? Option.Kind.EXTENDED
- : Option.Kind.STANDARD;
- supportedOptions.stream()
- .filter(opt -> opt.getKind() == myKind)
- .forEach(opt -> messager.printNotice(opt.toString()));
- }
- if (foot != null)
- messager.notice(foot);
+ usage("main.Xusage", "-X", "main.Xusage.foot");
if (exit)
throw new Messager.ExitJavadoc();
}
+ private void usage(String header, String option, String footer) {
+ messager.notice(header);
+ showToolOptions(option.equals("-X") ? OptionKind.EXTENDED : OptionKind.STANDARD);
+
+ // let doclet print usage information
+ if (docletClass != null) {
+ String name = doclet.getName();
+ messager.notice("main.doclet.usage.header", name);
+ showDocletOptions(option.equals("-X") ? Option.Kind.EXTENDED : Option.Kind.STANDARD);
+ }
+
+ if (footer != null)
+ messager.notice(footer);
+ }
+
+ void showToolOptions(OptionKind kind) {
+ Comparator<ToolOption> comp = new Comparator<ToolOption>() {
+ final Collator collator = Collator.getInstance(Locale.US);
+ { collator.setStrength(Collator.PRIMARY); }
+
+ @Override
+ public int compare(ToolOption o1, ToolOption o2) {
+ return collator.compare(o1.primaryName, o2.primaryName);
+ }
+ };
+
+ Stream.of(ToolOption.values())
+ .filter(opt -> opt.kind == kind)
+ .sorted(comp)
+ .forEach(opt -> showToolOption(opt));
+ }
+
+ void showToolOption(ToolOption option) {
+ List<String> names = option.getNames();
+ String parameters;
+ if (option.hasArg || option.primaryName.endsWith(":")) {
+ String sep = (option == ToolOption.J) || option.primaryName.endsWith(":") ? "" : " ";
+ parameters = sep + option.getParameters(messager);
+ } else {
+ parameters = "";
+ }
+ String description = option.getDescription(messager);
+ showUsage(names, parameters, description);
+ }
+
+ void showDocletOptions(Option.Kind kind) {
+ Comparator<Doclet.Option> comp = new Comparator<Doclet.Option>() {
+ final Collator collator = Collator.getInstance(Locale.US);
+ { collator.setStrength(Collator.PRIMARY); }
+
+ @Override
+ public int compare(Doclet.Option o1, Doclet.Option o2) {
+ return collator.compare(o1.getName(), o2.getName());
+ }
+ };
+
+ doclet.getSupportedOptions().stream()
+ .filter(opt -> opt.getKind() == kind)
+ .sorted(comp)
+ .forEach(opt -> showDocletOption(opt));
+ }
+
+ void showDocletOption(Doclet.Option option) {
+ List<String> names = Arrays.asList(option.getName());
+ String parameters;
+ if (option.getArgumentCount() > 0 || option.getName().endsWith(":")) {
+ String sep = option.getName().endsWith(":") ? "" : " ";
+ parameters = sep + option.getParameters();
+ } else {
+ parameters = "";
+ }
+ String description = option.getDescription();
+ showUsage(names, parameters, description);
+ }
+
+ // The following constants are intended to format the output to
+ // be similar to that of the java launcher: i.e. "java -help".
+
+ /** The indent for the option synopsis. */
+ private static final String SMALL_INDENT = " ";
+ /** The automatic indent for the description. */
+ private static final String LARGE_INDENT = " ";
+ /** The space allowed for the synopsis, if the description is to be shown on the same line. */
+ private static final int DEFAULT_SYNOPSIS_WIDTH = 13;
+ /** The nominal maximum line length, when seeing if text will fit on a line. */
+ private static final int DEFAULT_MAX_LINE_LENGTH = 80;
+ /** The format for a single-line help entry. */
+ private static final String COMPACT_FORMAT = SMALL_INDENT + "%-" + DEFAULT_SYNOPSIS_WIDTH + "s %s";
+
+ void showUsage(List<String> names, String parameters, String description) {
+ String synopses = names.stream()
+ .map(s -> s + parameters)
+ .collect(Collectors.joining(", "));
+ // If option synopses and description fit on a single line of reasonable length,
+ // display using COMPACT_FORMAT
+ if (synopses.length() < DEFAULT_SYNOPSIS_WIDTH
+ && !description.contains("\n")
+ && (SMALL_INDENT.length() + DEFAULT_SYNOPSIS_WIDTH + 1 + description.length() <= DEFAULT_MAX_LINE_LENGTH)) {
+ messager.printNotice(String.format(COMPACT_FORMAT, synopses, description));
+ return;
+ }
+
+ // If option synopses fit on a single line of reasonable length, show that;
+ // otherwise, show 1 per line
+ if (synopses.length() <= DEFAULT_MAX_LINE_LENGTH) {
+ messager.printNotice(SMALL_INDENT + synopses);
+ } else {
+ for (String name: names) {
+ messager.printNotice(SMALL_INDENT + name + parameters);
+ }
+ }
+
+ // Finally, show the description
+ messager.printNotice(LARGE_INDENT + description.replace("\n", "\n" + LARGE_INDENT));
+ }
+
/**
* Main program - external wrapper. In order to maintain backward
@@ -433,14 +539,37 @@
docletOptions = doclet.getSupportedOptions();
}
String arg = args.get(idx);
+ String argBase, argVal;
+ if (arg.startsWith("--") && arg.contains("=")) {
+ int sep = arg.indexOf("=");
+ argBase = arg.substring(0, sep);
+ argVal = arg.substring(sep + 1);
+ } else {
+ argBase = arg;
+ argVal = null;
+ }
for (Doclet.Option opt : docletOptions) {
- if (opt.matches(arg)) {
- if (args.size() - idx < opt.getArgumentCount()) {
- usageError("main.requires_argument", arg);
+ if (opt.matches(argBase)) {
+ if (argVal != null) {
+ switch (opt.getArgumentCount()) {
+ case 0:
+ usageError("main.unnecessary_arg_provided", argBase);
+ break;
+ case 1:
+ opt.process(arg, Arrays.asList(argVal).listIterator());
+ break;
+ default:
+ usageError("main.only_one_argument_with_equals", argBase);
+ break;
+ }
+ } else {
+ if (args.size() - idx -1 < opt.getArgumentCount()) {
+ usageError("main.requires_argument", arg);
+ }
+ opt.process(arg, args.listIterator(idx + 1));
+ idx += opt.getArgumentCount();
}
- opt.process(arg, args.listIterator(idx + 1));
- idx += opt.getArgumentCount();
return idx;
}
}
@@ -463,11 +592,11 @@
// Step 1: loop through the args, set locale early on, if found.
for (int i = 0 ; i < argv.size() ; i++) {
String arg = argv.get(i);
- if (arg.equals(ToolOption.LOCALE.opt)) {
+ if (arg.equals(ToolOption.LOCALE.primaryName)) {
checkOneArg(argv, i++);
String lname = argv.get(i);
locale = getLocale(lname);
- } else if (arg.equals(ToolOption.DOCLET.opt)) {
+ } else if (arg.equals(ToolOption.DOCLET.primaryName)) {
checkOneArg(argv, i++);
if (userDocletName != null) {
usageError("main.more_than_one_doclet_specified_0_and_1",
@@ -478,7 +607,7 @@
docletName, argv.get(i));
}
userDocletName = argv.get(i);
- } else if (arg.equals(ToolOption.DOCLETPATH.opt)) {
+ } else if (arg.equals(ToolOption.DOCLETPATH.primaryName)) {
checkOneArg(argv, i++);
if (userDocletPath == null) {
userDocletPath = argv.get(i);
@@ -599,8 +728,12 @@
handleDocletOptions(i, args, true);
if (o.hasArg) {
- checkOneArg(args, i++);
- o.process(this, args.get(i));
+ if (arg.startsWith("--") && arg.contains("=")) {
+ o.process(this, arg.substring(arg.indexOf('=') + 1));
+ } else {
+ checkOneArg(args, i++);
+ o.process(this, args.get(i));
+ }
} else if (o.hasSuffix) {
o.process(this, arg);
} else {
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolOption.java Fri Sep 30 13:15:22 2016 -0700
@@ -35,9 +35,12 @@
import javax.lang.model.element.ElementKind;
import com.sun.tools.javac.main.Option;
+import com.sun.tools.javac.main.Option.OptionKind;
import com.sun.tools.javac.main.OptionHelper;
import com.sun.tools.javac.util.Options;
+import static com.sun.tools.javac.main.Option.OptionKind.*;
+
/**
* javadoc tool options.
*
@@ -50,197 +53,169 @@
// ----- options for underlying compiler -----
- BOOTCLASSPATH("-bootclasspath", true) {
+ BOOTCLASSPATH("-bootclasspath", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
}
},
- CLASSPATH("-classpath", true) {
+ CLASS_PATH("--class-path -classpath -cp", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.CLASS_PATH, arg);
}
},
- CP("-cp", true) {
- @Override
- public void process(Helper helper, String arg) {
- helper.setFileManagerOpt(Option.CLASS_PATH, arg);
- }
- },
-
- CLASS_PATH("--class-path", true) {
- @Override
- public void process(Helper helper, String arg) {
- helper.setFileManagerOpt(Option.CLASS_PATH, arg);
- }
- },
-
- EXTDIRS("-extdirs", true) {
+ EXTDIRS("-extdirs", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.EXTDIRS, arg);
}
},
- SOURCEPATH("-sourcepath", true) {
+ SOURCE_PATH("--source-path -sourcepath", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
}
},
- SOURCE_PATH("--source-path", true) {
- @Override
- public void process(Helper helper, String arg) {
- helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
- }
- },
-
- SYSCLASSPATH("-sysclasspath", true) {
+ SYSCLASSPATH("-sysclasspath", HIDDEN, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
}
},
- MODULE_SOURCE_PATH("--module-source-path", true) {
+ MODULE_SOURCE_PATH("--module-source-path", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
}
},
- UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
+ UPGRADE_MODULE_PATH("--upgrade-module-path", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
}
},
- SYSTEM("--system", true) {
+ SYSTEM("--system", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.SYSTEM, arg);
}
},
- MODULE_PATH("--module-path", true) {
- @Override
- public void process(Helper helper, String arg) {
- helper.setFileManagerOpt(Option.MODULE_PATH, arg);
- }
- },
-
- P("-p", true) {
+ MODULE_PATH("--module-path -p", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.MODULE_PATH, arg);
}
},
- ADD_MODULES("--add-modules", true) {
+ ADD_MODULES("--add-modules", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
+ Option.ADD_MODULES.process(helper.getOptionHelper(), primaryName, arg);
}
},
- LIMIT_MODULES("--limit-modules", true) {
+ LIMIT_MODULES("--limit-modules", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
+ Option.LIMIT_MODULES.process(helper.getOptionHelper(), primaryName, arg);
}
},
- MODULE("--module", true) {
+ MODULE("--module", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.addToList(this, ",", arg);
}
},
- ENCODING("-encoding", true) {
+ ENCODING("-encoding", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFileManagerOpt(Option.ENCODING, arg);
}
},
- RELEASE("--release", true) {
+ RELEASE("--release", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- Option.RELEASE.process(helper.getOptionHelper(), opt, arg);
+ Option.RELEASE.process(helper.getOptionHelper(), primaryName, arg);
}
},
- SOURCE("-source", true) {
+ SOURCE("-source", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- Option.SOURCE.process(helper.getOptionHelper(), opt, arg);
+ Option.SOURCE.process(helper.getOptionHelper(), primaryName, arg);
}
},
- XMAXERRS("-Xmaxerrs", true) {
+ XMAXERRS("-Xmaxerrs", EXTENDED, true) {
@Override
public void process(Helper helper, String arg) {
- Option.XMAXERRS.process(helper.getOptionHelper(), opt, arg);
+ Option.XMAXERRS.process(helper.getOptionHelper(), primaryName, arg);
}
},
- XMAXWARNS("-Xmaxwarns", true) {
+ XMAXWARNS("-Xmaxwarns", EXTENDED, true) {
@Override
public void process(Helper helper, String arg) {
- Option.XMAXWARNS.process(helper.getOptionHelper(), opt, arg);
+ Option.XMAXWARNS.process(helper.getOptionHelper(), primaryName, arg);
}
},
- ADD_READS("--add-reads", true) {
+ ADD_READS("--add-reads", EXTENDED, true) {
@Override
public void process(Helper helper, String arg) {
- Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
+ Option.ADD_READS.process(helper.getOptionHelper(), primaryName, arg);
}
},
- ADD_EXPORTS("--add-exports", true) {
+ ADD_EXPORTS("--add-exports", EXTENDED, true) {
@Override
public void process(Helper helper, String arg) {
- Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
+ Option.ADD_EXPORTS.process(helper.getOptionHelper(), primaryName, arg);
}
},
- XMODULE("-Xmodule:", false) {
+ XMODULE("-Xmodule:", EXTENDED, false) {
@Override
public void process(Helper helper, String arg) {
Option.XMODULE.process(helper.getOptionHelper(), arg);
}
},
- PATCH_MODULE("--patch-module", true) {
+ PATCH_MODULE("--patch-module", EXTENDED, true) {
@Override
public void process(Helper helper, String arg) {
- Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
+ Option.PATCH_MODULE.process(helper.getOptionHelper(), primaryName, arg);
}
},
// ----- doclet options -----
- DOCLET("-doclet", true), // handled in setDocletInvoker
+ DOCLET("-doclet", STANDARD, true), // handled in setDocletInvoker
- DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
+ DOCLETPATH("-docletpath", STANDARD, true), // handled in setDocletInvoker
// ----- selection options -----
- SUBPACKAGES("-subpackages", true) {
+ SUBPACKAGES("-subpackages", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.addToList(this, ":", arg);
}
},
- EXCLUDE("-exclude", true) {
+ EXCLUDE("-exclude", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.addToList(this, ":", arg);
@@ -249,72 +224,72 @@
// ----- filtering options -----
- PACKAGE("-package") {
+ PACKAGE("-package", STANDARD) {
@Override
public void process(Helper helper) {
helper.setSimpleFilter("package");
}
},
- PRIVATE("-private") {
+ PRIVATE("-private", STANDARD) {
@Override
public void process(Helper helper) {
helper.setSimpleFilter("private");
}
},
- PROTECTED("-protected") {
+ PROTECTED("-protected", STANDARD) {
@Override
public void process(Helper helper) {
helper.setSimpleFilter("protected");
}
},
- PUBLIC("-public") {
+ PUBLIC("-public", STANDARD) {
@Override
public void process(Helper helper) {
helper.setSimpleFilter("public");
}
},
- SHOW_MEMBERS("--show-members:") {
+ SHOW_MEMBERS("--show-members", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFilter(this, arg);
}
},
- SHOW_TYPES("--show-types:") {
+ SHOW_TYPES("--show-types", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.setFilter(this, arg);
}
},
- SHOW_PACKAGES("--show-packages:") {
+ SHOW_PACKAGES("--show-packages", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- helper.setShowPackageAccess(SHOW_PACKAGES, helper.getOptionArgumentValue(arg));
+ helper.setShowPackageAccess(SHOW_PACKAGES, arg);
}
},
- SHOW_MODULE_CONTENTS("--show-module-contents:") {
+ SHOW_MODULE_CONTENTS("--show-module-contents", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- helper.setShowModuleContents(SHOW_MODULE_CONTENTS, helper.getOptionArgumentValue(arg));
+ helper.setShowModuleContents(SHOW_MODULE_CONTENTS, arg);
}
},
- EXPAND_REQUIRES("--expand-requires:") {
+ EXPAND_REQUIRES("--expand-requires", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
- helper.setExpandRequires(EXPAND_REQUIRES, helper.getOptionArgumentValue(arg));
+ helper.setExpandRequires(EXPAND_REQUIRES, arg);
}
},
// ----- output control options -----
- PROMPT("-prompt") {
+ PROMPT("-prompt", HIDDEN) {
@Override
public void process(Helper helper) {
helper.compOpts.put("-prompt", "-prompt");
@@ -322,21 +297,21 @@
}
},
- QUIET("-quiet") {
+ QUIET("-quiet", STANDARD) {
@Override
public void process(Helper helper) {
helper.jdtoolOpts.put(QUIET, true);
}
},
- VERBOSE("-verbose") {
+ VERBOSE("-verbose", STANDARD) {
@Override
public void process(Helper helper) {
helper.compOpts.put("-verbose", "");
}
},
- XWERROR("-Xwerror") {
+ XWERROR("-Xwerror", HIDDEN) {
@Override
public void process(Helper helper) {
helper.rejectWarnings = true;
@@ -346,21 +321,21 @@
// ----- other options -----
- BREAKITERATOR("-breakiterator") {
+ BREAKITERATOR("-breakiterator", STANDARD) {
@Override
public void process(Helper helper) {
helper.breakiterator = true;
}
},
- LOCALE("-locale", true) {
+ LOCALE("-locale", STANDARD, true) {
@Override
public void process(Helper helper, String arg) {
helper.docLocale = arg;
}
},
- XCLASSES("-Xclasses") {
+ XCLASSES("-Xclasses", HIDDEN) {
@Override
public void process(Helper helper) {
helper.jdtoolOpts.put(XCLASSES, true);
@@ -369,32 +344,54 @@
// ----- help options -----
- HELP("-help") {
+ HELP("--help -help", STANDARD) {
@Override
public void process(Helper helper) {
helper.usage();
}
},
- X("-X") {
+ X("-X", STANDARD) {
@Override
public void process(Helper helper) {
helper.Xusage();
}
+ },
+
+ // This option exists only for the purpose of documenting itself.
+ // It's actually implemented by the launcher.
+ J("-J", STANDARD, true) {
+ @Override
+ public void process(Helper helper) {
+ throw new AssertionError("the -J flag should be caught by the launcher.");
+ }
+ },
+
+ // This option exists only for the purpose of documenting itself.
+ // It's actually implemented ahead of the normal option decoding loop.
+ Xold("-Xold", EXTENDED) {
+ @Override
+ public void process(Helper helper) {
+ throw new AssertionError("the -Xold flag should be handled earlier.");
+ }
};
- public final String opt;
+ public final String primaryName;
+ public final List<String> names;
+ public final OptionKind kind;
public final boolean hasArg;
public final boolean hasSuffix; // ex: foo:bar or -foo=bar
- ToolOption(String opt) {
- this(opt, false);
+ ToolOption(String opt, OptionKind kind) {
+ this(opt, kind, false);
}
- ToolOption(String opt, boolean hasArg) {
- this.opt = opt;
+ ToolOption(String names, OptionKind kind, boolean hasArg) {
+ this.names = Arrays.asList(names.split("\\s+"));
+ this.primaryName = this.names.get(0);
+ this.kind = kind;
this.hasArg = hasArg;
- char lastChar = opt.charAt(opt.length() - 1);
+ char lastChar = names.charAt(names.length() - 1);
this.hasSuffix = lastChar == ':' || lastChar == '=';
}
@@ -402,16 +399,42 @@
void process(Helper helper) { }
+ List<String> getNames() {
+ return names;
+ }
+
+ String getParameters(Messager messager) {
+ return (hasArg || primaryName.endsWith(":"))
+ ? messager.getText(getKey(primaryName, ".arg"))
+ : null;
+ }
+
+ String getDescription(Messager messager) {
+ return messager.getText(getKey(primaryName, ".desc"));
+ }
+
+ private String getKey(String optionName, String suffix) {
+ return "main.opt."
+ + optionName
+ .replaceAll("^-*", "") // remove leading '-'
+ .replaceAll("[^A-Za-z0-9]+$", "") // remove trailing non-alphanumeric
+ .replaceAll("[^A-Za-z0-9]", ".") // replace internal non-alphanumeric
+ + suffix;
+ }
+
+
static ToolOption get(String name) {
String oname = name;
if (name.contains(":")) {
oname = name.substring(0, name.indexOf(':') + 1);
} else if (name.contains("=")) {
- oname = name.substring(0, name.indexOf('=') + 1);
+ oname = name.substring(0, name.indexOf('='));
}
for (ToolOption o : values()) {
- if (oname.equals(o.opt)) {
- return o;
+ for (String n : o.names) {
+ if (oname.equals(n)) {
+ return o;
+ }
}
}
return null;
@@ -457,11 +480,6 @@
jdtoolOpts.put(opt, list);
}
- String getOptionArgumentValue(String in) {
- String[] values = in.trim().split(":");
- return values[1];
- }
-
void setExpandRequires(ToolOption opt, String arg) {
switch (arg) {
case "public":
--- a/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/resources/javadoc.properties Fri Sep 30 13:15:22 2016 -0700
@@ -28,112 +28,234 @@
main.warnings={0} warnings
main.warning={0} warning
-main.usage=Usage: javadoc [options] [packagenames] [sourcefiles] [@files]\n\
-\ -overview <file> Read overview documentation from HTML file\n\
-\ -public Show only public classes and members\n\
-\ -protected Show protected/public classes and \n\
-\ members (default)\n\
-\ -package Show package/protected/public classes\n\
-\ and members\n\
-\ -private Show all classes and members\n\
-\ --show-members:value Specifies which members (fields, methods\n\
-\ etc.) will be documented, where value can\n\
-\ be one of "public", "protected", "package"\n\
-\ or "private".\n\
-\ Default is protected, will show public and\n\
-\ protected members, "public" will show only\n\
-\ public members, "package" will show public,\n\
-\ protected and package members and \n\
-\ "private" will show all members\n\
-\ --show-types:value Specifies which types (classes, interfaces\n\
-\ etc.) will be documented, where value can be\n\
-\ one of "public", "protected", "package" or\n\
-\ "private".\n\
-\ Default is "protected", show public and\n\
-\ protected types, "package" will show public,\n\
-\ protected and package types and "private"\n\
-\ will show all types\n\
-\ --show-packages:value Specifies which module's packages will be\n\
-\ documented. Possible values are "exported"\n\
-\ or "all" packages\n\
-\ --show-module-contents:value Specifies the documentation granularity of\n\
-\ module declarations.\n\
-\ Possible values are "api" or "all".\n\
-\ --expand-requires:value Instructs the tool to expand the "requires"\n\
-\ module dependencies "public" expands all the\n\
-\ "requires public" edges of the module graph.\n\
-\ "all" expands all the "requires" edges of\n\
-\ the module graph by default only the\n\
-\ specified modules will be considered.\n\
-\ -help Display command line options and exit\n\
-\ --module m1, m2.. Document the specified module(s)\n\
-\ -doclet <class> Generate output via alternate doclet\n\
-\ -docletpath <path> Specify where to find doclet class files\n\
-\ --module-source-path <path> Specify where to find input source files\n\
-\ for multiple modules\n\
-\ --upgrade-module-path <path> Override location of upgradeable modules\n\
-\ --module-path <path>, -p <path> Specify where to find application modules\n\
-\ --add-modules <module>(,<module>)*\n\
-\ Root modules to resolve in addition to the\n\
-\ initial modules,\n\
-\ or all modules on the module path if\n\
-\ <module> is ALL-MODULE-PATH.\n\
-\ --limit-modules <module>(,<module>)*\n\
-\ Limit the universe of observable modules\n\
-\ --source-path <path> Specify where to find source files\n\
-\ -sourcepath <path> Specify where to find source files\n\
-\ --class-path <path> Specify where to find user class files\n\
-\ -classpath <path> Specify where to find user class files\n\
-\ -cp <path> Specify where to find user class files\n\
-\ -exclude <pkglist> Specify a list of packages to exclude\n\
-\ -subpackages <subpkglist> Specify subpackages to recursively load\n\
-\ -breakiterator Compute first sentence with BreakIterator\n\
-\ -bootclasspath <path> Override location of platform class files\n\
-\ used for non-modular releases\n\
-\ --system <jdk> Override location of system modules used\n\
-\ for modular releases.\n\
-\ --release <release> Provide source compatibility with\n\
-\ specified release\n\
-\ -source <release> Provide source compatibility with\n\
-\ specified release\n\
-\ -extdirs <dirlist> Override location of installed extensions\n\
-\ -verbose Output messages about what Javadoc is doing\n\
-\ -locale <name> Locale to be used, e.g. en_US or en_US_WIN\n\
-\ -encoding <name> Source file encoding name\n\
-\ -quiet Do not display status messages\n\
-\ -J<flag> Pass <flag> directly to the runtime system\n\
-\ -X Print a synopsis of nonstandard\n\
-\ options and exit\n
+main.usage=Usage:\n\
+\ javadoc [options] [packagenames] [sourcefiles] [@files]\n\
+where options include:
+
+main.opt.public.desc=\
+ Show only public classes and members
+
+main.opt.protected.desc=\
+ Show protected/public classes and members (default)
+
+main.opt.package.desc=\
+ Show package/protected/public classes and members
+
+main.opt.private.desc=\
+ Show all classes and members
+
+main.opt.show.members.arg=\
+ <value>
+main.opt.show.members.desc=\
+ Specifies which members (fields, methods, etc.) will be\n\
+ documented, where value can be one of "public", "protected",\n\
+ "package" or "private". The default is "protected", which will\n\
+ show public and protected members, "public" will show only\n\
+ public members, "package" will show public, protected and\n\
+ package members and "private" will show all members.
+
+main.opt.show.types.arg=\
+ <value>
+main.opt.show.types.desc=\
+ Specifies which types (classes, interfaces, etc.) will be\n\
+ documented, where value can be one of "public", "protected",\n\
+ "package" or "private". The default is "protected", which will\n\
+ show public and protected types, "public" will show only\n\
+ public types, "package" will show public, protected and\n\
+ package types and "private" will show all types.
+
+main.opt.show.packages.arg=\
+ <value>
+main.opt.show.packages.desc=\
+ Specifies which module's packages will be documented. Possible\n\
+ values are "exported" or "all" packages.
+
+main.opt.show.module.contents.arg=\
+ <value>
+main.opt.show.module.contents.desc=\
+ Specifies the documentation granularity of module\n\
+ declarations. Possible values are "api" or "all".
+
+main.opt.expand.requires.arg=\
+ <value>
+main.opt.expand.requires.desc=\
+ Instructs the tool to expand the set of modules to be\n\
+ documented. By default, only the modules given explicitly on\n\
+ the command line will be documented. A value of "public" will\n\
+ additionally include all "requires public" dependencies of\n\
+ those modules. A value of "all" will include all dependencies\n\
+ of those modules.
+
+main.opt.help.desc=\
+ Display command line options and exit
+
+main.opt.module.arg=\
+ <module>(,<module>)*
+main.opt.module.desc=\
+ Document the specified module(s)
+
+main.opt.doclet.arg=\
+ <class>
+main.opt.doclet.desc=\
+ Generate output via alternate doclet
+
+main.opt.docletpath.arg=\
+ <path>
+main.opt.docletpath.desc=\
+ Specify where to find doclet class files
+
+main.opt.module.source.path.arg=\
+ <path>
+main.opt.module.source.path.desc=\
+ Specify where to find input source files for multiple modules
+
+main.opt.upgrade.module.path.arg=\
+ <path>
+main.opt.upgrade.module.path.desc=\
+ Override location of upgradeable modules
+
+main.opt.module.path.arg=\
+ <path>
+main.opt.module.path.desc=\
+ Specify where to find application modules
+
+main.opt.add.modules.arg=\
+ <module>(,<module>)*
+main.opt.add.modules.desc=\
+ Root modules to resolve in addition to the initial modules,\n\
+ or all modules on the module path if <module> is\n\
+ ALL-MODULE-PATH.
+
+main.opt.limit.modules.arg=\
+ <module>(,<module>)*
+main.opt.limit.modules.desc=\
+ Limit the universe of observable modules
+
+main.opt.source.path.arg=\
+ <path>
+main.opt.source.path.desc=\
+ Specify where to find source files
+
+main.opt.class.path.arg=\
+ <path>
+main.opt.class.path.desc=\
+ Specify where to find user class files
+
+main.opt.exclude.arg=\
+ <pkglist>
+main.opt.exclude.desc=\
+ Specify a list of packages to exclude
+
+main.opt.subpackages.arg=\
+ <subpkglist>
+main.opt.subpackages.desc=\
+ Specify subpackages to recursively load
+
+main.opt.breakiterator.desc=\
+ Compute first sentence with BreakIterator
+
+main.opt.bootclasspath.arg=\
+ <path>
+main.opt.bootclasspath.desc=\
+ Override location of platform class files used for non-modular\n\
+ releases
+
+main.opt.system.arg=\
+ <jdk>
+main.opt.system.desc=\
+ Override location of system modules used for modular releases
+
+main.opt.release.arg=\
+ <release>
+main.opt.release.desc=\
+ Provide source compatibility with specified release
+
+main.opt.source.arg=\
+ <release>
+main.opt.source.desc=\
+ Provide source compatibility with specified release
+
+main.opt.extdirs.arg=\
+ <dirlist>
+main.opt.extdirs.desc=\
+ Override location of installed extensions
+
+main.opt.verbose.desc=\
+ Output messages about what Javadoc is doing
+
+main.opt.locale.arg=\
+ <name>
+main.opt.locale.desc=\
+ Locale to be used, e.g. en_US or en_US_WIN
+
+main.opt.encoding.arg=\
+ <name>
+main.opt.encoding.desc=\
+ Source file encoding name
+
+main.opt.quiet.desc=\
+ Do not display status messages
+
+main.opt.J.arg=\
+ <flag>
+main.opt.J.desc=\
+ Pass <flag> directly to the runtime system
+
+main.opt.X.desc=\
+ Print a synopsis of nonstandard options and exit
main.usage.foot=\n\
GNU-style options may use '=' instead of whitespace to separate the name of an\n\
option from its value.\n
-main.Xusage=\
-\ -Xmaxerrs <number> Set the maximum number of errors to print\n\
-\ -Xmaxwarns <number> Set the maximum number of warnings to print\n\
-\ --add-exports <module>/<package>=<other-module>(,<other-module>)*\n\
-\ Specify a package to be considered as exported\n\
-\ from its defining module to additional modules,\n\
-\ or to all unnamed modules if <other-module> is\n\
-\ ALL-UNNAMED.\n\
-\ --add-reads <module>=<other-module>(,<other-module>)*\n\
-\ Specify additional modules to be considered as\n\
-\ required by a given module. <other-module> may be\n\
-\ ALL-UNNAMED to require the unnamed module.\n\
-\ -Xmodule:<module-name> Specify a module to which the classes being\n\
-\ compiled belong.\n\
-\ --patch-module <module>=<file>(:<file>)*\n\
-\ Override or augment a module with classes\n\
-\ and resources in JAR files or directories\n\
-\ -Xold Invoke the legacy javadoc tool\n
+main.Xusage=
+
+main.opt.Xmaxerrs.arg=\
+ <number>
+main.opt.Xmaxerrs.desc=\
+ Set the maximum number of errors to print
+
+main.opt.Xmaxwarns.arg=\
+ <number>
+main.opt.Xmaxwarns.desc=\
+ Set the maximum number of warnings to print
+
+main.opt.add.exports.arg=\
+ <module>/<package>=<other-module>(,<other-module>)*
+main.opt.add.exports.desc=\
+ Specify a package to be considered as exported from its\n\
+ defining module to additional modules, or to all unnamed\n\
+ modules if <other-module> is ALL-UNNAMED
-main.Xusage.foot=\
+main.opt.add.reads.arg=\
+ <module>=<other-module>(,<other-module>)*
+main.opt.add.reads.desc=\
+ Specify additional modules to be considered as required by a\n\
+ given module. <other-module> may be ALL-UNNAMED to require\n\
+ the unnamed module.
+
+main.opt.Xmodule.arg=\
+ <module-name>
+main.opt.Xmodule.desc=\
+ Specify a module to which the classes being compiled belong
+
+main.opt.patch.module.arg=\
+ <module>=<file>(:<file>)*
+main.opt.patch.module.desc=\
+ Override or augment a module with classes and resources in\n\
+ JAR files or directories
+
+main.opt.Xold.desc=\
+ Invoke the legacy javadoc tool
+
+main.Xusage.foot=\n\
These options are non-standard and subject to change without notice.
-main.doclet.usage.header=Provided by the {0} doclet:
+main.doclet.usage.header=\nProvided by the {0} doclet:
main.requires_argument=option {0} requires an argument.
+main.unnecessary_arg_provided=option {0} does not require an argument
+main.only_one_argument_with_equals=cannot use ''='' syntax for options that require multiple arguments
main.invalid_flag=invalid flag: {0}
main.No_modules_packages_or_classes_specified=No modules, packages or classes specified.
main.module_not_found=module {0} not found.\n
--- a/langtools/test/jdk/javadoc/doclet/lib/JavadocTester.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/doclet/lib/JavadocTester.java Fri Sep 30 13:15:22 2016 -0700
@@ -41,6 +41,7 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
@@ -410,6 +411,23 @@
}
/**
+ * Get the content of the one of the output streams written by
+ * javadoc.
+ */
+ public String getOutput(Output output) {
+ return outputMap.get(output);
+ }
+
+ /**
+ * Get the content of the one of the output streams written by
+ * javadoc.
+ */
+ public List<String> getOutputLines(Output output) {
+ String text = outputMap.get(output);
+ return (text == null) ? Collections.emptyList() : Arrays.asList(text.split(NL));
+ }
+
+ /**
* Check for files in (or not in) the generated output.
* @param expectedFound true if all of the files are expected
* to be found, or false if all of the files are expected to be
--- a/langtools/test/jdk/javadoc/doclet/testHelpOption/TestHelpOption.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testHelpOption/TestHelpOption.java Fri Sep 30 13:15:22 2016 -0700
@@ -32,6 +32,9 @@
* @run main TestHelpOption
*/
+import java.util.*;
+import java.util.stream.*;
+
public class TestHelpOption extends JavadocTester {
public static void main(String... args) throws Exception {
@@ -40,6 +43,26 @@
}
@Test
+ void testLineLengths() {
+ javadoc("-d", "out1",
+ "-sourcepath", testSrc,
+ "-X",
+ testSrc("TestXOption.java"));
+ checkExit(Exit.OK);
+ List<String> longLines = getOutputLines(Output.OUT).stream()
+ .filter(s -> s.length() > 80)
+ .collect(Collectors.toList());
+ checking("line lengths");
+ if (longLines.isEmpty()) {
+ passed("all lines OK");
+ } else {
+ out.println("long lines:");
+ longLines.stream().forEach(s -> out.println(">>>" + s + "<<<"));
+ failed(longLines.size() + " long lines");
+ }
+ }
+
+ @Test
void testWithOption() {
javadoc("-d", "out1",
"-sourcepath", testSrc,
@@ -107,7 +130,7 @@
"-use ",
"-version ",
"-author ",
- "-docfilessubdirs ",
+ "-docfilessubdirs\n",
"-splitindex ",
"-windowtitle ",
"-doctitle ",
@@ -119,11 +142,11 @@
"-excludedocfilessubdir ",
"-group ",
"-nocomment ",
- "-nodeprecated ",
+ "-nodeprecated\n",
"-noqualifier ",
"-nosince ",
"-notimestamp ",
- "-nodeprecatedlist ",
+ "-nodeprecatedlist\n",
"-notree ",
"-noindex ",
"-nohelp ",
--- a/langtools/test/jdk/javadoc/doclet/testXOption/TestXOption.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/doclet/testXOption/TestXOption.java Fri Sep 30 13:15:22 2016 -0700
@@ -31,6 +31,9 @@
* @run main TestXOption
*/
+import java.util.*;
+import java.util.stream.*;
+
public class TestXOption extends JavadocTester {
public static void main(String... args) throws Exception {
@@ -39,6 +42,26 @@
}
@Test
+ void testLineLengths() {
+ javadoc("-d", "out1",
+ "-sourcepath", testSrc,
+ "-X",
+ testSrc("TestXOption.java"));
+ checkExit(Exit.OK);
+ List<String> longLines = getOutputLines(Output.OUT).stream()
+ .filter(s -> s.length() > 80)
+ .collect(Collectors.toList());
+ checking("line lengths");
+ if (longLines.isEmpty()) {
+ passed("all lines OK");
+ } else {
+ out.println("long lines:");
+ longLines.stream().forEach(s -> out.println(">>>" + s + "<<<"));
+ failed(longLines.size() + " long lines");
+ }
+ }
+
+ @Test
void testWithOption() {
javadoc("-d", "out1",
"-sourcepath", testSrc,
@@ -58,14 +81,9 @@
}
private void checkOutput(boolean expectFound) {
- // TODO: It's an ugly hidden side-effect of the current doclet API
- // that the -X output from the tool and the -X output from the doclet
- // come out on different streams!
- // When we clean up the doclet API, this should be rationalized.
checkOutput(Output.OUT, expectFound,
"-Xmaxerrs ",
- "-Xmaxwarns ");
- checkOutput(Output.OUT, expectFound,
+ "-Xmaxwarns ",
"-Xdocrootparent ",
"-Xdoclint ",
"-Xdoclint:");
--- a/langtools/test/jdk/javadoc/tool/CheckResourceKeys.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/tool/CheckResourceKeys.java Fri Sep 30 13:15:22 2016 -0700
@@ -145,6 +145,9 @@
// ignore these synthesized keys, tested by usageTests
if (rk.startsWith("doclet.usage.") || rk.startsWith("doclet.xusage"))
continue;
+ // ignore these synthesized keys, tested by usageTests
+ if (rk.matches("main\\.opt\\..*\\.(arg|desc)"))
+ continue;
if (codeKeys.contains(rk))
continue;
@@ -161,6 +164,9 @@
// ignore these synthesized keys, tested by usageTests
if (ck.startsWith("doclet.usage.") || ck.startsWith("doclet.xusage."))
continue;
+ // ignore this partial key, tested by usageTests
+ if (ck.equals("main.opt."))
+ continue;
if (resourceKeys.contains(ck))
continue;
error("No resource for \"" + ck + "\"");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/OptionSyntaxTest.java Fri Sep 30 13:15:22 2016 -0700
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8166144
+ * @summary support new-style options
+ * @modules jdk.compiler/com.sun.tools.javac.api
+ * @modules jdk.compiler/com.sun.tools.javac.main
+ * @modules jdk.javadoc/jdk.javadoc.internal.api
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @library /tools/lib
+ * @build toolbox.JavacTask toolbox.JavadocTask toolbox.ModuleBuilder toolbox.TestRunner toolbox.ToolBox
+ * @run main OptionSyntaxTest
+ */
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Locale;
+import java.util.Objects;
+import java.util.Set;
+
+import javax.lang.model.SourceVersion;
+
+import jdk.javadoc.doclet.Doclet;
+import jdk.javadoc.doclet.DocletEnvironment;
+import jdk.javadoc.doclet.Reporter;
+
+import toolbox.JavadocTask;
+import toolbox.ModuleBuilder;
+import toolbox.Task;
+import toolbox.TestRunner;
+import toolbox.ToolBox;
+
+
+public class OptionSyntaxTest extends TestRunner {
+ public static class TestDoclet implements Doclet {
+ @Override
+ public boolean run(DocletEnvironment root) {
+ System.out.println("TestDoclet.run");
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ return "Test";
+ }
+
+ @Override
+ public Set<Option> getSupportedOptions() {
+ return options;
+ }
+
+ @Override
+ public SourceVersion getSupportedSourceVersion() {
+ return SourceVersion.latest();
+ }
+
+ @Override
+ public void init(Locale locale, Reporter reporter) {
+ }
+
+ private final Set<Doclet.Option> options = new HashSet<>(Arrays.asList(
+ new DOption("-old", 0),
+ new DOption("-oldWithArg", 1),
+ new DOption("-oldWithArgs", 2),
+ new DOption("--new", 0),
+ new DOption("--newWithArg", 1),
+ new DOption("--newWithArgs", 2)
+ ));
+
+ }
+
+ static class DOption implements Doclet.Option {
+ private final String name;
+ private final int argCount;
+
+ DOption(String name, int argCount) {
+ this.name = name;
+ this.argCount = argCount;
+ }
+
+ @Override
+ public int getArgumentCount() {
+ return argCount;
+ }
+
+ @Override
+ public String getDescription() {
+ return "description[" + name + "]";
+ }
+
+ @Override
+ public Kind getKind() {
+ return Doclet.Option.Kind.STANDARD;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String getParameters() {
+ return argCount > 0 ? "parameters[" + name + "," + argCount + "]" : null;
+ }
+
+ @Override
+ public boolean matches(String option) {
+ return option.equals(name);
+ }
+
+ @Override
+ public boolean process(String option, ListIterator<String> arguments) {
+ List<String> args = new ArrayList<>();
+ for (int i = 0; i < argCount && arguments.hasNext(); i++) {
+ args.add(arguments.next());
+ }
+ System.out.println("process " + option + " " + args);
+ return args.stream().filter(s -> s.startsWith("arg")).count() == argCount;
+ }
+ }
+
+ public static void main(String... args) throws Exception {
+ OptionSyntaxTest t = new OptionSyntaxTest();
+ t.runTests();
+ }
+
+ private final ToolBox tb = new ToolBox();
+ private final Path src = Paths.get("src");
+ private final Path modules = Paths.get("modules");
+
+ OptionSyntaxTest() throws IOException {
+ super(System.err);
+ initModules();
+ }
+
+ void initModules() throws IOException {
+ new ModuleBuilder(tb, "m1")
+ .exports("p1")
+ .classes("package p1; public class C1 { }")
+ .write(src);
+
+ new ModuleBuilder(tb, "m2")
+ .exports("p2")
+ .classes("package p2; public class C2 { }")
+ .build(modules);
+
+ }
+
+ @Test
+ public void testBasic() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testNewSourcePath() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "--source-path", "src/m1",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testNewSourcePathEquals() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "--source-path=src/m1",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testOldDocletArgs() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "-old",
+ "-oldWithArg", "arg",
+ "-oldWithArgs", "arg1", "arg2",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testNewDocletArgs() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "--new",
+ "--newWithArg", "arg",
+ "--newWithArgs", "arg1", "arg2",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testNewDocletArgsEquals() {
+ new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "--new", "--newWithArg=arg",
+ "p1")
+ .run()
+ .writeAll();
+ }
+
+ @Test
+ public void testNewDocletArgsMissingArgs() throws Exception {
+ String log = new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "--newWithArg")
+ .run(Task.Expect.FAIL)
+ .writeAll()
+ .getOutput(Task.OutputKind.DIRECT);
+ if (!log.contains("option --newWithArg requires an argument"))
+ throw new Exception("expected output not found");
+ }
+
+ @Test
+ public void testNewDocletArgsExtraArgs() throws Exception {
+ String log = new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "--new=arg",
+ "p1")
+ .run(Task.Expect.FAIL)
+ .writeAll()
+ .getOutput(Task.OutputKind.DIRECT);
+ if (!log.contains("option --new does not require an argument"))
+ throw new Exception("expected output not found");
+ }
+
+ @Test
+ public void testNewDocletArgsExtraArgs2() throws Exception {
+ String log = new JavadocTask(tb, Task.Mode.CMDLINE)
+ .options("-docletpath", System.getProperty("test.classes"),
+ "-doclet", TestDoclet.class.getName(),
+ "-sourcepath", "src/m1",
+ "--newWithArgs=arg1 arg2",
+ "p1")
+ .run(Task.Expect.FAIL)
+ .writeAll()
+ .getOutput(Task.OutputKind.DIRECT);
+ if (!log.contains("cannot use '=' syntax for options that require multiple arguments"))
+ throw new Exception("expected output not found");
+ }
+
+}
--- a/langtools/test/jdk/javadoc/tool/api/basic/IsSupportedOptionTest.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/tool/api/basic/IsSupportedOptionTest.java Fri Sep 30 13:15:22 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@
import javax.tools.ToolProvider;
/**
- * Tests for DocumentationTool.usSupportedOption method.
+ * Tests for DocumentationTool.isSupportedOption method.
*/
public class IsSupportedOptionTest extends APITest {
public static void main(String... args) throws Exception {
--- a/langtools/test/jdk/javadoc/tool/modules/FilterOptions.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/tool/modules/FilterOptions.java Fri Sep 30 13:15:22 2016 -0700
@@ -70,7 +70,7 @@
@Test
public void testModuleModeApi(Path base) throws Exception {
execTask("--module-source-path", src,
- "--module", "m1", "--show-module-contents:api");
+ "--module", "m1", "--show-module-contents", "api");
checkModuleMode("API");
}
@@ -78,7 +78,7 @@
@Test
public void testModuleModeAll(Path base) throws Exception {
execTask("--module-source-path", src,
- "--module", "m1", "--show-module-contents:all");
+ "--module", "m1", "--show-module-contents", "all");
checkModuleMode("ALL");
}
@@ -87,7 +87,7 @@
public void testShowPackagesExported(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-packages:exported"); // default
+ "--show-packages", "exported"); // default
checkModulesSpecified("m1");
checkModulesIncluded("m1");
@@ -99,7 +99,7 @@
public void testShowPackagesAll(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-packages:all");
+ "--show-packages", "all");
checkModulesSpecified("m1");
checkModulesIncluded("m1");
checkPackagesIncluded("pub", "pro");
@@ -112,7 +112,7 @@
public void testShowTypesPrivate(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-types:private");
+ "--show-types", "private");
checkModulesSpecified("m1");
checkModulesIncluded("m1");
@@ -129,7 +129,7 @@
public void testShowTypesPackage(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-types:package");
+ "--show-types", "package");
checkModulesSpecified("m1");
checkModulesIncluded("m1");
@@ -145,7 +145,7 @@
public void testShowTypesProtected(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-types:protected");
+ "--show-types", "protected");
checkModulesSpecified("m1");
checkModulesIncluded("m1");
@@ -162,7 +162,7 @@
public void testShowTypesPublic(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-types:public");
+ "--show-types", "public");
checkModulesSpecified("m1");
checkModulesIncluded("m1");
@@ -179,7 +179,7 @@
public void testShowMembersPrivate(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-members:private");
+ "--show-members", "private");
checkMembers(Visibility.PRIVATE);
}
@@ -188,7 +188,7 @@
public void testShowMembersPackage(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-members:package");
+ "--show-members", "package");
checkMembers(Visibility.PACKAGE);
}
@@ -197,7 +197,7 @@
public void testShowMembersProtected(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-members:protected");
+ "--show-members", "protected");
checkMembers(Visibility.PROTECTED);
}
@@ -206,7 +206,7 @@
public void testShowMembersPublic(Path base) throws Exception {
execTask("--module-source-path", src,
"--module", "m1",
- "--show-members:public");
+ "--show-members", "public");
checkMembers(Visibility.PUBLIC);
}
--- a/langtools/test/jdk/javadoc/tool/modules/Modules.java Thu Sep 29 21:31:09 2016 -0700
+++ b/langtools/test/jdk/javadoc/tool/modules/Modules.java Fri Sep 30 13:15:22 2016 -0700
@@ -440,7 +440,7 @@
execTask("--module-source-path", src.toString(),
"--module", "M",
- "--expand-requires:public");
+ "--expand-requires", "public");
checkModulesSpecified("M", "N", "O");
checkModulesIncluded("M", "N", "O");
@@ -465,7 +465,7 @@
execTask("--module-source-path", src.toString(),
"--module", "M",
- "--expand-requires:all");
+ "--expand-requires", "all");
checkModulesSpecified("M", "java.base", "N", "L", "O");
checkModulesIncluded("M", "java.base", "N", "L", "O");
@@ -493,7 +493,7 @@
execNegativeTask("--module-source-path", src.toString(),
"--module", "MIA",
- "--expand-requires:all");
+ "--expand-requires", "all");
assertErrorPresent("javadoc: error - module MIA not found.");
}
@@ -515,7 +515,7 @@
execNegativeTask("--module-source-path", src.toString(),
"--module", "M,N,L,MIA,O,P",
- "--expand-requires:all");
+ "--expand-requires", "all");
assertErrorPresent("javadoc: error - module MIA not found");
}