Created
December 8, 2013 06:44
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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