模块 jdk.javadoc

包 jdk.javadoc.doclet


jdk.javadoc.doclet
Doclet API 提供了一个环境,结合语言模型 API 和编译器树 API,允许客户端检查程序和库的源代码级结构,包括嵌入在源代码中的 API 注解。

standard doclet 可用于生成 HTML 格式的文档。它支持用户定义的 taglets ,可用于为文档注释中的用户定义标签生成自定义输出。

笔记:此包中的声明取代旧包 com.sun.javadoc 中的声明。有关旧类型到新类型映射的详细信息,请参阅 迁移指南

Doclet 由 javadoc 调用,此 API 可用于将程序信息写入文件。例如,默认调用标准 doclet 以生成 HTML 文档。

调用由接口Doclet 定义——run 接口方法,定义入口点。

  public boolean run(DocletEnvironment environment)
 
DocletEnvironment 实例保存 doclet 将被初始化的环境。可以从这个环境中提取所有其他信息,形式为 elements 。可以进一步使用 Language Model API 描述的 API 和实用程序来查询元素和类型。

术语

已选
一个元素被认为是 selected ,如果 selection controls 允许 它被记录。 (请注意,永远不会选择合成元素。)
指定
用户指定的元素集被认为是 specified elements 。指定的元素提供了确定要记录的 included elements 的起点。
包括在内
一个元素被认为是 included ,如果它是 specified 如果它包含一个 specified 元素,或者它被包含在一个 specified 元素中,并且是 selected 。包含的元素将被记录。

选项

可以使用这些选项指定 Javadoc selection control,如下所示:
  • --show-members:value--show-types:value 可以用来过滤成员,取值如下:
    • public——只考虑公共元素
    • 受保护——考虑公共和受保护的元素
    • 包——考虑公共、受保护和包私有元素
    • 私有——考虑所有元素
  • --show-packages:value“exported”或“all”可用于仅考虑导出的包或模块中的所有包。
  • --show-module-contents:value 可用于指定可以记录模块声明的级别。 “api”的值表示 API 级别的文档,“all”表示详细的文档。
以下选项可用于指定要记录的元素:
  • --module 记录指定的模块。
  • --expand-requires:value 通过包含部分或全部模块依赖项来扩展要记录的模块集。该值可能是以下之一:
    • 传递性——在命令行上明确指定的每个模块都被扩展以包括其传递依赖项的关闭
    • all -- 在命令行上明确指定的每个模块都被扩展以包括其传递依赖项的闭包,以及它的所有直接依赖项
    默认情况下,只考虑指定的模块,不扩展模块依赖关系。
  • packagenames 可用于指定包。
  • -subpackages 可用于递归加载包。
  • -exclude 可用于排除包目录。
  • sourcefilenames 可用于指定源文件名。

与旧选项的交互。

新的 --show-* 选项为旧选项 -public-protected-package-private 提供了更详细的替换。或者,旧选项可以继续用作新选项组合的较短形式,如下所述:
短格式选项映射
较旧的选项 与新选项等同于这些值
--show-members --show-types --show-packages --show-module-contents
-public public public 输出 应用程序接口
-protected protected protected 输出 应用程序接口
-package all all
-private 私人的 私人的 all all

qualified 元素名称是在其前面加上包名称的元素名称,例如 java.lang.String 。非限定名称没有包名称,例如 String

示例

以下是一个示例 doclet,它显示一个类及其成员的信息,支持一个选项。
// Note: imports deleted for clarity

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

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

  public 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());
    }
  }

  @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;
  }

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

  private String overviewFile;

  @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();
  }
}
 

可以使用命令行调用此 doclet,例如:

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

迁移指南

com.sun.javadoc API 中的许多类型在此包中没有等效项。相反,使用 javax.lang.modelcom.sun.source API 中的类型。

下表提供了从旧类型到替代类型的映射指南。在某些情况下,没有直接的等价物。

将旧类型映射到新类型的指南
旧式 新型
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
参见: