本来ならやっちゃダメなミス。
Git にプッシュする際に、パッケージの階層調整をしていたらついついコントローラのファイルを削除してしまいました。
しかも、まだ Git にプッシュしたことがないファイルです。
「IntelliJ IDEA」や「Eclipse」などの IDE からファイル削除すると、Windows も Mac も「ゴミ箱」に入らないのですよね・・・。
そこで、せめてもの気休めで class ファイルから逆コンパイルして、元のソースの形跡が少しでも確認できるところまで頑張ってみました。
jarファイルの解凍またはclassファイルの特定
削除してしまったファイルを一度でもビルドし class ファイルまたは jar ファイルが残っていることが前提となります。
まずは、jar コマンドで jar ファイルの解凍をします。
1 | $ jar xf project.jar |
jar を解凍した場合は、この段階で class ファイル群がズラっと出力されます。
もちろん、build ディレクトリには class ファイルがあるので、そちらを参照しても良いと思います。
逆コンパイル(アセンブリ)のツールを設定
逆アセンブラは javap で実行できますが、出力された結果だけでは元ファイルの復元は難しそうです。
1 | $ javap -c hoge.class |
次に逆コンパイラをしますが、jad コマンドは残念ながら JDK をインストールしていても入っていません。
よって、Mac の場合は brew を使ってインストールします。
(少し時間がかかります)
1 2 | $ brew tap caskroom/cask $ brew install caskroom/cask/jad |
では、実際に class ファイルを逆コンパイルしてみます。
1 | $ jad -a hoge.class |
う~ん、出力結果に邪魔なコードが多いですね。
-a オプションをなくしてみます。
1 | $ jad hoge.class |
少しはマシになりましたが、Java のコードが出力されるうえにコメントも残っていないので少々辛いものがあります。
アノテーションの定義がないのがションボリです。
また、コントローラ内で定義していた data class は別クラスファイルとして出力されているので、個別に逆コンパイルして中身を参照しないといけません。
自業自得とはいえ、この手の失敗は凹む以外の何もないですね・・・。
無駄なコミットログが増えたとしても、こまめにコミットしておくべきですね。