LoginSignup
0
0

More than 3 years have passed since last update.

CFRでclassファイルをデコンパイル

Posted at

経緯

javaでカバレッジ上げろと言われてもどこを通ってないのかさっぱりわからなかったので、コンパイル時にどう展開されているのか調べたかった。

解決方法

デコンパイルしてclassファイルを確認すればいい。日本語のサイトだとJADというツールが引っかかるが、これは古いのでCFRというデコンパイラを使う。

試してみる

シンプルなtry-with-resourcesがどう展開されているのかを確認する。

  • Hoge.java
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.stream.Collectors;

public class Hoge {
    public String config;
    private Hoge() {
        try (BufferedReader br = new BufferedReader(new FileReader("config"))) {
            config = br.lines().collect(Collectors.joining("\n"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
  • デコンパイルする
$ javac Hoge.java
$ java -jar cfr-0.150.jar --tryresources false --decodefinally false Hoge.class > HogeHoge.java
  • 結果
/*
 * Decompiled with CFR 0.150.
 */
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.stream.Collectors;

public class Hoge {
    public String config;

    private Hoge() {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("config"));
            try {
                this.config = bufferedReader.lines().collect(Collectors.joining("\n"));
            }
            catch (Throwable throwable) {
                try {
                    bufferedReader.close();
                }
                catch (Throwable throwable2) {
                    throwable.addSuppressed(throwable2);
                }
                throw throwable;
            }
            bufferedReader.close();
        }
        catch (IOException iOException) {
            iOException.printStackTrace();
        }
    }
}

余談

カバレッジの確認でjacocoを利用していたが、jacocoのバージョンを上げたら余計な分岐の確認をしなくなったのか、無理してでコンパイルしなくても網羅できるようになった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0