Java

タグレットの概要

 

目次

タグレット API

タグレットは、JavaTM プログラミング言語で記述したプログラムであり、タグレット API を実装しています。タグレットは、ブロックタグ (たとえば @todo) またはインラインタグ (たとえば {@underline}) のいずれかとして記述できます。現在のところ、ブロックタグレットは、そのテキスト内でインラインタグをサポートしていません。「ブロックタグとインラインタグ」を参照してください。タグレット API は、次の 1 つのインタフェースで構成されています。 タグレットを使用すると、カスタムタグのテキスト引数の修正や書式指定が可能になるほか、テキストをファイルやその他のストリームにリダイレクトするなど、さまざまな処理を実行できます。タグレットによって標準タグをオーバーライドすることもできます。

タグレットは、-tag オプションの基盤となる機能です。-tag オプションを使用すると、組み込みタグレットが使用されて、@return に対して生成されるのと類似したデフォルト HTML 形式が生成されます。

タグレットの記述

タグレットは、次の基本手順に従って作成し、使用します。

  1. タグレットとなる Java プログラムを記述します。プログラムは次のものをインポートする必要があります。
       import com.sun.tools.doclets.Taglet;    // Taglet API
       import com.sun.javadoc.*;               // Doclet API
       import java.util.Map;                   // Used in register(Map)
    
    com.sun.javadoc のクラスは、toString(Tag) で使用する Tag インタフェースのためにインポートする必要があります。

  2. 作成するクラスでは、そのクラスが継承するインタフェースで必要となるものを実装しなければなりません。toString メソッドの中に、カスタムタグに渡されるテキスト引数の修正、書式指定、またはリダイレクトを実行するためのカスタム処理を実装します。
        public String toString(Tag tag)
    
  3. 実装しているインタフェースで必要となるものに加えて、次の static メソッドを実装する必要があります。その後、実行時にロードされるようにタグレットを有効化します。このあとのにあるソースコードを参照してください。
        public static void register(Map tagletMap)  
    

  4. ドックレットをコンパイルします。それには、JDK に含まれている javac コンパイラのバージョン 1.4.0 以降を使用します。必要なクラスファイルは、JDK の lib\tools.jar ファイルに含まれています。このあとの最初の例では、JDK のインストール先を C:\Program Files\j2sdk1.4.1 と想定しています。
       javac -classpath "C:\Program Files\j2sdk1.4.1\lib\tools.jar"  ToDoTaglet.java
    

  5. -taglet オプションおよび -tagletpath オプションを使用して javadoc ツールを実行します。たとえば、タグレットのクラスファイルを com.sun パッケージ内に入れるように定義されており、 C:\taglets\com\sun\Taglet.class にコードが格納されている場合は、tagletpath に C:\taglets を設定します。この例では、ToDoTaglet タグが組み込まれている com.package1 パッケージを指定して javadoc を呼び出しています。
       javadoc -taglet ToDoTaglet -tagletpath C:\taglets com.package1
    

このあとの例では、ブロックタグレットおよびインラインタグレットについて説明します。

例 - ブロックタグレット

@todo を実装する ブロックタグレットの例のソースコードは、次のファイルに含まれています。 対応するクラスファイルである ToDoTaglet.class は、すでにコンパイルされ、このソースファイルと同じディレクトリ内に保存されています。

このタグレットは、@todo タグの出力形式を指定します。次のタグを含むドキュメンテーションコメントは、

    /**
     * @todo Fix this!
     */
ToDo タグレットによって、次のような HTML 出力に書式指定されます。
To Do:
Fix this!

実装に関する説明

ソースコードを見てみましょう。タグに名前を付け、ヘッダテキストを定義するには、2 つの private フィールドを定義します。
    private static final String NAME = "todo";
    private static final String HEADER = "To Do:";
インラインタグではなくブロックタグにするため、isInlineTag が false を返すように設定します。
    public boolean isInlineTag() {
        return false;
    }
