http://openjdk.java.net/jeps/221 をテキトーに訳した。
JEP 221: Simplified Doclet API
Author Jonathan Gibbons Owner Kumar Srinivasan Created 2014/05/09 01:45 Updated 2014/10/31 23:38 Type Feature Status Candidate Component tools / javadoc(tool) Scope Implementation Discussion javadoc dash dev at openjdk dot java dot net Effort M Duration M Priority 3 Reviewed by Brian Goetz, Jonathan Gibbons Endorsed by Brian Goetz Release 9 Issue 8042809 Depends 8035473: [javadoc] Revamp the existing Doclet APIs 8055509: [javadoc] convert all Tags to DocTree 8055510: [javadoc] convert all doc Position to Positions 8055511: [javadoc] Migrate new sources to the main repository 8055508: [javadoc] convert all javadoc pages to Element Relates to 8035473: [javadoc] Revamp the existing Doclet APIs
Summary
改善した機能を持つ新規APIを活用するシンプルな設計にDoclet APIを置き換え、そのAPIを使用するように標準docletをアップデートします。
Goals
- 古くなったAPIのメンテナンス負荷を削減する。
- Java SE 6で導入された
javax.lang.model
やstandard language-model APIを使用して、カスタム言語モデルAPI(custom language-model API)の使用を廃止する。 - JDK 8で導入された
com.sun.source.doctree
やDocTree APIを使用して、javadocコメント分析用の貧弱なサポートを廃止する。 - 適切な新しいインターフェース型で、"テンプレートクラス"
com.sun.javadoc.Doclet
の使用箇所を置き換える。
Non-Goals
パフォーマンス改善は目的では無いですが、結果的に、javadoc
ツールと標準docletのパフォーマンスは改善される、と予測されています。
Motivation
現在のAPIには以下のような対処すべき問題があります。
- docletを定義するAPIは、テンプレートクラス
com.sun.javadoc.Doclet
が例示するstaticメソッドといくつかのメソッドを実装する、単なるクラスです。staticメソッドの使用はとりわけ問題になりやすく、その理由はメソッド間のデータ共有にstaticメンバの使用を要求されるからです。このことはコンカレントな使用およびテストの両方にとってマイナス要素です。 - 現行APIは自前の言語モデルAPIを提供していますが、多数の制限(例:配列が十分にモデル化されていない)が存在し、また、APIシグネチャに影響を及ぼす方法(例:ジェネリクス、type annotations, default methods)でJava言語を改良する際の重荷となっています。
- 現行APIはJavadocコメント分析を提供しており、これは最低限かつ仕様が不完全な(incompletely-specified)ものです。このことは、コメントの内容を処理したいdocletに対し、極めて重い負荷となっています。また、コメント内に構造を持つソースファイル内の位置を取得するAPIをサポートしていません。これにより、診断ツールなどがレポートすべき正確な位置情報を提供することが実質的に不可能となっています。
- コメント分析用の貧弱なAPIは、同じく貧弱で非効率な実装で構成されており、コメント内の構造を分割するのにsubstring matchingを多用しています。
Description
Doclet APIをLanguage Model APIとDocTree APIを使用して再構築します。他APIを活用するための"umbrella API"はそのまま残される予定です*1。
javadoc
ツールは新しいAPIで書かれたdocletを解するようにアップデートが必要です。我々は移行期間中は既存のAPIをサポートする考えですが、恐らく、旧APIを凍結し、移行期間中に導入された新しい言語機能をサポートするようなアップデートを行わないと思われます。
標準docletを新しいAPIに従うアップデートが必要で、これは本プロジェクトにおける最も主要な作業となります。大部分は、古いイディオムを新しいものに変換する作業になると思われます。
標準docletはTaglet APIとして知られるセカンダリ・プラグインAPIをサポートします。Tagletsは、Javadocコメント内で使用可能なカスタムタグをユーザが定義し、生成されるドキュメント内でそうしたタグがどのように出現すべきかを指定するための、機能を提供します。歴史的経緯により、Taglet APIは既に二つのバージョンが存在し、一つはpublicなもので、もう一つはinternalです。
publicバージョンは既存APIを使用しており、これは本提案の一部によって廃止される見通しなため、それに応じてAPIのアップデートが必要です。
Testing
新しいユースケース用のテストを開発する必要があります。