Question

J'ai écrit un taglet Javadoc personnalisé qui ajoute une nouvelle balise note:

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

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

Il fonctionne jusqu'à présent, mais les balises inline ne sont pas développées. Voici un exemple commentaire:

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

La balise en ligne de {@link} n'est pas élargi. Cependant, cela fonctionne très bien pour la balise param javadoc intégré.

Yat-il un moyen d'élargir balises en ligne imbriqués dans un taglet Javadoc personnalisé?

Merci!

Était-ce utile?

La solution

Le Taglet aperçu dit :

  

Taglets peut être écrit soit des étiquettes de blocs, tels que @todo, ou des balises inline, tels que {@underline}. Bloc taglets ne supportent pas les balises en ligne dans leur texte.

En fait, l'API est taglet un peu trop minime, car il ne supporte que la méthode toString().

Vous pourriez dans cette méthode récupérer les sous-étiquettes du paramètre tag (avec .inlineTags()), mais alors vous devez les formater vous-même, puisque vous n'avez pas accès à la machine normale du doclet standard à partir de votre taglet.

Alors, semble que vous hors de la chance ici, si vous ne voulez pas réimplémentez (ou copie) parties du doclet standard dans votre propre taglet. (Mais alors, vous pouvez même étendre directement la norme doclet au lieu de patcher avec taglets.)

Autres conseils

Voici trois idées possibles, mais aucune dont je vraiment:

  1. Au lieu de définir votre propre Taglet, utilisez l'option -tag à la commande javadoc au soutien @note. Bien sûr, cela ne vous permettra de définir votre propre formatage personnalisé.

  2. Vous pouvez utiliser tag.holder().setRawCommentText(String). Mon expérience de jeu avec ce que cela vous permet d'ajouter des tags, mais ne vous permet pas de réécrire une étiquette. Donc, vous ne pouvez pas faire un remplacement de chaîne sur tag.holder().getRawCommentText() et alors le doclet rendu standard les balises en ligne correctement, mais vous pourriez probablement votre méthode de Taglet.toString(Tag[]) générer le code HTML, y compris sous la forme brute des balises en ligne, puis append à l'état brut commentaire du texte "@renderedNote markedUp Tag.text () " où @renderedNote est une autre balise, définie à l'aide -tag. Votre Taglet.toString(Tag[]) doit alors retourner une chaîne vide. Cependant, non seulement ce laid, je ne sais pas si cela repose sur le comportement en situation irrégulière et donc je ne sais pas comment la preuve solide ou future cette idée est.

  3. Vous pourriez avoir votre Taglet aussi mettre en œuvre com.sun.tools.doclets.internal.toolkit.taglets.Taglet. Cela semble être la façon dont sont définis les taglets standard. Les deux méthodes que vous avez alors à mettre en œuvre sont TagletOutput getTagletOutput(Tag tag, TagletWriter writer) et TagletOutput getTagletOutput(Doc doc, TagletWriter writer). Je pense que ce dernier peut tout throw IllegalArgumentException(). Si vous gardez aussi le Map fourni lors de votre Taglet a été enregistré, alors vous pourriez être en mesure de rendre plusieurs des balises en ligne que vous rencontrez en regardant le nom de la balise dans cette Map pour obtenir sa com.sun.tools.doclets.internal.toolkit.taglets.Taglet mise en œuvre et de déléguer à sa méthode getTagletOutput. Cependant, il semble que, par exemple, les balises @link ne sont pas enregistrés dans cette carte; pour ceux-ci, il est possible (mais je n'ai pas vérifié) que parce que les balises @link sont censés être fournis à titre SeeTag vous pourriez être en mesure d'utiliser la carte de @see à la place, ou vous pouvez jeter le TagletWriter à TagletWriterImpl puis utilisez TagletWriterImpl.seeTagOutput(Doc, SeeTag[]). Pour les balises Text, vous pouvez générer des instances de TagletOutput via new TagletOutputImpl(String). Enfin toutes les instances de TagletOutput que vous obtenez de cette façon peuvent être combinés en un seul TagletOutput à retourner en utilisant TagletOutput.append(TagletOutput).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top