All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.gradle.external.javadoc.CoreJavadocOptions Maven / Gradle / Ivy

There is a newer version: 8.11.1
Show newest version
/*
 * Copyright 2010 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.gradle.external.javadoc;

import org.gradle.external.javadoc.internal.JavadocOptionFile;
import org.gradle.external.javadoc.internal.JavadocOptionFileOptionInternal;
import org.gradle.external.javadoc.internal.JavadocOptionFileOptionInternalAdapter;
import org.gradle.internal.Cast;
import org.gradle.process.ExecSpec;
import org.gradle.util.GFileUtils;
import org.gradle.util.GUtil;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Provides the core Javadoc Options. That is, provides the options which are not doclet specific.
 */
public abstract class CoreJavadocOptions implements MinimalJavadocOptions {
    protected final JavadocOptionFile optionFile;

    private final JavadocOptionFileOption overview;
    private final JavadocOptionFileOption memberLevel;
    private final JavadocOptionFileOption doclet;
    private final JavadocOptionFileOption> docletpath;
    private final JavadocOptionFileOption source; // TODO bind with the sourceCompatibility property
    private final JavadocOptionFileOption> classpath; // TODO link to runtime configuration ?
    private final JavadocOptionFileOption> bootClasspath;
    private final JavadocOptionFileOption> extDirs;
    private final JavadocOptionFileOption outputLevel;
    private final JavadocOptionFileOption breakIterator;
    private final JavadocOptionFileOption locale;
    private final JavadocOptionFileOption encoding;
    private final OptionLessJavadocOptionFileOption> sourceNames;
    private List jFlags = new ArrayList();
    private List optionFiles = new ArrayList();

    public CoreJavadocOptions() {
        this(new JavadocOptionFile());
    }

    protected CoreJavadocOptions(JavadocOptionFile optionFile) {
        this.optionFile = optionFile;

        overview = addStringOption("overview");
        memberLevel = addEnumOption("memberLevel");
        doclet = addStringOption("doclet");
        docletpath = addPathOption("docletpath");
        source = addStringOption("source");
        classpath = addPathOption("classpath");
        bootClasspath = addPathOption("bootclasspath");
        extDirs = addPathOption("extdirs");
        outputLevel = addEnumOption("outputLevel", JavadocOutputLevel.QUIET);
        breakIterator = addBooleanOption("breakiterator");
        locale = addStringOption("locale");
        encoding = addStringOption("encoding");

        sourceNames = optionFile.getSourceNames();
    }

    protected CoreJavadocOptions(CoreJavadocOptions original, JavadocOptionFile optionFile) {
        this.optionFile = optionFile;

        overview = optionFile.getOption("overview");
        memberLevel = optionFile.getOption("memberLevel");
        doclet = optionFile.getOption("doclet");
        docletpath = optionFile.getOption("docletpath");
        source = optionFile.getOption("source");
        classpath = optionFile.getOption("classpath");
        bootClasspath = optionFile.getOption("bootclasspath");
        extDirs = optionFile.getOption("extdirs");
        outputLevel = optionFile.getOption("outputLevel");
        breakIterator = optionFile.getOption("breakiterator");
        locale = optionFile.getOption("locale");
        encoding = optionFile.getOption("encoding");

        sourceNames = optionFile.getSourceNames();
        jFlags = original.jFlags;
        optionFiles = original.optionFiles;
    }

