16510


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

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

* * *

(追記 9/11)

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

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

[code]

    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();
        }
    }
    
[/code]

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

[code]

    {
      "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"
        }
      ]
    }
    
[/code]


CC BY-SA 3.0
2015-09-08T15:51:41.397
16396
2015-09-11T05:52:48.220
2015-09-10T15:40:34.467
754
754
question
java
.class ファイルに含まれる型情報を json などスクリプトで扱いやすい形式に変換するには？


まずRuntime使ってcmd.exeを実行しそのコマンドとしてjavapを動かす  
実行結果を文字列として受け取って、あとはDocumentBuilderとかElementクラスを使って書き出せば出来る気がする


CC BY-SA 3.0
2015-09-10T05:15:32.017
16461
2015-09-10T05:15:32.017
10810
16396
answer


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>


CC BY-SA 3.0
2015-09-11T05:52:48.220
16510
2015-09-11T05:52:48.220
12233
16396
answer