今更JD-Eclipseを触って見るなど
はじめに
Pleiadesに同梱されているJadClipseが惜しい感じなので他に良いのがないか見てみたところ、JD-Eclipseと言うのが良いらしい。
JD-Eclipseを知ったのが世間から約1年遅れであるようなので、自分のアンテナをもっと高くしなくてはと同時に思った。とほほ。
環境
- Pleiades 3.5
インストール方法
以下のサイトを参照する。本家サイトは英語で書いてくれているので、そちらも読んだ方が良い。フランス語じゃ無くて良かった…。
- 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (1/2):ユカイ、ツーカイ、カイハツ環境!(13) - @IT…@ITの記事
- http://java.decompiler.free.fr/?q=jdeclipse…本家サイト
使ってみて分かったこと
以下のことが分かった。
- ナビゲータービューから使おうとしていけない。パッケージエクスローラーかプロジェクトエクスプローラーから使わなければならない。
- ライブラリーとして参照しているjarの中を見るのは簡単だが、それ以外をみる方法はよく分からない。例えば、ソースディレクトリにあるファイルから生成したクラスファイルを、逆コンパイルする方法とか。見方がよく分からないときは、http://java.decompiler.free.fr/?q=jdguiを使った方がおそらく悩まなくて良い。
逆コンパイル結果の例
逆コンパイル結果はそれなりにインテリジェントなようです。
例えば、逆コンパイル前のコードとして、以下のコードがあったとします。StringBuilderを使っていると言うことに注目してください。
0 aload_0 [this] 1 invokespecial org.apache.wicket.protocol.http.WebApplication() [8] 4 iconst_0 5 istore_1 [i] 6 goto 29 9 new java.lang.StringBuilder [10] 12 dup 13 ldc <String "a"> [12] 15 invokespecial java.lang.StringBuilder(java.lang.String) [14] 18 iload_1 [i] 19 invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [17] 22 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [21] 25 astore_2 26 iinc 1 1 [i] 29 iload_1 [i] 30 bipush 10 32 if_icmplt 9 35 return
逆コンパイル結果は以下のようになります。
ちゃんと、通常の文字列結合に直されていますね。
public WicketApplication() { for (int i = 0; i < 10; i++) String str = "a" + i; }