Eclipseのコンパイラでのコンパイル

前の日記の通りAntのjavacタスクでEclipseコンパイラを使うと、
コンパイルが通らないクラスでも、failonerror="false"のときは
クラスファイルが生成される。
興味本位で、どんなクラスファイルが生成されるのかを調べてみる。


まずは、ビルドスクリプト


<?xml version="1.0" encoding="Shift_JIS"?>


<javac srcdir="src" destdir="bin" failonerror="false"
compiler="org.eclipse.jdt.core.JDTCompilerAdapter"/>


なんてことはない。


コンパイルが通らないソースはこんな感じ。


public class Test {
public static void main(String[] args) {
String str = null;
String str1 = 1; // Stringにintを入れてる
}

public int test() {
return 1;
}
}


このソースを、手元にあったEclipse3.1.2のコンパイラコンパイルする。


Eclipseコンパイラを使う時は、pluginフォルダにあるorg.eclipse.jdt.core_3.1.2.jarと、
これを解凍すると出てくるjdtCompilerAdapter.jarにパスを通して実行すればよい。


そして、実行した結果をJadで逆コンパイルしてみると・・・


public class Test
{

public Test()
{
}

public static void main(String args[])
{
throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from int to String\n");
}

public int test()
{
return 1;
}
}

コンパイルエラーのメッセージをErrorでthrowするように、書き換えてるみたい。
ふーん。


そいうや、テストケースでコンパイルエラーがあっても、Eclipse上ならば
実行できたりするなぁ。そして、上のようなErrorが出てたような。