在自定义Javadoc taglet中展开内联标记

在自定义Javadoc taglet中展开内联标记,java,javadoc,custom-tag,taglet,Java,Javadoc,Custom Tag,Taglet,我编写了一个自定义Javadoc taglet,它添加了一个新的note标记: ... public boolean isInlineTag() { return false; } public String toString(Tag tag) { return "<pre class='note'>" + tag.text() + "</pre>"; } {@link}内联标记未展开。但是,对于内置的paramjavadoc标记,它可以正常

我编写了一个自定义Javadoc taglet,它添加了一个新的
note
标记:

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

  public String toString(Tag tag) {
      return "<pre class='note'>" + tag.text() + "</pre>";
   }
{@link}
内联标记未展开。但是,对于内置的
param
javadoc标记,它可以正常工作

有没有办法在自定义Javadoc taglet中扩展嵌套的内联标记

谢谢

报告说:

标记可以写成块标记,如@todo,也可以写成内联标记,如{@underline}。块标记当前不支持文本中的内联标记

事实上,taglet API有点太小了,因为它只支持
toString()
方法

您可以在该方法中检索参数
标记的子标记(使用
.inlineTags()
),但是您必须自己格式化它们,因为您无法从标记访问标准doclet的正常机制


因此,如果您不想在自己的taglet中重新实现(或复制)标准doclet的部分,那么看起来您在这里运气不好。(但是,您也可以直接扩展标准doclet,而不是用taglets对其进行修补。)

以下是三种可能的想法,我并不喜欢其中任何一种:

  • 使用
    javadoc
    命令的
    -tag
    选项来支持
    @note
    ,而不是定义自己的
    Taglet
    。当然,这不允许您定义自己的自定义格式

  • 您可以使用
    tag.holder().setrawcontext(String)
    。我的经验是,这允许您添加标记,但不允许您重写标记。因此,您不能在
    tag.holder().getRawCommentText()
    上替换字符串,然后让标准doclet正确呈现内联标记,但您可能会有
    Taglet.toString(tag[])
    方法生成html,包括内联标记的原始形式,然后附加到原始注释文本“
    @rendernote
    markedUp Tag.text()”其中
    @rendernote
    是另一个标记,使用
    -Tag
    定义。您的
    Taglet.toString(标记[])
    然后应该返回一个空字符串。然而,这不仅是丑陋的,我不知道这是否依赖于未记录的行为,所以我不知道这个想法有多强大或未来的证据

  • 您可以让您的
    Taglet
    也实现
    com.sun.tools.doclets.internal.toolkit.taglets.taglets
    。这似乎就是标准taglets的定义方式。然后必须实现的两种方法是
    TagletOutput getTagletOutput(Tag-TagletWriter-writer)
    TagletOutput getTagletOutput getTagletOutput(Doc Doc,TagletWriter)
    。我认为后者可以
    抛出IllegalArgumentException()
    。如果您还保留注册
    Taglet
    时提供的
    Map
    ,则您可以通过在该
    Map
    中查找标记名来呈现遇到的多个内联标记,以获得其实现
    com.sun.tools.doclets.internal.toolkit.taglets.Taglet
    ,并将其委派给e> getTagletOutput
  • 方法。但是,它看起来像是,例如,
    @link
    标记没有在该映射中注册;对于那些,它是可能的(但我没有检查)因为
    @link
    标记被假定为
    SeeTag
    提供,所以您可以使用
    @see
    中的映射,或者您可以将
    TagletWriter
    转换为
    TagletWriterImpl
    ,然后使用
    TagletWriterImpl.seeTagOutput(Doc,SeeTag[])
    。对于
    Text
    标记,您可以通过
    新的tagletoutputinpl(String)
    生成
    TagletOutput
    实例。最后,您通过这种方式获得的所有
    TagletOutput
    实例可以组合成一个
    TagletOutput
    ,使用
    TagletOutput.append(TagletOutput)
    返回

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