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

jdk.javadoc.doclet.package-info Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2015, 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.  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.
 */

/**
 * The Doclet API provides an environment which, in conjunction with
 * the Language Model API and Compiler Tree API, allows clients
 * to inspect the source-level structures of programs and
 * libraries, including API comments embedded in the source.
 *
 * 

* Note: The declarations in this package supersede those * in the older package {@code com.sun.javadoc}. For details on the * mapping of old types to new types, see the * Migration Guide. *

* *

* Doclets are invoked by javadoc and this API can be used to write out * program information to files. For example, the standard doclet is * invoked by default, to generate HTML documentation. *

* The invocation is defined by the interface {@link jdk.javadoc.doclet.Doclet} * -- the {@link jdk.javadoc.doclet.Doclet#run(DocletEnvironment) run} interface * method, defines the entry point. *

 *    public boolean run(DocletEnvironment environment)
 * 
* The {@link jdk.javadoc.doclet.DocletEnvironment} instance holds the * environment that the doclet will be initialized with. From this environment * all other information can be extracted, in the form of * {@link javax.lang.model.element.Element elements}. One can further use the APIs and utilities * described by {@link javax.lang.model Language Model API} to query Elements and Types. *

* * *

Terminology

* *
*
Selected
*
An element is considered to be selected, if the * selection controls allow it * to be documented. (Note that synthetic elements are never * selected.) *
* *
Specified
*
The set of elements specified by the user are considered to be specified * elements. Specified elements provide the starting points * for determining the included elements to be documented. *
* *
Included
*
An element is considered to be included, if it is * specified if it contains a specified element, * or it is enclosed in a specified element, and is selected. * Included elements will be documented. *
* *
*

* *

Options

* Javadoc selection control can be specified with these options * as follows: *
    *
  • {@code --show-members:value} and {@code --show-types:value} can * be used to filter the members, with the following values: *
      *
    • public -- considers only public elements *
    • protected -- considers public and protected elements *
    • package -- considers public, protected and package private elements *
    • private -- considers all elements *
    * *
  • {@code --show-packages:value} "exported" or "all" can be used * to consider only exported packages or all packages within a module. * *
  • {@code --show-module-contents:value} can be used to specify the level at * module declarations could be documented. A value of "api" indicates API * level documentation, and "all" indicates detailed documentation. *
* The following options can be used to specify the elements to be documented: *
    *
  • {@code --module} documents the specified modules. * *
  • {@code --expand-requires:value} expand the set of modules to be documented * by including some or all of the modules dependencies. The value may be * one of: *
      *
    • transitive -- each module specified explicitly on the command line is * expanded to include the closure of its transitive dependencies *
    • all -- each module specified explicitly on the command line * is expanded to include the closure of its transitive dependencies, * and also all of its direct dependencies *
    * By default, only the specified modules will be considered, without expansion * of the module dependencies. * *
  • {@code packagenames} can be used to specify packages. *
  • {@code -subpackages} can be used to recursively load packages. *
  • {@code -exclude} can be used exclude package directories. *
  • {@code sourcefilenames} can be used to specify source file names. *
*

* *

Interactions with older options.

* * The new {@code --show-*} options provide a more detailed replacement * for the older options -public, -protected, -package, -private. * Alternatively, the older options can continue to be used as shorter * forms for combinations of the new options, as described below:
Short form options mapping
Older optionEquivalent to these values with the new option
{@code --show-members}{@code --show-types}{@code --show-packages}{@code --show-module-contents}
{@code -public}publicpublicexportedapi
{@code -protected}protectedprotectedexportedapi
{@code -package}packagepackageallall
{@code -private}privateprivateallall
*

* * A qualified element name is one that has its package * name prepended to it, such as {@code java.lang.String}. A non-qualified * name has no package name, such as {@code String}. *

* * *

Example

* * The following is an example doclet that displays information of a class * and its members, supporting an option. *
 * // note imports deleted for clarity
 * public class Example implements Doclet {
 *    Reporter reporter;
 *    @Override
 *    public void init(Locale locale, Reporter reporter) {
 *        reporter.print(Kind.NOTE, "Doclet using locale: " + locale);
 *        this.reporter = reporter;
 *    }
 *
 *    public void printElement(DocTrees trees, Element e) {
 *        DocCommentTree docCommentTree = trees.getDocCommentTree(e);
 *        if (docCommentTree != null) {
 *            System.out.println("Element (" + e.getKind() + ": "
 *                    + e + ") has the following comments:");
 *            System.out.println("Entire body: " + docCommentTree.getFullBody());
 *            System.out.println("Block tags: " + docCommentTree.getBlockTags());
 *        }
 *    }
 *
 *    @Override
 *    public boolean run(DocletEnvironment docEnv) {
 *        reporter.print(Kind.NOTE, "overviewfile: " + overviewfile);
 *        // get the DocTrees utility class to access document comments
 *        DocTrees docTrees = docEnv.getDocTrees();
 *
 *        // location of an element in the same directory as overview.html
 *        try {
 *            Element e = ElementFilter.typesIn(docEnv.getSpecifiedElements()).iterator().next();
 *            DocCommentTree docCommentTree
 *                    = docTrees.getDocCommentTree(e, overviewfile);
 *            if (docCommentTree != null) {
 *                System.out.println("Overview html: " + docCommentTree.getFullBody());
 *            }
 *        } catch (IOException missing) {
 *            reporter.print(Kind.ERROR, "No overview.html found.");
 *        }
 *
 *        for (TypeElement t : ElementFilter.typesIn(docEnv.getIncludedElements())) {
 *            System.out.println(t.getKind() + ":" + t);
 *            for (Element e : t.getEnclosedElements()) {
 *                printElement(docTrees, e);
 *            }
 *        }
 *        return true;
 *    }
 *
 *    @Override
 *    public String getName() {
 *        return "Example";
 *    }
 *
 *    private String overviewfile;
 *
 *    @Override
 *    public Set<? extends Option> getSupportedOptions() {
 *        Option[] options = {
 *            new Option() {
 *                private final List<String> someOption = Arrays.asList(
 *                        "-overviewfile",
 *                        "--overview-file",
 *                        "-o"
 *                );
 *
 *                @Override
 *                public int getArgumentCount() {
 *                    return 1;
 *                }
 *
 *                @Override
 *                public String getDescription() {
 *                    return "an option with aliases";
 *                }
 *
 *                @Override
 *                public Option.Kind getKind() {
 *                    return Option.Kind.STANDARD;
 *                }
 *
 *                @Override
 *                public List<String> getNames() {
 *                    return someOption;
 *                }
 *
 *                @Override
 *                public String getParameters() {
 *                    return "file";
 *                }
 *
 *                @Override
 *                public boolean process(String opt, List<String> arguments) {
 *                    overviewfile = arguments.get(0);
 *                    return true;
 *                }
 *            }
 *        };
 *        return new HashSet<>(Arrays.asList(options));
 *    }
 *
 *    @Override
 *    public SourceVersion getSupportedSourceVersion() {
 *        // support the latest release
 *        return SourceVersion.latest();
 *    }
 * }
 * 
*

* This doclet can be invoked with a command line, such as: *

 *     javadoc -doclet Example \
 *       -overviewfile overview.html \
 *       -sourcepath source-location \
 *       source-location/Example.java
 * 
* *

Migration Guide

* *

Many of the types in the old {@code com.sun.javadoc} API do not have equivalents in this * package. Instead, types in the {@code javax.lang.model} and {@code com.sun.source} APIs * are used instead. * *

The following table gives a guide to the mapping from old types to their replacements. * In some cases, there is no direct equivalent. * *

Guide for mapping old types to new types
Old TypeNew Type
AnnotatedTypejavax.lang.model.type.Type
AnnotationDescjavax.lang.model.element.AnnotationMirror
AnnotationDesc.ElementValuePairjavax.lang.model.element.AnnotationValue
AnnotationTypeDocjavax.lang.model.element.TypeElement
AnnotationTypeElementDocjavax.lang.model.element.ExecutableElement
AnnotationValuejavax.lang.model.element.AnnotationValue
ClassDocjavax.lang.model.element.TypeElement
ConstructorDocjavax.lang.model.element.ExecutableElement
Docjavax.lang.model.element.Element
DocErrorReporterjdk.javadoc.doclet.Reporter
Docletjdk.javadoc.doclet.Doclet
ExecutableMemberDocjavax.lang.model.element.ExecutableElement
FieldDocjavax.lang.model.element.VariableElement
LanguageVersionjavax.lang.model.SourceVersion
MemberDocjavax.lang.model.element.Element
MethodDocjavax.lang.model.element.ExecutableElement
PackageDocjavax.lang.model.element.PackageElement
Parameterjavax.lang.model.element.VariableElement
ParameterizedTypejavax.lang.model.type.DeclaredType
ParamTagcom.sun.source.doctree.ParamTree
ProgramElementDocjavax.lang.model.element.Element
RootDocjdk.javadoc.doclet.DocletEnvironment
SeeTagcom.sun.source.doctree.LinkTree
com.sun.source.doctree.SeeTree
SerialFieldTagcom.sun.source.doctree.SerialFieldTree
SourcePositioncom.sun.source.util.SourcePositions
Tagcom.sun.source.doctree.DocTree
ThrowsTagcom.sun.source.doctree.ThrowsTree
Typejavax.lang.model.type.Type
TypeVariablejavax.lang.model.type.TypeVariable
WildcardTypejavax.lang.model.type.WildcardType *
* * @see jdk.javadoc.doclet.Doclet * @see jdk.javadoc.doclet.DocletEnvironment * @since 9 */ package jdk.javadoc.doclet;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy