4

note新しいタグを追加するカスタム Javadoc タグレットを作成しました。

 ...
 public boolean isInlineTag() { return false; }

  public String toString(Tag tag) {
      return "<pre class='note'>" + tag.text() + "</pre>";
   }

これまでのところ動作しますが、インライン タグは展開されません。コメントの例を次に示します。

/**
 * @note Test note with {@link Someclass} // @link tag is NOT expanded
 * @param name - here the {@link Someclass} works // works for standard 'param' tag
 */

{@link}インライン タグは展開されません。ただし、組み込みのparamjavadoc タグでは問題なく機能します。

カスタムJavadocタグレットでネストされたインラインタグを展開する方法はありますか?

ありがとう!

4

2 に答える 2

2

タグレットの概要には次のように書かれています。

タグレットは、@todo などのブロック タグ、または {@underline} などのインライン タグとして記述できます。ブロック タグレットは現在、テキスト内のインライン タグをサポートしていません。

実際、タグレット API はtoString()メソッドのみをサポートするため、少し最小限すぎます。

このメソッド内でtag ( を使用して.inlineTags()) パラメータのサブタグを取得できますが、タグレットから標準ドックレットの通常の機構にアクセスできないため、自分でフォーマットする必要があります。

したがって、独自のタグレットで標準ドックレットの一部を再実装 (またはコピー) したくない場合は、ここで運が悪いようです。(ただし、タグレットでパッチを適用する代わりに、標準のドックレットを直接拡張することもできます。)

于 2011-02-25T17:25:40.223 に答える
1

ここに 3 つの考えられるアイデアがありますが、どれも私はあまり好きではありません。

  1. 独自の を定義する代わりに、コマンドのオプションをTaglet使用してをサポートします。もちろん、これでは独自のカスタム書式を定義できません。-tagjavadoc@note

  2. を使用できますtag.holder().setRawCommentText(String)。これで遊んだ私の経験では、これによりタグを追加できますが、タグを書き換えることはできません。したがって、文字列置換を行っtag.holder().getRawCommentText()てから、標準のドックレットでインライン タグを適切にレンダリングすることはできませんが、Taglet.toString(Tag[])メソッドでインライン タグの生の形式を含む html を生成し、生のコメント テキストに追加することはおそらく可能です。 " @renderedNote markUp Tag.text() "@renderedNoteは、 を使用して定義された別のタグ-tagです。Taglet.toString(Tag[])その後、空の文字列を返す必要があります。ただし、これは醜いだけでなく、これが文書化されていない動作に依存しているかどうかもわかりません。そのため、このアイデアがどれほど堅牢であるか、将来的に証明されるかはわかりません。

  3. Tagletまた、実装することもできますcom.sun.tools.doclets.internal.toolkit.taglets.Taglet。これは、標準のタグレットがどのように定義されているかのようです。次に実装する必要がある 2 つのメソッドはTagletOutput getTagletOutput(Tag tag, TagletWriter writer)、 とTagletOutput getTagletOutput(Doc doc, TagletWriter writer)です。後者はちょうどできると思いますthrow IllegalArgumentException()Map登録時に提供されたも保持する場合は、そのタグ名を検索してその実装とそのメソッドへの委任を取得Tagletすることにより、遭遇するインラインタグのいくつかをレンダリングできる場合があります。しかし、例えば、そのマップにはタグが登録されていないようです。それらについては、代わりにマップ from を使用できる可能性があるため、タグが提供されているため、またはにキャストできる可能性があります (ただし、私は確認していません)。Mapcom.sun.tools.doclets.internal.toolkit.taglets.TagletgetTagletOutput@link@linkSeeTag@seeTagletWriterTagletWriterImplを使用しますTagletWriterImpl.seeTagOutput(Doc, SeeTag[])Textタグの場合、 を介してインスタンスを生成できTagletOutputますnew TagletOutputImpl(String)。最後に、TagletOutputこの方法で取得したすべてのインスタンスを 1 つTagletOutputに結合して、 を使用して返すことができますTagletOutput.append(TagletOutput)

于 2011-03-13T18:14:04.400 に答える