/*
* Copyright (c) 1997, 2020, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package jdk.javadoc.internal.doclets.toolkit;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.MissingResourceException;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import jdk.javadoc.doclet.Doclet;
import jdk.javadoc.doclet.Reporter;
import jdk.javadoc.internal.doclets.toolkit.util.DocletConstants;
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
import static javax.tools.Diagnostic.Kind.ERROR;
Storage for the format-independent options supported by the toolkit. The objects to handle command-line options, and to initialize this object, are all subtypes of Option
, returned by getSupportedOptions()
. Some of the methods used to access the values of options have names that begin with a verb, such as copyDocfileSubdirs
or showVersion
. Unless otherwise stated, these methods should all be taken as just accessing the value of the associated option.
/**
* Storage for the format-independent options supported by the toolkit.
* The objects to handle command-line options, and to initialize this
* object, are all subtypes of {@link BaseOptions.Option},
* returned by {@link BaseOptions#getSupportedOptions()}.
*
* <p>Some of the methods used to access the values of options
* have names that begin with a verb, such as {@link #copyDocfileSubdirs}
* or {@link #showVersion}. Unless otherwise stated,
* these methods should all be taken as just accessing the value
* of the associated option.
*/
public abstract class BaseOptions {
//<editor-fold desc="Option values">
Argument for command-line option --allow-script-in-comments
. Allow JavaScript in doc comments. /**
* Argument for command-line option {@code --allow-script-in-comments}.
* Allow JavaScript in doc comments.
*/
private boolean allowScriptInComments = false;
Argument for command-line option -docfilessubdirs
. True if we should recursively copy the doc-file subdirectories /**
* Argument for command-line option {@code -docfilessubdirs}.
* True if we should recursively copy the doc-file subdirectories
*/
private boolean copyDocfileSubdirs = false;
Arguments for command-line option -tag
and -taglet
. /**
* Arguments for command-line option {@code -tag} and {@code -taglet}.
*/
private final LinkedHashSet<List<String>> customTagStrs = new LinkedHashSet<>();
Argument for command-line option -d
. Destination directory name, in which doclet will generate the entire documentation. Default is current directory. /**
* Argument for command-line option {@code -d}.
* Destination directory name, in which doclet will generate the entire
* documentation. Default is current directory.
*/
private String destDirName = "";
Argument for command-line option --disable-javafx-strict-checks
. Primarily used to disable strict checks in the regression tests allowing those tests to be executed successfully, for instance, with OpenJDK builds which may not contain FX libraries. /**
* Argument for command-line option {@code --disable-javafx-strict-checks}.
* Primarily used to disable strict checks in the regression
* tests allowing those tests to be executed successfully, for
* instance, with OpenJDK builds which may not contain FX libraries.
*/
private boolean disableJavaFxStrictChecks = false;
Argument for command-line option -docencoding
. Encoding for this document. Default is default encoding for this platform. /**
* Argument for command-line option {@code -docencoding}.
* Encoding for this document. Default is default encoding for this
* platform.
*/
private String docEncoding = null;
Argument for command-line option ???
. Destination directory name, in which doclet will copy the doc-files to. /**
* Argument for command-line option {@code ???}.
* Destination directory name, in which doclet will copy the doc-files to.
*/
private String docFileDestDirName = "";
Argument for hidden command-line option --dump-on-error
. /**
* Argument for hidden command-line option {@code --dump-on-error}.
*/
private boolean dumpOnError = false;
Argument for command-line option -encoding
. Encoding for this document. Default is default encoding for this platform. /**
* Argument for command-line option {@code -encoding}.
* Encoding for this document. Default is default encoding for this
* platform.
*/
private String encoding = null;
Argument for command-line option -excludedocfilessubdir
. The set of doc-file subdirectories to exclude. /**
* Argument for command-line option {@code -excludedocfilessubdir}.
* The set of doc-file subdirectories to exclude.
*/
private Set<String> excludedDocFileDirs;
Argument for command-line option -noqualifier
. The set of qualifiers to exclude. /**
* Argument for command-line option {@code -noqualifier}.
* The set of qualifiers to exclude.
*/
private Set<String> excludedQualifiers;
Arguments for command-line option -group
/**
* Arguments for command-line option {@code -group}
*/
private List<Utils.Pair<String, String>> groupPairs;
Argument for command-line option --javafx
or -javafx
. Generate documentation for JavaFX getters and setters automatically by copying it from the appropriate property definition. /**
* Argument for command-line option {@code --javafx} or {@code -javafx}.
* Generate documentation for JavaFX getters and setters automatically
* by copying it from the appropriate property definition.
*/
private boolean javafx = false;
Argument for command-line option -keywords
. True if user wants to add member names as meta keywords. Set to false because meta keywords are ignored in general by most Internet search engines. /**
* Argument for command-line option {@code -keywords}.
* True if user wants to add member names as meta keywords.
* Set to false because meta keywords are ignored in general
* by most Internet search engines.
*/
private boolean keywords = false;
Arguments for command-line option -link
. /**
* Arguments for command-line option {@code -link}.
*/
// A list containing urls
private final List<String> linkList = new ArrayList<>();
Arguments for command-line option -linkoffline
. /**
* Arguments for command-line option {@code -linkoffline}.
*/
// A list of pairs containing urls and package list
private final List<Utils.Pair<String, String>> linkOfflineList = new ArrayList<>();
Argument for command-line option -linksource
. True if we should generate browsable sources. /**
* Argument for command-line option {@code -linksource}.
* True if we should generate browsable sources.
*/
private boolean linkSource = false;
Argument for command-line option -nocomment
. True if user wants to suppress descriptions and tags. /**
* Argument for command-line option {@code -nocomment}.
* True if user wants to suppress descriptions and tags.
*/
private boolean noComment = false;
Argument for command-line option -nodeprecated
. Don't generate deprecated API information at all, if -nodeprecated option is used. nodeprecated
is set to true if
-nodeprecated option is used. Default is generate deprecated API
information.
/**
* Argument for command-line option {@code -nodeprecated}.
* Don't generate deprecated API information at all, if -nodeprecated
* option is used. <code>nodeprecated</code> is set to true if
* -nodeprecated option is used. Default is generate deprecated API
* information.
*/
private boolean noDeprecated = false;
Argument for command-line option -nosince
. True if command-line option "-nosince" is used. Default value is false. /**
* Argument for command-line option {@code -nosince}.
* True if command-line option "-nosince" is used. Default value is
* false.
*/
private boolean noSince = false;
Argument for command-line option -notimestamp
. True if user wants to suppress time stamp in output. Default is false. /**
* Argument for command-line option {@code -notimestamp}.
* True if user wants to suppress time stamp in output.
* Default is false.
*/
private boolean noTimestamp = false;
Argument for command-line option -quiet
. Suppress all messages /**
* Argument for command-line option {@code -quiet}.
* Suppress all messages
*/
private boolean quiet = false;
Argument for command-line option -serialwarn
. This is true if option "-serialwarn" is used. Default value is false to suppress excessive warnings about serial tag. /**
* Argument for command-line option {@code -serialwarn}.
* This is true if option "-serialwarn" is used. Default value is false to
* suppress excessive warnings about serial tag.
*/
private boolean serialWarn = false;
Argument for command-line option -author
. Generate author specific information for all the classes if @author tag is used in the doc comment and if -author option is used. showauthor
is set to true if -author option is used.
Default is don't show author information.
/**
* Argument for command-line option {@code -author}.
* Generate author specific information for all the classes if @author
* tag is used in the doc comment and if -author option is used.
* <code>showauthor</code> is set to true if -author option is used.
* Default is don't show author information.
*/
private boolean showAuthor = false;
Argument for command-line option --show-taglets
. Show taglets (internal debug switch) /**
* Argument for command-line option {@code --show-taglets}.
* Show taglets (internal debug switch)
*/
private boolean showTaglets = false;
Argument for command-line option -version
. Generate version specific information for the all the classes if @version tag is used in the doc comment and if -version option is used. showVersion
is set to true if -version option is used. Default is don't show version information. /**
* Argument for command-line option {@code -version}.
* Generate version specific information for the all the classes
* if @version tag is used in the doc comment and if -version option is
* used. {@code showVersion} is set to true if -version option is
* used. Default is don't show version information.
*/
private boolean showVersion = false;
Argument for command-line option -sourcetab
. The specified amount of space between tab stops. /**
* Argument for command-line option {@code -sourcetab}.
* The specified amount of space between tab stops.
*/
private int sourceTabSize;
Value for command-line option --override-methods summary
or --override-methods detail
. Specifies whether those methods that override a super-type's method with no changes to the API contract should be summarized in the footnote section. /**
* Value for command-line option {@code --override-methods summary}
* or {@code --override-methods detail}.
* Specifies whether those methods that override a super-type's method
* with no changes to the API contract should be summarized in the
* footnote section.
*/
private boolean summarizeOverriddenMethods = false;
Argument for command-line option -tagletpath
. The path to Taglets /**
* Argument for command-line option {@code -tagletpath}.
* The path to Taglets
*/
private String tagletPath = null;
//</editor-fold>
private final BaseConfiguration config;
protected BaseOptions(BaseConfiguration config) {
this.config = config;
excludedDocFileDirs = new HashSet<>();
excludedQualifiers = new HashSet<>();
sourceTabSize = DocletConstants.DEFAULT_TAB_STOP_LENGTH;
groupPairs = new ArrayList<>(0);
}
public Set<? extends Option> getSupportedOptions() {
Resources resources = config.getDocResources();
Messages messages = config.getMessages();
Reporter reporter = config.getReporter();
List<Option> options = List.of(
new Option(resources, "-author") {
@Override
public boolean process(String opt, List<String> args) {
showAuthor = true;
return true;
}
},
new Option(resources, "-d", 1) {
@Override
public boolean process(String opt, List<String> args) {
destDirName = addTrailingFileSep(args.get(0));
return true;
}
},
new Option(resources, "-docencoding", 1) {
@Override
public boolean process(String opt, List<String> args) {
docEncoding = args.get(0);
return true;
}
},
new Option(resources, "-docfilessubdirs") {
@Override
public boolean process(String opt, List<String> args) {
copyDocfileSubdirs = true;
return true;
}
},
new Hidden(resources, "-encoding", 1) {
@Override
public boolean process(String opt, List<String> args) {
encoding = args.get(0);
return true;
}
},
new Option(resources, "-excludedocfilessubdir", 1) {
@Override
public boolean process(String opt, List<String> args) {
addToSet(excludedDocFileDirs, args.get(0));
return true;
}
},
new Option(resources, "-group", 2) {
@Override
public boolean process(String opt, List<String> args) {
groupPairs.add(new Utils.Pair<>(args.get(0), args.get(1)));
return true;
}
},
new Option(resources, "--javafx -javafx") {
@Override
public boolean process(String opt, List<String> args) {
javafx = true;
return true;
}
},
new Option(resources, "-keywords") {
@Override
public boolean process(String opt, List<String> args) {
keywords = true;
return true;
}
},
new Option(resources, "-link", 1) {
@Override
public boolean process(String opt, List<String> args) {
linkList.add(args.get(0));
return true;
}
},
new Option(resources, "-linksource") {
@Override
public boolean process(String opt, List<String> args) {
linkSource = true;
return true;
}
},
new Option(resources, "-linkoffline", 2) {
@Override
public boolean process(String opt, List<String> args) {
linkOfflineList.add(new Utils.Pair<>(args.get(0), args.get(1)));
return true;
}
},
new Option(resources, "-nocomment") {
@Override
public boolean process(String opt, List<String> args) {
noComment = true;
return true;
}
},
new Option(resources, "-nodeprecated") {
@Override
public boolean process(String opt, List<String> args) {
noDeprecated = true;
return true;
}
},
new Option(resources, "-nosince") {
@Override
public boolean process(String opt, List<String> args) {
noSince = true;
return true;
}
},
new Option(resources, "-notimestamp") {
@Override
public boolean process(String opt, List<String> args) {
noTimestamp = true;
return true;
}
},
new Option(resources, "-noqualifier", 1) {
@Override
public boolean process(String opt, List<String> args) {
addToSet(excludedQualifiers, args.get(0));
return true;
}
},
new Option(resources, "--override-methods", 1) {
@Override
public boolean process(String opt, List<String> args) {
String o = args.get(0);
switch (o) {
case "summary":
summarizeOverriddenMethods = true;
break;
case "detail":
summarizeOverriddenMethods = false;
break;
default:
reporter.print(ERROR,
resources.getText("doclet.Option_invalid",o, "--override-methods"));
return false;
}
return true;
}
},
new Hidden(resources, "-quiet") {
@Override
public boolean process(String opt, List<String> args) {
quiet = true;
return true;
}
},
new Option(resources, "-serialwarn") {
@Override
public boolean process(String opt, List<String> args) {
serialWarn = true;
return true;
}
},
new Option(resources, "-sourcetab", 1) {
@Override
public boolean process(String opt, List<String> args) {
linkSource = true;
try {
sourceTabSize = Integer.parseInt(args.get(0));
} catch (NumberFormatException e) {
//Set to -1 so that warning will be printed
//to indicate what is valid argument.
sourceTabSize = -1;
}
if (sourceTabSize <= 0) {
messages.warning("doclet.sourcetab_warning");
sourceTabSize = DocletConstants.DEFAULT_TAB_STOP_LENGTH;
}
return true;
}
},
new Option(resources, "-tag", 1) {
@Override
public boolean process(String opt, List<String> args) {
ArrayList<String> list = new ArrayList<>();
list.add(opt);
list.add(args.get(0));
customTagStrs.add(list);
return true;
}
},
new Option(resources, "-taglet", 1) {
@Override
public boolean process(String opt, List<String> args) {
ArrayList<String> list = new ArrayList<>();
list.add(opt);
list.add(args.get(0));
customTagStrs.add(list);
return true;
}
},
new Option(resources, "-tagletpath", 1) {
@Override
public boolean process(String opt, List<String> args) {
tagletPath = args.get(0);
return true;
}
},
new Option(resources, "-version") {
@Override
public boolean process(String opt, List<String> args) {
showVersion = true;
return true;
}
},
new Hidden(resources, "--dump-on-error") {
@Override
public boolean process(String opt, List<String> args) {
dumpOnError = true;
return true;
}
},
new Option(resources, "--allow-script-in-comments") {
@Override
public boolean process(String opt, List<String> args) {
allowScriptInComments = true;
return true;
}
},
new Hidden(resources, "--disable-javafx-strict-checks") {
@Override
public boolean process(String opt, List<String> args) {
disableJavaFxStrictChecks = true;
return true;
}
},
new Hidden(resources, "--show-taglets") {
@Override
public boolean process(String opt, List<String> args) {
showTaglets = true;
return true;
}
}
);
return new TreeSet<>(options);
}
This checks for the validity of the options used by the user.
As of this writing, this checks only docencoding.
Returns: true if all the options are valid.
/**
* This checks for the validity of the options used by the user.
* As of this writing, this checks only docencoding.
*
* @return true if all the options are valid.
*/
protected boolean generalValidOptions() {
if (docEncoding != null) {
if (!checkOutputFileEncoding(docEncoding)) {
return false;
}
}
if (docEncoding == null && (encoding != null && !encoding.isEmpty())) {
if (!checkOutputFileEncoding(encoding)) {
return false;
}
}
return true;
}
Check the validity of the given Source or Output File encoding on this
platform.
Params: - docencoding – output file encoding.
/**
* Check the validity of the given Source or Output File encoding on this
* platform.
*
* @param docencoding output file encoding.
*/
private boolean checkOutputFileEncoding(String docencoding) {
OutputStream ost = new ByteArrayOutputStream();
OutputStreamWriter osw = null;
try {
osw = new OutputStreamWriter(ost, docencoding);
} catch (UnsupportedEncodingException exc) {
config.reporter.print(ERROR,
config.getDocResources().getText("doclet.Encoding_not_supported", docencoding));
return false;
} finally {
try {
if (osw != null) {
osw.close();
}
} catch (IOException exc) {
}
}
return true;
}
private void addToSet(Set<String> s, String str) {
StringTokenizer st = new StringTokenizer(str, ":");
String current;
while (st.hasMoreTokens()) {
current = st.nextToken();
s.add(current);
}
}
Add a trailing file separator, if not found. Remove superfluous
file separators if any. Preserve the front double file separator for
UNC paths.
Params: - path – Path under consideration.
Returns: String Properly constructed path string.
/**
* Add a trailing file separator, if not found. Remove superfluous
* file separators if any. Preserve the front double file separator for
* UNC paths.
*
* @param path Path under consideration.
* @return String Properly constructed path string.
*/
protected static String addTrailingFileSep(String path) {
String fs = System.getProperty("file.separator");
String dblfs = fs + fs;
int indexDblfs;
while ((indexDblfs = path.indexOf(dblfs, 1)) >= 0) {
path = path.substring(0, indexDblfs) +
path.substring(indexDblfs + fs.length());
}
if (!path.endsWith(fs))
path += fs;
return path;
}
Argument for command-line option --allow-script-in-comments
. Allow JavaScript in doc comments. /**
* Argument for command-line option {@code --allow-script-in-comments}.
* Allow JavaScript in doc comments.
*/
boolean allowScriptInComments() {
return allowScriptInComments;
}
Argument for command-line option -docfilessubdirs
. True if we should recursively copy the doc-file subdirectories /**
* Argument for command-line option {@code -docfilessubdirs}.
* True if we should recursively copy the doc-file subdirectories
*/
public boolean copyDocfileSubdirs() {
return copyDocfileSubdirs;
}
Arguments for command-line option -tag
and -taglet
. /**
* Arguments for command-line option {@code -tag} and {@code -taglet}.
*/
LinkedHashSet<List<String>> customTagStrs() {
return customTagStrs;
}
Argument for command-line option -d
. Destination directory name, in which doclet will generate the entire documentation. Default is current directory. /**
* Argument for command-line option {@code -d}.
* Destination directory name, in which doclet will generate the entire
* documentation. Default is current directory.
*/
String destDirName() {
return destDirName;
}
Argument for command-line option --disable-javafx-strict-checks
. Primarily used to disable strict checks in the regression tests allowing those tests to be executed successfully, for instance, with OpenJDK builds which may not contain FX libraries. /**
* Argument for command-line option {@code --disable-javafx-strict-checks}.
* Primarily used to disable strict checks in the regression
* tests allowing those tests to be executed successfully, for
* instance, with OpenJDK builds which may not contain FX libraries.
*/
boolean disableJavaFxStrictChecks() {
return disableJavaFxStrictChecks;
}
Argument for command-line option -docencoding
. Encoding for this document. Default is default encoding for this platform. /**
* Argument for command-line option {@code -docencoding}.
* Encoding for this document. Default is default encoding for this
* platform.
*/
public String docEncoding() {
return docEncoding;
}
public void setDocEncoding(String docEncoding) {
this.docEncoding = docEncoding;
}
Argument for command-line option ???
. Destination directory name, in which doclet will copy the doc-files to. /**
* Argument for command-line option {@code ???}.
* Destination directory name, in which doclet will copy the doc-files to.
*/
String docFileDestDirName() {
return docFileDestDirName;
}
Argument for hidden command-line option --dump-on-error
. /**
* Argument for hidden command-line option {@code --dump-on-error}.
*/
boolean dumpOnError() {
return dumpOnError;
}
Argument for command-line option -encoding
. Encoding for this document. Default is default encoding for this platform. /**
* Argument for command-line option {@code -encoding}.
* Encoding for this document. Default is default encoding for this
* platform.
*/
public String encoding() {
return encoding;
}
Argument for command-line option -excludedocfilessubdir
. The set of doc-file subdirectories to exclude. /**
* Argument for command-line option {@code -excludedocfilessubdir}.
* The set of doc-file subdirectories to exclude.
*/
Set<String> excludedDocFileDirs() {
return excludedDocFileDirs;
}
Argument for command-line option -noqualifier
. The set of qualifiers to exclude. /**
* Argument for command-line option {@code -noqualifier}.
* The set of qualifiers to exclude.
*/
Set<String> excludedQualifiers() {
return excludedQualifiers;
}
Arguments for command-line option -group
/**
* Arguments for command-line option {@code -group}
*/
List<Utils.Pair<String, String>> groupPairs() {
return groupPairs;
}
Argument for command-line option --javafx
or -javafx
. Generate documentation for JavaFX getters and setters automatically by copying it from the appropriate property definition. /**
* Argument for command-line option {@code --javafx} or {@code -javafx}.
* Generate documentation for JavaFX getters and setters automatically
* by copying it from the appropriate property definition.
*/
public boolean javafx() {
return javafx;
}
public void setJavaFX(boolean javafx) {
this.javafx = javafx;
}
Argument for command-line option -keywords
. True if user wants to add member names as meta keywords. Set to false because meta keywords are ignored in general by most Internet search engines. /**
* Argument for command-line option {@code -keywords}.
* True if user wants to add member names as meta keywords.
* Set to false because meta keywords are ignored in general
* by most Internet search engines.
*/
public boolean keywords() {
return keywords;
}
Arguments for command-line option -link
. /**
* Arguments for command-line option {@code -link}.
*/
List<String> linkList() {
return linkList;
}
Arguments for command-line option -linkoffline
. /**
* Arguments for command-line option {@code -linkoffline}.
*/
List<Utils.Pair<String, String>> linkOfflineList() {
return linkOfflineList;
}
Argument for command-line option -linksource
. True if we should generate browsable sources. /**
* Argument for command-line option {@code -linksource}.
* True if we should generate browsable sources.
*/
public boolean linkSource() {
return linkSource;
}
Argument for command-line option -nocomment
. True if user wants to suppress descriptions and tags. /**
* Argument for command-line option {@code -nocomment}.
* True if user wants to suppress descriptions and tags.
*/
public boolean noComment() {
return noComment;
}
Argument for command-line option -nodeprecated
. Don't generate deprecated API information at all if -nodeprecated option is used. noDeprecated
is set to true
if -nodeprecated
option is used. Default is generate deprecated API information. /**
* Argument for command-line option {@code -nodeprecated}.
* Don't generate deprecated API information at all if -nodeprecated
* option is used. {@code noDeprecated} is set to {@code true} if
* {@code -nodeprecated} option is used.
* Default is generate deprecated API information.
*/
public boolean noDeprecated() {
return noDeprecated;
}
Argument for command-line option -nosince
. True if command-line option -nosince"
is used. Default value is false. /**
* Argument for command-line option {@code -nosince}.
* True if command-line option {@code -nosince"} is used.
* Default value is false.
*/
public boolean noSince() {
return noSince;
}
Argument for command-line option -notimestamp
. True if user wants to suppress time stamp in output. Default is false. /**
* Argument for command-line option {@code -notimestamp}.
* True if user wants to suppress time stamp in output.
* Default is false.
*/
public boolean noTimestamp() {
return noTimestamp;
}
Argument for command-line option -quiet
. Suppress all messages /**
* Argument for command-line option {@code -quiet}.
* Suppress all messages
*/
boolean quiet() {
return quiet;
}
Argument for command-line option -serialwarn
. This is true if option "-serialwarn" is used. Default value is false to suppress excessive warnings about serial tag. /**
* Argument for command-line option {@code -serialwarn}.
* This is true if option "-serialwarn" is used. Default value is false to
* suppress excessive warnings about serial tag.
*/
public boolean serialWarn() {
return serialWarn;
}
Argument for command-line option -author
. Generate author specific information for all the classes if @author tag is used in the doc comment and if -author option is used. showauthor
is set to true if -author option is used.
Default is don't show author information.
/**
* Argument for command-line option {@code -author}.
* Generate author specific information for all the classes if @author
* tag is used in the doc comment and if -author option is used.
* <code>showauthor</code> is set to true if -author option is used.
* Default is don't show author information.
*/
public boolean showAuthor() {
return showAuthor;
}
Argument for command-line option --show-taglets
. Show taglets (internal debug switch) /**
* Argument for command-line option {@code --show-taglets}.
* Show taglets (internal debug switch)
*/
public boolean showTaglets() {
return showTaglets;
}
Argument for command-line option -version
. Generate version specific information for the all the classes if @version tag is used in the doc comment and if -version option is used. showVersion
is set to true if -version option is used. Default is don't show version information. /**
* Argument for command-line option {@code -version}.
* Generate version specific information for the all the classes
* if @version tag is used in the doc comment and if -version option is
* used. {@code showVersion} is set to true if -version option is
* used. Default is don't show version information.
*/
public boolean showVersion() {
return showVersion;
}
Argument for command-line option -sourcetab
. The specified amount of space between tab stops. /**
* Argument for command-line option {@code -sourcetab}.
* The specified amount of space between tab stops.
*/
public int sourceTabSize() {
return sourceTabSize;
}
Value for command-line option --override-methods summary
or --override-methods detail
. Specifies whether those methods that override a super-type's method with no changes to the API contract should be summarized in the footnote section. /**
* Value for command-line option {@code --override-methods summary}
* or {@code --override-methods detail}.
* Specifies whether those methods that override a super-type's method
* with no changes to the API contract should be summarized in the
* footnote section.
*/
public boolean summarizeOverriddenMethods() {
return summarizeOverriddenMethods;
}
Argument for command-line option -tagletpath
. The path to Taglets /**
* Argument for command-line option {@code -tagletpath}.
* The path to Taglets
*/
public String tagletPath() {
return tagletPath;
}
protected abstract static class Option implements Doclet.Option, Comparable<Option> {
private final String[] names;
private final String parameters;
private final String description;
private final int argCount;
protected Option(Resources resources, String name, int argCount) {
this(resources, null, name, argCount);
}
protected Option(Resources resources, String keyBase, String name, int argCount) {
this.names = name.trim().split("\\s+");
if (keyBase == null) {
keyBase = "doclet.usage." + names[0].toLowerCase().replaceAll("^-+", "");
}
String desc = getOptionsMessage(resources, keyBase + ".description");
if (desc.isEmpty()) {
this.description = "<MISSING KEY>";
this.parameters = "<MISSING KEY>";
} else {
this.description = desc;
this.parameters = getOptionsMessage(resources, keyBase + ".parameters");
}
this.argCount = argCount;
}
protected Option(Resources resources, String name) {
this(resources, name, 0);
}
private String getOptionsMessage(Resources resources, String key) {
try {
return resources.getText(key);
} catch (MissingResourceException ignore) {
return "";
}
}
@Override
public String getDescription() {
return description;
}
@Override
public Kind getKind() {
return Kind.STANDARD;
}
@Override
public List<String> getNames() {
return Arrays.asList(names);
}
@Override
public String getParameters() {
return parameters;
}
@Override
public String toString() {
return Arrays.toString(names);
}
@Override
public int getArgumentCount() {
return argCount;
}
public boolean matches(String option) {
for (String name : names) {
boolean matchCase = name.startsWith("--");
if (option.startsWith("--") && option.contains("=")) {
return name.equals(option.substring(option.indexOf("=") + 1));
} else if (matchCase) {
return name.equals(option);
}
return name.toLowerCase().equals(option.toLowerCase());
}
return false;
}
@Override
public int compareTo(Option that) {
return this.getNames().get(0).compareTo(that.getNames().get(0));
}
}
protected abstract static class XOption extends Option {
public XOption(Resources resources, String prefix, String name, int argCount) {
super(resources, prefix, name, argCount);
}
public XOption(Resources resources, String name, int argCount) {
super(resources, name, argCount);
}
public XOption(Resources resources, String name) {
this(resources, name, 0);
}
@Override
public Option.Kind getKind() {
return Kind.EXTENDED;
}
}
protected abstract static class Hidden extends Option {
public Hidden(Resources resources, String name, int argCount) {
super(resources, name, argCount);
}
public Hidden(Resources resources, String name) {
this(resources, name, 0);
}
@Override
public Option.Kind getKind() {
return Kind.OTHER;
}
}
}