Skip to content

Instantly share code, notes, and snippets.

@torutk
Created December 8, 2013 06:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torutk/7854023 to your computer and use it in GitHub Desktop.
Save torutk/7854023 to your computer and use it in GitHub Desktop.
Javadoc doclet code to print a list of Java standard APIs' class name and method name which is add since Java SE 8.
/*
* Javadoc用docletクラスを作成する。
* 次の@sinceタグのものだけリストアップする。
* @since 1.8
* @since 8
* @since JDK1.8
* sinceタグの抽出方法は、ClassDoc/MethodDOcのtags("@since")を呼出しTag[]を取得する。
*
* 注意点
* - コンパイル時にJDKのtools.jarをクラスパスに追加する(com.sun.javadocパッケージを使用するため)
* 実行方法
* - JDK 8のsrc.zipを解凍したディレクトリにカレントディレクトリを移動して以下を実行
* $ javadoc -docletpath c:/Users/torutk/Documents/work/MyDoclets/build/classes \
* -doclet jp.gr.java_conf.torutk.doclets.ListBySinceDoclet -subpackages java:javax:org
*
*/
package jp.gr.java_conf.torutk.doclets;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Tag;
public class ListBySinceDoclet {
private static final String TAG_SINCE = "@since";
public static boolean start(RootDoc root) {
ClassDoc[] classDocs = root.classes();
for (ClassDoc classDoc : classDocs) {
Tag[] sinceTags = classDoc.tags(TAG_SINCE);
if (isSinceTagMatches(sinceTags)) {
System.out.println(classDoc.qualifiedName() + " [class]");
}
MethodDoc[] methodDocs = classDoc.methods();
for (MethodDoc methodDoc : methodDocs) {
if (isSinceTagMatches(methodDoc.tags(TAG_SINCE))) {
System.out.println(classDoc.qualifiedName() + "#" + methodDoc.name());
}
}
}
return true;
}
/**
* 指定されたタグ一覧の中に、"@since"タグがあり、値が"1.8|8|JDK1.8"であるものの有無を検査する。
*
* @param tags
* @return 値が"1.8|8|JDK1.8"の"@since"タグがあるか
*/
private static boolean isSinceTagMatches(Tag[] tags) {
for (Tag tag : tags) {
if ("1.8".equals(tag.text())) {
return true;
} else if ("8".equals(tag.text())) {
return true;
} else if ("JDK1.8".equals(tag.text())) {
return true;
}
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment