javaclassにCode属性とStackMapTable属性の解析機能を実装してコミットしましたよ。
→GitHub - unageanu/javaclass
以下はjavaclassを使ってクラスの解析結果を表示する例です。Code属性の解析をサポートしたので(昔と違って)javapに近い結果が得られるようになっています。
require "javaclass" open( "./java_class/HelloWorld.class", "r+b" ) {|io| jc = JavaClass.from io puts jc.to_s }
解析対象のクラスは次のとおり。
public class HelloWorld { public static void main ( String[] args ) { String str = "Hello World!"; System.out.println( str ); } }
実行結果です。
// version 50.0
// source HelloWorld.java
public class HelloWorld
extends java.lang.Object {
public void <init> ( ) {
HelloWorld this;
0 : aload_0 // line : 1
1 : invokespecial 8
4 : return
}
public static void main ( java.lang.String[] arg1 ) {
java.lang.String[] args;
java.lang.String str;
0 : ldc 16 // line : 3
2 : astore_1
3 : getstatic 18
6 : aload_1 // line : 4
7 : invokevirtual 24
10 : return
}
}さて、gemも作っておこうかなと思ったけど、gemcutterにすでに同名のgemがアップロードされとる!..orzどうしたもんかな。