ほかに、inFieldinMethodinTypeinPackageinOverview の各メソッドでも、true または false を指定することにより、ソースコード内でこのタグを使用できるドキュメンテーションコメントを示します。

toString(Tag) メソッドでは、1 つの {@todo} タグに遭遇したとき、テキストをどのように出力に挿入するかを決定します。このコードは、太字の見出しのあと、tag.text() で指定されたテキストを含む黄色の背景の表を作成します。

    public String toString(Tag tag) {`
        return "<DT><B>" + HEADER + "</B><DD>"
               + "<table cellpadding=2 cellspacing=0><tr><td bgcolor=\"yellow\">"
               + tag.text() 
               + "</td></tr></table></DD>\n";
    }
同様に、toString(Tag[]) メソッド (タグの配列を引数にとる) では、複数の {@todo} タグに遭遇したとき、テキストをどのように出力に挿入するかを決定します。

register メソッドは次のとおりです。

    /**
     * Register this Taglet.
     * @param tagletMap  the map to register this tag to.
     */
    public static void register(Map tagletMap) {
       ToDoTaglet tag = new ToDoTaglet();
       Taglet t = (Taglet) tagletMap.get(tag.getName());
       if (t != null) {
           tagletMap.remove(tag.getName());
       }
       tagletMap.put(tag.getName(), tag);
    }

例 - インラインタグレット

ブロックタグとは違って、カスタムインラインタグは、タグレットを使用してのみ実装できます。つまり、-tag オプションを使用して実装することはできません。これは、インラインタグにはデフォルトの動作がないためです。

{@underline} を実装するインラインタグレットの例のソースコードは、次のファイルに含まれています。

対応するクラスファイルである UnderlineTaglet.class は、すでにコンパイルされ、このソースファイルと同じディレクトリ内に保存されています。

このタグレットは、{@underline} タグの出力形式を指定します。次のタグを含むドキュメンテーションコメントは、

    /**
     * Be sure to insert the value at the {@underline start} of the array.
     */
次のような HTML として出力されます。
Be sure to insert the value at the start of the array.

実装に関する説明

このソースコード (インラインタグレット) と、前出の例 (ブロックタグレット) との違いを見てみましょう。もちろん、タグ名は異なり、インラインタグにはヘッダがないので定義されていません。
    private String NAME = "underline";
ブロックタグではなくインラインタグにするため、isInlineTag が true を返すように設定します。
    public boolean isInlineTag() {
        return true;
    }

inFieldinMethodinConstructorinTypeinPackage、および inOverview の各メソッドは、ブロックタグにのみ適用されます。そのため、インラインタグではすべて false を返すように設定する必要があります。

toString(Tag) メソッドでは、1つの {@underline} タグに遭遇したとき、テキストをどのように出力に挿入するかを決定します。このコードは、HTML 下線タグ <ul> および </ul> でテキストを囲みます。

    public String toString(Tag tag) {
        return "<u>" + tag.text() + "</u>";
    }
ブロックタグの場合とは違って、インタインタグの配列を処理することはできません。そのため、インラインタグでは、toString(Tag[]) メソッド (タグの配列を引数にとる) は無視されます。

エラーおよび警告の処理

エラー - タグレットは、エラーメッセージを表示し、System.exit() を呼び出すだけで、エラーを報告し、Javadoc を停止できます。

警告 - タグレットは、ドックレットインスタンスで指定された MessageRetriever を使用して、警告を報告できます。MessageRetriever は Configuration オブジェクトから取得されます。Configuration オブジェクトはドックレットから取得されます。たとえば、タグレットが標準ドックレットで使用するように設計されている場合、Configuration は static メソッドである Standard.configuration() を使用して取得できます。例として、SimpleTaglet はこのようにして警告を表示します。これは -tag オプションのデフォルトタグレットです。


Copyright © 2001-2002 Sun Microsystems, Inc. All Rights Reserved.

コメントの送付先: javadoc-tool@sun.com
Sun