Java

$B%I%C%/%l%C%H$N35MW(J

 

$BL\

$B%I%C%/%l%C%H$N4pK\(J

$B%I%C%/%l%C%H$H$O!"(J$B%I%C%/%l%C%H(J API $B$r;HMQ$7$F(J JavaTM $B%W%m%0%i%_%s%08@8l$G5-=R$7$?!"(JJavadoc $B%D!<%k$NFbMF$H7A<0$r;XDj$9$k%W%m%0%i%`$N$3$H$G$9!#(J $B%G%U%)%k%H$G$O!"(JHTML $B7A<0$N(J API $B%I%-%e%a%s%H$r@8@.$9$k$?$a$N!"(JSunTM $B$,Ds6!$7$?(J$B!VI8=`!W%I%C%/%l%C%H(J$B$,;HMQ$5$l$^$9(J $B$7$+$7!"FH<+$N%I%C%/%l%C%H$r:n@.$7$F(J Javadoc $B$N=PNO$r9%$_$N7A<0$K%+%9%?%^%$%:$9$k$3$H$b$G$-$^$9!#(J $B%I%C%/%l%C%H$O!"%I%C%/%l%C%H(J API $B$r;HMQ$7$F%<%m$+$i:n@.$9$k$3$H$b!"I,MW$K1~$8$FI8=`%I%C%/%l%C%H$K $B%I%C%/%l%C%H$O!"$C$F:n@.$7!";HMQ$7$^$9!#(J
  1. $B%I%C%/%l%C%H$H$J$k(J Java $B%W%m%0%i%`$r5-=R$7$^$9!#(J $B%I%C%/%l%C%H(J API $B$r;HMQ$9$k$?$a$K$O!"(Jcom.sun.javadoc.* $B$r%$%s%]!<%H$9$kI,MW$,$"$j$^$9!#(J $B:n@.$7$?%W%m%0%i%`$N%(%s%H%j%]%$%s%H$O!"(Jpublic static boolean start $B%a%=%C%I$N$"$k%/%i%9$G$9!#$=$N%a%=%C%I$O!"%Q%i%a!<%?$H$7$F(J RootDoc $B$r$H$j$^$9!#(J
  2. $B%I%C%/%l%C%H$r%3%s%Q%$%k$7$^$9!#(J $B%3%s%Q%$%k$K$O!"(JJava 2 SDK $B$K4^$^$l$k%3%s%Q%$%i(J javac $B$r;HMQ$G$-$^$9!#(J
  3. -doclet startingclass $B%*%W%7%g%s$r;XDj$7$F(J Javadoc $B%D!<%k$rstartingclass $B$O!"A0$G$9!#(J
$B%I%C%/%l%C%H(J API $B$N%/%i%9%U%!%$%k$O!"(JSDK $B$N(J lib/tools.jar $B%U%!%$%k$K4^$^$l$F$$$^$9!#(J $B%I%C%/%l%C%H$r%3%s%Q%$%k$9$k$H$-$O!"(Jtools.jar $B$,%/%i%9%Q%9$KB8:_$9$kI,MW$,$"$j$^$9!#(J $B$3$N$h$&$J>l9g$O!"(Jjavac $B$N(J -classpath $B%*%W%7%g%s$r;HMQ$G$-$^$9!#(J

$B%3%^%s%I9T%*%W%7%g%s(J -doclet $B$r;XDj$;$:$K(J javadoc $B$rl9g$O!"(JHTML $B7A<0$N(J API $B%I%-%e%a%s%H$r@8@.$9$kI8=`%I%C%/%l%C%H$,;HMQ$5$l$^$9!#(J

com.sun.javadoc $B%Q%C%1!<%8$O!"%I%C%/%l%C%H(J API $B$rDj5A$9$k$$$/$D$+$N%$%s%?%U%'!<%9$G9=@.$5$l$F$$$^$9!#(J $B$3$l$i$N%$%s%?%U%'!<%9$O!"(JJava 2 SDK $B$N(J lib/tools.jar $B%U%!%$%k$K4^$^$l$F$$$^$9!#$3$N%U%!%$%k$K$O!"$3$l$i$N%$%s%?%U%'!<%9$rtools.jar $B%U%!%$%k$K$O!"I8=`%I%C%/%l%C%H$r

$B4JC1$JNc(J

$B.$5$J%/%i%9$,(J 1 $B$D$@$14^$^$l$k4JC1$J%I%C%/%l%C%H$NNc$r<($7$^$9!#$3$NNc$r8+$l$P!"%I%C%/%l%C%H$N;EAH$_$K$D$$$F46?($r$D$+$a$k$O$:$G$9!#(J
import com.sun.javadoc.*;

public class ListClass {
    public static boolean start(RootDoc root) {
        ClassDoc[] classes = root.classes();
        for (int i = 0; i
< classes.length; ++i) {
            System.out.println(classes[i]);
        }
        return true;
    }
}
$B%3!<%I$r8+$F$o$+$k$h$&$K!"$3$N%I%C%/%l%C%H$O(J Javadoc $B$,F0:n$7$F$$$k%/%i%9$r$rI8=`=PNO$7$^$9!#(J

$B$3$N%I%C%/%l%C%H$K$D$$$F$^$:5$$E$/$N$O!"(J $B%I%C%/%l%C%H(J API $B$r;HMQ$9$k$?$a$K(J com.sun.javadoc $B%Q%C%1!<%8$r%$%s%]!<%H$9$k$H$$$&$3$H$G$9!#(J $B$I$N%I%C%/%l%C%H$N>l9g$K$b!"(J $B%(%s%H%j%]%$%s%H$O!"(J public static boolean start $B%a%=%C%I$G$9!#(JThe start $B%a%=%C%I$O!"%Q%i%a!<%?$H$7$F(J RootDoc $B$r$H$j$^$9!#(J $B$3$N%Q%i%a!<%?$K$O!"(J javadoc $B$NpJs$d!"(J javadoc $B$,F0:n$7$F$$$k%/%i%9$d%Q%C%1!<%8$K$D$$$F$N>pJs$,$"$j$^$9!#(J

RootDoc $B$O!"(J Javadoc $B$K$h$C$F2r@O$5$l$k%/%i%9$rI=$9MWAG$r$b$D(J ClassDoc $BG[Ns$rJV$9!"(Jclasses $B%a%=%C%I$rDj5A$7$^$9!#(J $Bfor $B%k!<%W$G!"(JClassDoc $BG[Ns$K4^$^$l$k3F%/%i%9$NL>A0$r=PNO$7$^$9!#(J $BG[Ns(J (ClassDoc $B$r(J println $B$K0z$-EO$9$H!"(JClassDoc $B$,I=$7$F$$$k%/%i%9$NL>A0$,=PNO$5$l$^$9!#(J

$B$3$N%I%C%/%l%C%H$rlib/tools.jar $B%U%!%$%k$K4^$^$l$F$$$^$9!#(J $B$=$N$?$a!"%3%s%Q%$%i$N%/%i%9%Q%9$K!"(Jtools.jar $B$r4^$`I,MW$,$"$j$^$9!#(J $BNc$r<($7$^$9!#(J

javac -classpath C:\jdk1.3\lib\tools.jar ListClass.java
ListClass $B%I%C%/%l%C%H$r-doclet $B%?%0$G;XDj$7$^$9!#(J $B$?$H$($P!"$3$N%I%C%/%l%C%H$r(J MyClass.java $B$H$$$&%U%!%$%k$KBP$7$F
% javadoc -doclet ListClass -classpath C:\jdk1.3\lib\tools.jar MyClass.java
$B=PNO$O!"!V(JMyClass$B!W$H$$$&J8;zNs$K$J$j$^$9!#(J $B$3$N%3%^%s%I$r;HMQ$9$k$K$O!"%/%i%9%Q%9>e$K(J tools.jar $B$bI,MW$G$9!#(J

$B%3%^%s%I9T%*%W%7%g%s$K$D$$$F$NCm(J: javadoc-help $B$rl9g$K$OMxMQ$G$-$^$;$s!#(J $B%+%9%?%`%I%C%/%l%C%H$G$O!"%I%C%/%l%C%HFH<+$N%3%^%s%I9T%*%W%7%g%s$rDj5A$9$k$3$H$b$G$-$^$9!#(J $B$3$N$"$H$N(J$BNc(J$B$r;2>H$7$F$/$@$5$$!#(J

API $B%I%-%e%a%s%H$r@8@.$9$k$K$O!"%I%C%/%l%C%H$O!"$3$N4JC1$JNc$h$j$b$+$J$jJ#;($K$J$j$^$9!#(J javadoc $B$G@8@.$9$k(J API $B%I%-%e%a%s%H$N7A<0$r%+%9%?%^%$%:$9$k>l9g$O!"%I%C%/%l%C%H$r<+J,$G%<%m$+$i:n@.$9$k$h$j$b!"%G%U%)%k%H$NI8=`%I%C%/%l%C%H$K=$@5$r2C$($k7A$G:n@.$7$?J}$,4JC1$G$9!#(J

$BNc(J $BKI8=`%I%C%/%l%C%H$N%5%V%/%i%92=(J

Javadoc $B%D!<%k$N=PNO$r%+%9%?%^%$%:$9$k$K$O!"I,MW$J=PNO$NFbMF$H7A<0$r;XDj$9$kFH<+$N%I%C%/%l%C%H$r:n@.$9$kI,MW$,$"$j$^$9!#(J $B%G%U%)%k%H$N=PNO$H$[$\F1$87A<0$N(J HTML $B=PNO$,I,MW$J>l9g$O!"%I%C%/%l%C%H:n@.$N=PH/E@$H$7$F!"I8=`%I%C%/%l%C%H$rMxMQ$9$k$HJXMx$G$9!#(J $BI8=`%I%C%/%l%C%H$K4^$^$l$kE,@Z$J%/%i%9$r%5%V%/%i%92=$7!"I,MW$J=PNO$,@8@.$5$l$k$h$&$K%a%=%C%I$rDI2C$^$?$O%*!<%P!<%i%$%I$7$^$9!#(J $B$"$k$$$O!"I8=`%I%C%/%l%C%HA4BN$r%3%T!<$7$F!"$=$l$K=$@5$r2C$($F$$$/$H$$$&J}K!$b$"$j$^$9!#(J $BI8=`%I%C%/%l%C%H$N%3%T!<$r=PH/E@$H$7$F;HMQ$9$k>l9g$O!"I,MW$K1~$8$F!"3F%=!<%9%U%!%$%k$N@hF,$K$"$k(J package $BJ8$r:o=|$7!"?7$7$$FH<+$N%Q%C%1!<%8L>$KCV$-49$($F$/$@$5$$!#(J

$BHow can I modify the standard doclet to produce links to source code from the API documentation?$B!W$r;2>H$7$F$/$@$5$$!#(J $B4V0c$$$r8+$D$1$?>l9g$O!"(Jjavadoc-tool@sun.com $B$^$G$*CN$i$;$/$@$5$$!#(J

$BNc(J - $B%+%9%?%`%?%0$N:n@.$H=hM}(J

$B%I%-%e%a%s%F!<%7%g%s%3%a%s%H$NCf$G!"(J@param $B$d(J @return $B$J$I$NI8=`%?%0$K2C$($F!"%+%9%?%`%?%0(J (@mytag) $B$r;HMQ$9$k>l9g$K$D$$$F9M$($F$_$^$9!#(J $B%+%9%?%`%?%0$NCf$N>pJs$r;HMQ$9$k$K$O!"$=$N%+%9%?%`%?%0$rI=$9(J Tag $B$N%$%s%9%?%s%9$r%I%C%/%l%C%H$G;HMQ$9$kI,MW$,$"$j$^$9!#(J $B$3$N$?$a$N$b$C$H$b4JC1$JJ}K!$N(J 1 $B$D$O!"(JDoc $B$^$?$O(J Doc $B$N%5%V%/%i%9$N(J tags(String) $B%a%=%C%I$r;HMQ$9$k$3$H$G$9!#(J $B$3$N%a%=%C%I$O!"L>A0$,(J String $B0z?t$K0lCW$9$k$9$Y$F$N%?%0$r4^$`(J Tag $B%*%V%8%'%/%H$NG[Ns$rJV$7$^$9!#(J $B$?$H$($P!"(Jmethod $B$,(J MethodDoc $B$N%$%s%9%?%s%9$G$"$k>l9g!"%3!<%I$O
method.tags("mytag")
$B$3$N%3!<%I$O!"%a%=%C%I$N%I%-%e%a%s%F!<%7%g%s%3%a%s%H$K4^$^$l$k$9$Y$F$N(J @mytag $B$rI=$9(J Tag $B%*%V%8%'%/%H$NG[Ns$rJV$7$^$9!#(J @mytag $B%?%0Fb$N>pJs$X$O!"(JTag $B$N(J text $B%a%=%C%I$r;HMQ$9$l$P%"%/%;%9$G$-$^$9!#(J $B$3$N%a%=%C%I$O!"%?%0$NFbMF$rI=$9J8;zNs$rJV$9$N$G!"MQES$K1~$8$F$3$NJ8;zNs$r2r@O$7$?$j;HMQ$7$?$j$G$-$^$9!#(J $B$?$H$($P!"%I%-%e%a%s%F!<%7%g%s%3%a%s%H$K!"
@mytag Some dummy text.
$B$3$N>l9g!"(Jtext $B%a%=%C%I$O!"!V(JSome dummy text.$B!W$H$$$&J8;zNs$rJV$7$^$9!#(J

$B

import com.sun.javadoc.*;

public class ListTags {
    public static boolean start(RootDoc root){
        String tagName = "mytag";
        writeContents(root.classes(), tagName);
        return true;
    }

    private static void writeContents(ClassDoc[] classes, String tagName) {
        for (int i=0; i
< classes.length; i++) {
            boolean classNamePrinted = false;
            MethodDoc[] methods = classes[i].methods();
            for (int j=0; j < methods.length; j++) {
                Tag[] tags = methods[j].tags(tagName);
                if (tags.length > 0) {
                    if (!classNamePrinted) {
                        System.out.println("\n" + classes[i].name() + "\n");
                        classNamePrinted = true;
                    }
                    System.out.println(methods[j].name());
                    for (int k=0; k
< tags.length; k++) {
                        System.out.println("   " + tags[k].name() + ": "
                            + tags[k].text());
                    }
                }
            }
        }
    }
}
$B$3$N%I%C%/%l%C%H$,8!:w$9$k%?%0$O!"(J tagName $BJQ?t$K$h$C$F;XDj$5$l$F$$$^$9!#(J tagName $BJ8;zNs$NCM$O!"(J $B%+%9%?%`$^$?$OI8=`$N%?%0L>$G$9!#(J $B$3$N%I%C%/%l%C%H$OI8=`=PNO$G$9$,!"(J $B=PNO7A<0$O!"(J $B%U%!%$%k$X$N(J HTML $B=PNO$H$$$C$?$[$+$N7A<0$KJQ99$G$-$^$9!#(J

$BNc(J - $B%+%9%?%`%3%^%s%I9T%*%W%7%g%s$N;HMQ(J

$B%+%9%?%`$N%3%^%s%I9T%*%W%7%g%s$G%I%C%/%l%C%H$r:n@.$9$k$3$H$b$G$-$^$9!#(J $B$=$N:n6HJ}K!$r8+$k$?$a!"(J $B>e5-$N%I%C%/%l%C%HNc$r3HD%$7!"(J $B8!:w$9$k%?%0L>$r;XDj$9$k%3%^%s%I9T%*%W%7%g%s$r;HMQ$G$-$k$h$&$K$7$F$_$^$7$g$&!#(J

$B%+%9%?%`%*%W%7%g%s$r;HMQ$9$k%I%C%/%l%C%H$O!"(J int $B$rJV$9(J optionLength(String $B%*%W%7%g%s(J) $B$H$$$&%a%=%C%I$r$b$C$F$$$kI,MW$,$"$j$^$9!#(J $B%I%C%/%l%C%H$KG'<1$5$;$k3F%+%9%?%`%*%W%7%g%s$K!"(J optionLength $B$,$=$N%*%W%7%g%s$r9=@.$9$kMWAG(J ($B%H!<%/%s(J) $B$N?t$r(J $BJV$5$J$1$l$P$J$j$^$;$s!#(J $B$3$3$G$O!"(J -tag mytag $B$H$$$&7A<0$N%+%9%?%`%*%W%7%g%s$r;HMQ$G$-$k$h$&$K$7$F$_$^$9!#(J $B$3$N%+%9%?%`%*%W%7%g%s$G$O!"(J -tag $B%*%W%7%g%s$=$N$b$N$H$=$NCM$N(J 2 $B$D$NMWAG$G9=@.$5$l$k$N$G!":n@.$9$k%I%C%/%l%C%H$N(J optionLength$B%a%=%C%I$O!"(J -tag $B%*%W%7%g%s$KBP$7$F(J 2 $B$rJV$5$J$/$F$O$J$j$^$;$s!#(J $B$^$?!"G'<1$G$-$J$$%*%W%7%g%s$KBP$7$F$O!"(J0 $B$rJV$7$^$9!#(J

$B3HD%$r;\$7$?%I%C%/%l%C%H$N40A4$J%3!<%I$r

import com.sun.javadoc.*;

public class ListTags {
    public static boolean start(RootDoc root){
        String tagName = readOptions(root.options());
        writeContents(root.classes(), tagName);
        return true;
    }

    private static void writeContents(ClassDoc[] classes, String tagName) {
        for (int i=0; i
< classes.length; i++) {
            boolean classNamePrinted = false;
            MethodDoc[] methods = classes[i].methods();
            for (int j=0; j < methods.length; j++) {
	        Tag[] tags = methods[j].tags(tagName);
	        if (tags.length > 0) {
	            if (!classNamePrinted) {
	                System.out.println("\n" + classes[i].name() + "\n");
	                classNamePrinted = true;
	            }
	            System.out.println(methods[j].name());
	            for (int k=0; k
< tags.length; k++) {
	                System.out.println("   " + tags[k].name() + ": " + tags[k].text());
	            }
	        }
	    }
        }
    }

    private static String readOptions(String[][] options) {
        String tagName = null;
        for (int i = 0; i < options.length; i++) {
            String[] opt = options[i];
	    if (opt[0].equals("-tag")) {
	        tagName = opt[1];
	    }
        }
	return tagName;
    }

    public static int optionLength(String option) {
        if(option.equals("-tag")) {
	    return 2;
        }
        return 0;
    }

    public static boolean validOptions(String options[][],
				       DocErrorReporter reporter) {
	boolean foundTagOption = false;
        for (int i = 0; i
< options.length; i++) {
            String[] opt = options[i];
            if (opt[0].equals("-tag")) {
	        if (foundTagOption) {
	            reporter.printError("Only one -tag option allowed.");
		    return false;
	        } else {
		    foundTagOption = true;
		}
	    }
	}
	if (!foundTagOption) {
	    reporter.printError("Usage: javadoc -tag mytag -doclet ListTags ...");
	}
	return foundTagOption;
    }
}
$B$3$N=$@58e$N%I%C%/%l%C%H$G$O!"(JtagName $BJQ?t$O(J $B%3%^%s%I9T%*%W%7%g%s(J -tag $B$G@_Dj$5$l$^$9!#(J $B$3$N%I%C%/%l%C%H$K$O!"%+%9%?%`%*%W%7%g%s$K(J 2 $B$rJV$9(J optionLength $B%a%=%C%I$,$"$j$^$9!#(J returns two for our custom option. Note that an explicit call to optionLength $B$rL@<(E*$K8F$S=P$9I,MW$O$J$$$3$H$KCm0U$7$F$/$@$5$$!#(J

$B$5$i$K!"$3$N%I%C%/%l%C%H$K$O!"%3%^%s%I9T%*%W%7%g%s$r2r@O$7$F(J -tag $B%*%W%7%g%s$rC5$9(J readOptions $B%a%=%C%I$bDI2C$5$l$F$$$^$9!#(J $B$3$N%a%=%C%I$G$O!"(J use of the fact that the $B%*%W%7%g%s$N>pJs$,4^$^$l$?(J String $B7?$N(J 2 $BRootdoc.options $B%a%=%C%I$rMxMQ$7$F$$$^$9!#(J information. $B$?$H$($P!"

javadoc -foo this that -bar other ...
RootDoc.options $B%a%=%C%I$O
options()[0][0] = "-foo"
options()[0][1] = "this"
options()[0][2] = "that"
options()[1][0] = "-bar"
options()[1][1] = "other"
$BG[Ns$N(J 2 $BHVL\$NE:$(;z$KF~$C$F$$$kMWAG?t$O!"(JoptionLength $B%a%=%C%I$K$h$jH=JL$5$l$^$9!#(J $B$3$NNc$G$O!"(JoptionLength $B$O!"(J-foo $B%*%W%7%g%s$KBP$7$F$O(J 3 $B$rJV$7!"(J-bar $B%*%W%7%g%s$KBP$7$F$O(J 2 $B$rJV$7$^$9!#(J

validOptions $B%a%=%C%I$O!"%3%^%s%I9T%?%0$N;XDj$,@5$7$$$+$I$&$+$r%A%'%C%/$9$k$?$a$N!">JN,2DG=$J%a%=%C%I$G$9!#(J validOptions $B%a%=%C%I$O!"B8:_$9$l$P<+F0E*$K8F$S=P$5$l$k$?$a!"L@<(E*$K8F$S=P$9I,MW$O$"$j$^$;$s!#(J $B$3$N%a%=%C%I$G$O!"%*%W%7%g%s$N;XDj$,@5$7$$>l9g$O(J true $B$rJV$7!"$=$&$G$J$$>l9g$O(J false $B$rJV$9$h$&$K$7$^$9!#(J $B$^$?!";XDj$N@5$7$/$J$$%3%^%s%I9T%*%W%7%g%s$,8+$D$+$C$?>l9g$K!"(JvalidOptions $B$+$iE,@Z$J%(%i!<%a%C%;!<%8$rI=<($9$k$3$H$b$G$-$^$9!#(J $B$3$N%I%C%/%l%C%H$N(J validOptions $B%a%=%C%I$G$O!"(J-tag $B%*%W%7%g%s$,(J 1 $B$D;XDj$5$l$F$$$k$+$I$&$+!"$=$7$F(J 2 $B$D0J>e;XDj$5$l$F$$$J$$$+$I$&$+$r%A%'%C%/$7$F$$$^$9!#(J


Copyright © 1995-98 Sun Microsystems, Inc. All Rights Reserved.

$B%3%a%s%H$NAwIU@h(J: javadoc-tool@sun.com
Sun