2013年5月30日

クラスファイルを検索してクラス情報を抜き出す方法

「ライブラリ更新しました!」
「新しい機能追加しました!」

とライブラリだけ渡されたのですが、どんな更新がされたのか分からず困り果てました。

「クラス情報からとればいいんじゃね?」

というアイディアが。

指定パッケージ内のクラス一覧を取得するサンプル
上記を参考にJavaFileManagerを使うことで、指定パッケージのクラス一覧とそのメソッドを出力することができました。
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
JavaFileManager fm = compiler.getStandardFileManager(
        new DiagnosticCollector<JavaFileObject>(), null, null);

Set<JavaFileObject.Kind> kind = new HashSet<JavaFileObject.Kind>(){{
    add(JavaFileObject.Kind.CLASS);
}};

List<String> searchPackage = new ArrayList<String>(){{
    add("net.spy.memcached"); // 検索したいパッケージ
}};

for (String packageName : searchPackage){
    for (JavaFileObject f : fm.list(
            StandardLocation.CLASS_PATH, packageName, kind, false)) {
        Class<?> clazz = Class.forName(packageName + "."
                + f.getName().replaceAll("\\.class$", ""));
        System.out.println(clazz.getName());
        for (Method method : clazz.getMethods()) {
            System.out.println("\t" + method);
        }
    }
}

前後のdiffをとることで、増えたクラスやメソッドを簡単に見つける事が出来ました。
便利になったものです。

0 コメント:

コメントを投稿