.class ファイルに含まれる型情報を json などスクリプトで扱いやすい形式に変換するには?

投稿者: Anonymous

java の .class ファイルは、 javapコマンドなどで型情報を取得できます。
スクリプトで処理を行いたいため、 javap で取得できるような情報を、 json や xml など、スクリプトで処理しやすい形に変換したいと考えています。

これを実現する方法はありますでしょうか。


(追記 9/11)

欲しいものは、コマンドラインから起動するツールです。誤解を与えてしまったらすいません。

イメージとしては、次のような java ファイルをコンパイルした .class ファイルがあったときに、

public class HelloWorld {
    private String name;

    HelloWorld(String name) {
        this.name = name;
    }

    public void hello() {
        System.out.println("Hello, " + name);
    }

    public static void main (String[] args) {
        HelloWorld helloWorld = new HelloWorld("Foo");
        helloWorld.hello();
    }
}

次のような出力をしてくれるツールです。

{
  "type": "class",
  "name": "HelloWorld",
  "visibility": "public",
  "fields": [
    {
      "name": "name",
      "type": "java.lang.String",
      "visibility": "private",
      "static": false
    }
  ],
  "methods": [
    {
      "name": "HelloWorld",
      "visibility": "package",
      "static": false,
      "args": [
        "java.lang.String"
      ]
    },
    {
      "name": "hello",
      "visibility": "public",
      "static": false,
      "args": [],
      "ret": "void"
    },
    {
      "name": "main",
      "visibility": "public",
      "static": true,
      "args": [
        "java.lang.String[]"
      ],
      "ret": "void"
    }
  ]
}

解決

Javadocを出す仕組みをカスタマイズすることで実現できます。
http://argius.hatenablog.jp/entry/2014/01/07/222423

Docletを実装したクラスでは、例示していただいたJSONの内容にかなり近い、次のようなクラスをハンドリングできます。
https://docs.oracle.com/javase/jp/6/jdk/api/javadoc/doclet/com/sun/javadoc/MethodDoc.html
https://docs.oracle.com/javase/jp/6/jdk/api/javadoc/doclet/com/sun/javadoc/ClassDoc.html

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *