カスタムJavadocキャグレットでインラインタグを展開します
-
10-10-2019 - |
質問
新しいものを追加するカスタム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つの考えられるアイデアがありますが、どれも私が本当に好きではありません:
あなた自身を定義する代わりに
Taglet
, 、 使用-tag
のオプションjavadoc
サポートするコマンド@note
. 。もちろん、これにより、独自のカスタムフォーマットを定義することはできません。使用できます
tag.holder().setRawCommentText(String)
. 。これで遊んでいる私の経験は、これによりタグを追加できるが、タグを書き直すことができないということです。したがって、文字列の交換を行うことはできませんtag.holder().getRawCommentText()
そして、標準のドクレットにインラインタグを適切にレンダリングしてもらうことができますが、おそらくあなたを持つことができますTaglet.toString(Tag[])
メソッドインラインタグの生形態を含むHTMLを生成し、生のコメントテキストに追加します」@renderedNote
MarkedUp tag.text()" どこ@renderedNote
別のタグで、使用して定義されています-tag
. 。あなたのTaglet.toString(Tag[])
次に、空の文字列を返す必要があります。しかし、これは醜いだけでなく、これが文書化されていない行動に依存しているかどうかはわかりません。そのため、このアイデアがどれほど堅牢または将来の証拠があるかはわかりません。あなたはあなたを持つことができます
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
代わりに、またはキャストすることができますTagletWriter
にTagletWriterImpl
そして、使用しますTagletWriterImpl.seeTagOutput(Doc, SeeTag[])
. 。にとってText
タグ、生成できますTagletOutput
Instances bynew TagletOutputImpl(String)
. 。最後にすべてTagletOutput
この方法で取得するインスタンスは、単一に結合することができますTagletOutput
使用して返品されますTagletOutput.append(TagletOutput)
.