    /**
     * -overview  path\filename
     * 

* Specifies that javadoc should retrieve the text for the overview documentation from * the "source" file specified by path/filename and place it on the Overview page (overview-summary.html). * The path/filename is relative to the -sourcepath. *

* While you can use any name you want for filename and place it anywhere you want for path, * a typical thing to do is to name it overview.html and place it in the source tree at the directory that contains the topmost package directories. * In this location, no path is needed when documenting packages, since -sourcepath will point to this file. * For example, if the source tree for the java.lang package is C:\src\classes\java\lang\, * then you could place the overview file at C:\src\classes\overview.html. See Real World Example. *

* For information about the file specified by path/filename, see overview comment file. *

* Note that the overview page is created only if you pass into javadoc two or more package names. * For further explanation, see HTML Frames.) *

* The title on the overview page is set by -doctitle. */ @Override public String getOverview() { return overview.getValue(); } @Override public void setOverview(String overview) { this.overview.setValue(overview); } /** * Fluent setter for the overview option. * @param overview The new overview. * @return The MinimalJavadocOptions object. */ @Override public MinimalJavadocOptions overview(String overview) { setOverview(overview); return this; } /** * Switch to set the members that should be included in the Javadoc. (-public, -protected, -package, -private) */ @Override public JavadocMemberLevel getMemberLevel() { return memberLevel.getValue(); } @Override public void setMemberLevel(JavadocMemberLevel memberLevel) { this.memberLevel.setValue(memberLevel); } @Override public MinimalJavadocOptions showFromPublic() { setMemberLevel(JavadocMemberLevel.PUBLIC); return this; } @Override public MinimalJavadocOptions showFromProtected() { setMemberLevel(JavadocMemberLevel.PROTECTED); return this; } @Override public MinimalJavadocOptions showFromPackage() { setMemberLevel(JavadocMemberLevel.PACKAGE); return this; } @Override public MinimalJavadocOptions showFromPrivate() { setMemberLevel(JavadocMemberLevel.PRIVATE); return this; } @Override public MinimalJavadocOptions showAll() { return showFromPrivate(); } /** * -doclet class *

* Specifies the class file that starts the doclet used in generating the documentation. Use the fully-qualified name. * This doclet defines the content and formats the output. If the -doclet option is not used, * javadoc uses the standard doclet for generating the default HTML format. * This class must contain the start(Root) method. * The path to this starting class is defined by the -docletpath option. *

* For example, to call the MIF doclet, use: *

* -doclet com.sun.tools.doclets.mif.MIFDoclet *

* For full, working examples of running a particular doclet, see Running the MIF Doclet. */ @Override public String getDoclet() { return doclet.getValue(); } @Override public void setDoclet(String doclet) { this.doclet.setValue(doclet); } @Override public MinimalJavadocOptions doclet(String doclet) { setDoclet(doclet); return this; } /** * -docletpath classpathlist *

* Specifies the path to the doclet starting class file (specified with the -doclet option) and any jar files it depends on. * If the starting class file is in a jar file, then this specifies the path to that jar file, as shown in the example below. * You can specify an absolute path or a path relative to the current directory. If classpathlist contains multiple paths or jar files, * they should be separated with a colon (:) on Solaris and a semi-colon (;) on Windows. * This option is not necessary if the doclet starting class is already in the search path. *

* Example of path to jar file that contains the starting doclet class file. Notice the jar filename is included. *

* -docletpath C:/user/mifdoclet/lib/mifdoclet.jar *

* Example of path to starting doclet class file. Notice the class filename is omitted. *

* -docletpath C:/user/mifdoclet/classes/com/sun/tools/doclets/mif/ *

* For full, working examples of running a particular doclet, see Running the MIF Doclet. */ @Override public List getDocletpath() { return docletpath.getValue(); } @Override public void setDocletpath(List docletpath) { this.docletpath.setValue(docletpath); } @Override public MinimalJavadocOptions docletpath(File... docletpath) { this.docletpath.getValue().addAll(Arrays.asList(docletpath)); return this; } /** * -source release *

* Specifies the version of source code accepted. The following values for release are allowed: *

* 1.5 javadoc accepts code containing generics and other language features introduced in JDK 1.5.
* The compiler defaults to the 1.5 behavior if the -source flag is not used.
* 1.4 javadoc accepts code containing assertions, which were introduced in JDK 1.4.
* 1.3 javadoc does not support assertions, generics, or other language features introduced after JDK 1.3. *

* Use the value of release corresponding to that used when compiling the code with javac. */ @Override public String getSource() { return source.getValue(); } @Override public void setSource(String source) { this.source.setValue(source); } @Override public MinimalJavadocOptions source(String source) { setSource(source); return this; } /** * -classpath classpathlist *

* Specifies the paths where javadoc will look for referenced classes (.class files) * -- these are the documented classes plus any classes referenced by those classes. * The classpathlist can contain multiple paths by separating them with a semicolon (;). * The Javadoc tool will search in all subdirectories of the specified paths. * Follow the instructions in class path documentation for specifying classpathlist. *

* If -sourcepath is omitted, the Javadoc tool uses -classpath to find the source files as well as * class files (for backward compatibility). Therefore, if you want to search for source and class files in separate paths, * use both -sourcepath and -classpath. *

* For example, if you want to document com.mypackage, whose source files reside in the directory C:/user/src/com/mypackage, * and if this package relies on a library in C:/user/lib, you would specify: *

* javadoc -classpath /user/lib -sourcepath /user/src com.mypackage *

* As with other tools, if you do not specify -classpath, the Javadoc tool uses the CLASSPATH environment variable, * if it is set. If both are not set, the Javadoc tool searches for classes from the current directory. *

* For an in-depth description of how the Javadoc tool uses -classpath to find user classes as it relates to extension classes and * bootstrap classes, see How Classes Are Found. */ @Override public List getClasspath() { return classpath.getValue(); } @Override public void setClasspath(List classpath) { this.classpath.setValue(classpath); } @Override public MinimalJavadocOptions classpath(List classpath) { this.classpath.getValue().addAll(classpath); return this; } @Override public MinimalJavadocOptions classpath(File... classpath) { this.classpath.getValue().addAll(Arrays.asList(classpath)); return this; } /** * -bootclasspath classpathlist * Specifies the paths where the boot classes reside. These are nominally the Java platform classes. * The bootclasspath is part of the search path the Javadoc tool will use to look up source and class files. * See How Classes Are Found. for more details. Separate directories in classpathlist with semicolons (;). */ @Override public List getBootClasspath() { return bootClasspath.getValue(); } @Override public void setBootClasspath(List bootClasspath) { this.bootClasspath.setValue(bootClasspath); } @Override public MinimalJavadocOptions bootClasspath(File... bootClasspath) { this.bootClasspath.getValue().addAll(Arrays.asList(bootClasspath)); return this; } /** * -extdirs dirlist *

* Specifies the directories where extension classes reside. * These are any classes that use the Java Extension mechanism. * The extdirs is part of the search path the Javadoc tool will use to look up source and class files. * See -classpath (above) for more details. Separate directories in dirlist with semicolons (;). */ @Override public List getExtDirs() { return extDirs.getValue(); } @Override public void setExtDirs(List extDirs) { this.extDirs.setValue(extDirs); } @Override public MinimalJavadocOptions extDirs(File... extDirs) { this.extDirs.getValue().addAll(Arrays.asList(extDirs)); return this; } /** * Control the Javadoc output level (-verbose or -quiet). */ @Override public JavadocOutputLevel getOutputLevel() { return outputLevel.getValue(); } @Override public void setOutputLevel(JavadocOutputLevel outputLevel) { this.outputLevel.setValue(outputLevel); } @Override public MinimalJavadocOptions verbose() { setOutputLevel(JavadocOutputLevel.VERBOSE); return this; } @Override public boolean isVerbose() { return outputLevel.getValue() == JavadocOutputLevel.VERBOSE; } @Override public MinimalJavadocOptions quiet() { setOutputLevel(JavadocOutputLevel.QUIET); return this; } /** * -breakiterator *

* Uses the internationalized sentence boundary of java.text.BreakIterator to determine the end of the first sentence * for English (all other locales already use BreakIterator), rather than an English language, locale-specific algorithm. * By first sentence, we mean the first sentence in the main description of a package, class or member. * This sentence is copied to the package, class or member summary, and to the alphabetic index. *

* From JDK 1.2 forward, the BreakIterator class is already used to determine the end of sentence for all languages but English. * Therefore, the -breakiterator option has no effect except for English from 1.2 forward. English has its own default algorithm: *

* * English default sentence-break algorithm - Stops at a period followed by a space or a HTML block tag, such as <P>. *

* * Breakiterator sentence-break algorithm - In general, stops at a period, * question mark or exclamation mark followed by a space if the next word starts with a capital letter. * This is meant to handle most abbreviations (such as "The serial no. is valid", but won't handle "Mr. Smith"). * Doesn't stop at HTML tags or sentences that begin with numbers or symbols. * Stops at the last period in "../filename", even if embedded in an HTML tag. *

* NOTE: We have removed from 1.5.0 the breakiterator warning messages that were in 1.4.x and * have left the default sentence-break algorithm unchanged. That is, the -breakiterator option is not the default in 1.5.0, * nor do we expect it to become the default. This is a reversal from our former intention that * the default would change in the "next major release" (1.5.0). * This means if you have not modified your source code to eliminate the breakiterator warnings in 1.4.x, * then you don't have to do anything, and the warnings go away starting with 1.5.0. * The reason for this reversal is because any benefit to having breakiterator become the default * would be outweighed by the incompatible source change it would require. * We regret any extra work and confusion this has caused. */ @Override public boolean isBreakIterator() { return breakIterator.getValue(); } @Override public void setBreakIterator(boolean breakIterator) { this.breakIterator.setValue(breakIterator); } @Override public MinimalJavadocOptions breakIterator(boolean breakIterator) { setBreakIterator(breakIterator); return this; } @Override public MinimalJavadocOptions breakIterator() { setBreakIterator(true); return this; } /** * -locale language_country_variant *

* Important - The -locale option must be placed ahead (to the left) of any options provided by the standard doclet or * any other doclet. Otherwise, the navigation bars will appear in English. * This is the only command-line option that is order-dependent. *

* Specifies the locale that javadoc uses when generating documentation. * The argument is the name of the locale, as described in java.util.Locale documentation, such as * en_US (English, United States) or en_US_WIN (Windows variant). *

* Specifying a locale causes javadoc to choose the resource files of that locale for messages * (strings in the navigation bar, headings for lists and tables, help file contents, * comments in stylesheet.css, and so forth). * It also specifies the sorting order for lists sorted alphabetically, * and the sentence separator to determine the end of the first sentence. * It does not determine the locale of the doc comment text specified in the source files of the documented classes. */ @Override public String getLocale() { return locale.getValue(); } @Override public void setLocale(String locale) { this.locale.setValue(locale); } @Override public MinimalJavadocOptions locale(String locale) { setLocale(locale); return this; } /** * -encoding name *

* Specifies the encoding name of the source files, such as EUCJIS/SJIS. If this option is not specified, the platform default converter is used. *

* Also see -docencoding and -charset. */ @Override public String getEncoding() { return encoding.getValue(); } @Override public void setEncoding(String encoding) { this.encoding.setValue(encoding); } @Override public MinimalJavadocOptions encoding(String encoding) { setEncoding(encoding); return this; } @Override public List getSourceNames() { return sourceNames.getValue(); } @Override public void setSourceNames(List sourceNames) { this.sourceNames.setValue(sourceNames); } @Override public MinimalJavadocOptions sourceNames(String... sourceNames) { this.sourceNames.getValue().addAll(Arrays.asList(sourceNames)); return this; } /** * -Jflag *

* Passes flag directly to the runtime system java that runs javadoc. * Notice there must be no space between the J and the flag. For example, * if you need to ensure that the system sets aside 32 megabytes of memory in which to process the generated documentation, * then you would call the -Xmx option of java as follows (-Xms is optional, as it only sets the size of initial memory, * which is useful if you know the minimum amount of memory required): *

* javadoc -J-Xmx32m -J-Xms32m com.mypackage *

* To tell what version of javadoc you are using, call the "-version" option of java: *

* javadoc -J-version * java version "1.2" * Classic VM (build JDK-1.2-V, green threads, sunwjit) *

* (The version number of the standard doclet appears in its output stream.) */ @Override public List getJFlags() { return jFlags; } @Override public void setJFlags(List jFlags) { this.jFlags = jFlags; } @Override public MinimalJavadocOptions jFlags(String... jFlags) { this.jFlags.addAll(Arrays.asList(jFlags)); return this; } @Override public void contributeCommandLineOptions(ExecSpec execHandleBuilder) { execHandleBuilder .args(GUtil.prefix("-J", jFlags)) // J flags can not be set in the option file .args(GUtil.prefix("@", GFileUtils.toPaths(optionFiles))); // add additional option files } @Override public List getOptionFiles() { return optionFiles; } @Override public void setOptionFiles(List optionFiles) { this.optionFiles = optionFiles; } @Override public MinimalJavadocOptions optionFiles(File... argumentFiles) { this.optionFiles.addAll(Arrays.asList(argumentFiles)); return this; } @Override public final void write(File outputFile) throws IOException { optionFile.write(outputFile); } public JavadocOptionFileOption addOption(final JavadocOptionFileOption option) { if (option instanceof JavadocOptionFileOptionInternal) { return optionFile.addOption(Cast.>uncheckedCast(option)); } return optionFile.addOption(new JavadocOptionFileOptionInternalAdapter(option)); } public JavadocOptionFileOption addStringOption(String option) { return optionFile.addStringOption(option); } public JavadocOptionFileOption addStringOption(String option, String value) { return optionFile.addStringOption(option, value); } public > JavadocOptionFileOption addEnumOption(String option) { return optionFile.addEnumOption(option); } public > JavadocOptionFileOption addEnumOption(String option, T value) { return optionFile.addEnumOption(option, value); } public JavadocOptionFileOption> addPathOption(String option) { return optionFile.addPathOption(option); } public JavadocOptionFileOption> addPathOption(String option, String joinBy) { return optionFile.addPathOption(option, joinBy); } public JavadocOptionFileOption> addStringsOption(String option) { return optionFile.addStringsOption(option); } /** * Adds an option that will have multiple values joined by the provided separator. *

* {@code addStringsOption("foo", ",").setValue(["a", "b", "c"])} will produce the command-line *

*
     *     -foo 'a,b,c'
     * 
* @param option command-line option * @param joinBy separator */ public JavadocOptionFileOption> addStringsOption(String option, String joinBy) { return optionFile.addStringsOption(option, joinBy); } /** * Adds an option that will appear multiple times to the javadoc tool. Each line can have one value. *

* {@code addMultilineStringsOption("foo").setValue(["a", "b", "c"])} will produce the command-line *

*
     *     -foo 'a'
     *     -foo 'b'
     *     -foo 'c'
     * 
* @param option command-line option */ public JavadocOptionFileOption> addMultilineStringsOption(String option) { return optionFile.addMultilineStringsOption(option); } /** * Adds an option that will appear multiple times to the javadoc tool. Each line can have more than one value separated by spaces. * *

* {@code addMultilineMultiValueOption("foo").setValue([ ["a"], ["b", "c"] ])} will produce the command-line *

*
     *     -foo 'a'
     *     -foo 'b' 'c'
     * 
* @param option command-line option * * @since 3.5 */ public JavadocOptionFileOption>> addMultilineMultiValueOption(String option) { return optionFile.addMultilineMultiValueOption(option); } public JavadocOptionFileOption addBooleanOption(String option) { return optionFile.addBooleanOption(option); } public JavadocOptionFileOption addBooleanOption(String option, boolean value) { return optionFile.addBooleanOption(option, value); } public JavadocOptionFileOption addFileOption(String option) { return optionFile.addFileOption(option); } public JavadocOptionFileOption addFileOption(String option, File value) { return optionFile.addFileOption(option, value); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy