Spec-Zone.ru › OpenJDK 27

Package jdk.javadoc.doclet

package jdk.javadoc.doclet
API Doclet предоставляет среду, которая совместно с API языковой модели и API дерева компилятора позволяет клиентам изучать структуры программ и библиотек на уровне исходного кода, включая комментарии API, встроенные в исходный код.

Стандартный Doclet standard doclet можно использовать для создания документации в формате HTML. Он поддерживает пользовательские taglets, которые можно использовать для создания настраиваемого вывода для пользовательских тегов в комментариях документации.

Примечание: Объявления в этом пакете заменяют объявления из старого пакета com.sun.javadoc. Сведения о соответствии старых типов новым см. в руководстве по миграции.

Doclet вызываются командой javadoc, и этот API можно использовать для записи информации о программе в файлы. Например, по умолчанию вызывается стандартный Doclet для создания документации в формате HTML.

Вызов определяется интерфейсом Doclet -- метод интерфейса run задает точку входа.

   public boolean run(DocletEnvironment environment)
Экземпляр DocletEnvironment содержит среду, с которой будет инициализирован Doclet. Из этой среды можно извлечь все остальные сведения в виде объектов elements. Для запросов к элементам и типам можно также использовать API и утилиты, описанные в Language Model API.

Терминология

Выбранный
Элемент считается выбранным, если параметры выбора позволяют документировать его. (Обратите внимание: синтетические элементы никогда не выбираются.)
Заданный
Множество элементов, заданных пользователем, считается заданными элементами. Заданные элементы служат отправными точками для определения включенных элементов, подлежащих документированию.
Включенный
Элемент считается включенным, если он выбран и выполняется любое из следующих условий:
  • элемент задан; или
  • элемент содержит заданный элемент; или
  • элемент заключен в заданный элемент.
Включенные элементы будут документированы.

Параметры

Параметры выбора Javadoc можно задать с помощью следующих параметров:
  • --show-members:value и --show-types:value можно использовать для фильтрации членов, указав одно из следующих значений:
    • public -- учитываются только общедоступные элементы
    • protected -- учитываются общедоступные и защищенные элементы
    • package -- учитываются общедоступные, защищенные и элементы с доступом в пределах пакета
    • private -- учитываются все элементы
  • --show-packages:value со значением "exported" или "all" позволяет учитывать только экспортируемые пакеты или все пакеты в модуле.
  • --show-module-contents:value позволяет задать уровень детализации документации объявлений модулей. Значение "api" указывает на документацию уровня API, а "all" — на подробную документацию.
Для указания элементов, которые нужно документировать, можно использовать следующие параметры:
  • --module документирует заданные модули.
  • --expand-requires:value расширяет набор документируемых модулей, включая некоторые или все зависимости модулей. Значение может быть одним из следующих:
    • transitive -- каждый модуль, явно указанный в командной строке, расширяется за счет включения замыкания его транзитивных зависимостей
    • all -- каждый модуль, явно указанный в командной строке, расширяется за счет включения замыкания его транзитивных зависимостей, а также всех его непосредственных зависимостей
    По умолчанию учитываются только заданные модули, без расширения набора зависимостями модулей.
  • packagenames позволяет задать пакеты.
  • -subpackages позволяет рекурсивно загружать пакеты.
  • -exclude позволяет исключить каталоги пакетов.
  • sourcefilenames позволяет задать имена исходных файлов.

Взаимодействие со старыми параметрами.

Новые параметры --show-* представляют собой более подробную замену старых параметров -public, -protected, -package, -private. Кроме того, старые параметры можно продолжать использовать как сокращенные формы комбинаций новых параметров, как описано ниже:
Соответствие сокращенных форм параметров
Старый параметр Эквивалентные значения нового параметра
--show-members --show-types --show-packages --show-module-contents
-public public public exported api
-protected protected protected exported api
-package package package all all
-private private private all all

Полное имя элемента — это имя, перед которым указано имя пакета, например java.lang.String. Неполное имя не содержит имени пакета, например String.

Пример

Ниже приведен пример Doclet, который отображает сведения о классе и его членах и поддерживает параметр.
import com.sun.source.doctree.DocCommentTree;
import com.sun.source.util.DocTrees;
import jdk.javadoc.doclet.Doclet;
import jdk.javadoc.doclet.DocletEnvironment;
import jdk.javadoc.doclet.Reporter;

import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.ElementFilter;
import javax.tools.Diagnostic.Kind;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Locale;
import java.util.Set;

public class Example implements Doclet {
    private Reporter reporter;
    private PrintWriter stdout;
    private String overviewFile;

    @Override
    public void init(Locale locale, Reporter reporter) {
        reporter.print(Kind.NOTE, "Doclet using locale: " + locale);
        this.reporter = reporter;
        stdout = reporter.getStandardWriter();
    }

    @Override
    public String getName() {
        return "Example";
    }

    @Override
    public Set<? extends Option> getSupportedOptions() {
        Option[] options = {
            new Option() {
                private final List<String> someOption = List.of(
                        "--overview-file",
                        "-overviewfile",
                        "-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 Set.of(options);
    }

    @Override
    public SourceVersion getSupportedSourceVersion() {
        // support the latest release
        return SourceVersion.latest();
    }

    @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) {
                stdout.println("Overview html: " + docCommentTree.getFullBody());
            }
        } catch (IOException missing) {
            reporter.print(Kind.ERROR, "No overview.html found.");
        }

        for (TypeElement t : ElementFilter.typesIn(docEnv.getIncludedElements())) {
            stdout.println(t.getKind() + ":" + t);
            for (Element e : t.getEnclosedElements()) {
                printElement(docTrees, e);
            }
        }
        return true;
    }

    private void printElement(DocTrees trees, Element e) {
        DocCommentTree docCommentTree = trees.getDocCommentTree(e);
        if (docCommentTree != null) {
            stdout.println("Element (" + e.getKind() + ": "
                    + e + ") has the following comments:");
            stdout.println("Entire body: " + docCommentTree.getFullBody());
            stdout.println("Block tags: " + docCommentTree.getBlockTags());
        }
    }
}

Этот Doclet можно вызвать из командной строки, например:

javadoc -docletpath doclet-classes \
  -doclet Example \
  --overview-file overview.html \
  --source-path source-location \
  source-location/Example.java

Руководство по миграции

Многие типы из старого API com.sun.javadoc не имеют эквивалентов в этом пакете. Вместо них используются типы из API javax.lang.model и com.sun.source.

В следующей таблице приведено соответствие старых типов и их замен. В некоторых случаях прямого эквивалента нет.

Соответствие старых типов новым
Старый тип Новый тип
AnnotatedType javax.lang.model.type.TypeMirror
AnnotationDesc javax.lang.model.element.AnnotationMirror
AnnotationDesc.ElementValuePair javax.lang.model.element.AnnotationValue
AnnotationTypeDoc javax.lang.model.element.TypeElement
AnnotationTypeElementDoc javax.lang.model.element.ExecutableElement
AnnotationValue javax.lang.model.element.AnnotationValue
ClassDoc javax.lang.model.element.TypeElement
ConstructorDoc javax.lang.model.element.ExecutableElement
Doc javax.lang.model.element.Element
DocErrorReporter jdk.javadoc.doclet.Reporter
Doclet jdk.javadoc.doclet.Doclet
ExecutableMemberDoc javax.lang.model.element.ExecutableElement
FieldDoc javax.lang.model.element.VariableElement
LanguageVersion javax.lang.model.SourceVersion
MemberDoc javax.lang.model.element.Element
MethodDoc javax.lang.model.element.ExecutableElement
PackageDoc javax.lang.model.element.PackageElement
Parameter javax.lang.model.element.VariableElement
ParameterizedType javax.lang.model.type.DeclaredType
ParamTag com.sun.source.doctree.ParamTree
ProgramElementDoc javax.lang.model.element.Element
RootDoc jdk.javadoc.doclet.DocletEnvironment
SeeTag com.sun.source.doctree.LinkTree
com.sun.source.doctree.SeeTree
SerialFieldTag com.sun.source.doctree.SerialFieldTree
SourcePosition com.sun.source.util.SourcePositions
Tag com.sun.source.doctree.DocTree
ThrowsTag com.sun.source.doctree.ThrowsTree
Type javax.lang.model.type.TypeMirror
TypeVariable javax.lang.model.type.TypeVariable
WildcardType javax.lang.model.type.WildcardType
С версии:
9
См. также:
  • Doclet
  • DocletEnvironment
Класс Описание
Doclet
Пользовательский Doclet должен реализовывать этот интерфейс, как описано в описании пакета.
Doclet.Option
Инкапсуляция имени параметра, псевдонимов, параметров и описаний, используемых Doclet.
Doclet.Option.Kind
Вид параметра.
DocletEnvironment
Представляет рабочую среду отдельного вызова Doclet.
DocletEnvironment.ModuleMode
Режим, задающий уровень детализации документации модуля.
Reporter
Интерфейс для вывода диагностических и других сообщений.
StandardDoclet
Этот Doclet создает документацию в формате HTML для указанных модулей, пакетов и типов.
Taglet
Интерфейс пользовательского Taglet, поддерживаемого такими Doclet, как стандартный Doclet.
Taglet.Location
Вид места, в котором можно использовать тег.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, способы обхода проблем и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API