質問

新しいものを追加するカスタムJavadocキャグレットを書きました note 鬼ごっこ:

 ...
 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} インラインタグは拡張されていません。ただし、組み込みには正常に機能します param Javadocタグ。

カスタムJavadocキャグレットにネストされたインラインタグを拡張する方法はありますか?

ありがとう!

役に立ちましたか?

解決

キャグレットの概要 言う:

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

実際、タグレットAPIは少し最小限です。 toString() 方法。

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

したがって、あなたが自分のタグレットに標準ドキュメットの部分を再実装(またはコピー)したくない場合、あなたはここで運が悪いように見えます。 (しかし、その後、タグレットでパッチを当てるのではなく、標準ドキュレットを直接拡張することができます。)

他のヒント

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

  1. あなた自身を定義する代わりに Taglet, 、 使用 -tag のオプション javadoc サポートするコマンド @note. 。もちろん、これにより、独自のカスタムフォーマットを定義することはできません。

  2. 使用できます tag.holder().setRawCommentText(String). 。これで遊んでいる私の経験は、これによりタグを追加できるが、タグを書き直すことができないということです。したがって、文字列の交換を行うことはできません tag.holder().getRawCommentText() そして、標準のドクレットにインラインタグを適切にレンダリングしてもらうことができますが、おそらくあなたを持つことができます Taglet.toString(Tag[]) メソッドインラインタグの生形態を含むHTMLを生成し、生のコメントテキストに追加します」@renderedNote MarkedUp 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 登録された場合、その中のタグ名を調べて遭遇するインラインタグをいくつかレンダリングできる場合があります Map その実装を取得します com.sun.tools.doclets.internal.toolkit.taglets.Taglet そして、それに委任します getTagletOutput 方法。ただし、たとえば、 @link タグはそのマップに登録されていません。それらのために、それは可能です(しかし、私はチェックしていません) @link タグはと思われます SeeTag からマップを使用できる場合があります @see 代わりに、またはキャストすることができます TagletWriterTagletWriterImpl そして、使用します TagletWriterImpl.seeTagOutput(Doc, SeeTag[]). 。にとって Text タグ、生成できます TagletOutput Instances by new TagletOutputImpl(String). 。最後にすべて TagletOutput この方法で取得するインスタンスは、単一に結合することができます TagletOutput 使用して返品されます TagletOutput.append(TagletOutput).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top