JUnit Plug-in での起動を調べる その 1
今日はあまり時間がなかったので、思ったように進みませんでした。
昨日、Project Looking Glass を実行させるだけはできましたが、いろいろと足りないことがあります。そこで、JUnit Plug-in ではどうやっているんだろうと調べてみました。
WrpeLaunchConfigurationDelegate に相当する JUnit Plug-in のクラスは JUnitLaunchConfiguration クラスです。このクラスの launch メソッドを見てみると... ありゃ、ない ^^;;
ということは、その親クラスの JUnitBaseLaunchConfiguration を見てみないと。ということで、
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor pm) throws CoreException {
IType[] testTypes = getTestTypes(configuration, pm);
IVMInstall install= getVMInstall(configuration);
IVMRunner runner = install.getVMRunner(mode);
if (runner == null) {
abort(MessageFormat.format(JUnitMessages.JUnitBaseLaunchConfiguration_error_novmrunner, new String[]{install.getId()}), null, IJavaLaunchConfigurationConstants.ERR_VM_RUNNER_DOES_NOT_EXIST);
}
int port= SocketUtil.findFreePort();
VMRunnerConfiguration runConfig= launchTypes(configuration, mode, testTypes, port);
setDefaultSourceLocator(launch, configuration);
launch.setAttribute(PORT_ATTR, Integer.toString(port));
launch.setAttribute(TESTTYPE_ATTR, testTypes[0].getHandleIdentifier());
runner.run(runConfig, launch, pm);
}はじめの getTestTypes メソッドはこのクラスで定義されているのですが、問題は次の getVMInstall メソッドです。これが定義されていないのです。
どこで、定義されているんだろうと思ったら、親クラスの org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate クラスでした。
あれっ、WrpeLaunchConfigurationDelegate クラスの親クラスは LaunchConfigurationDelegate クラスなのに、ここでは違うクラスかぁ。なんということはなく、AbstractJavaLaunchConfigurationDelegate クラスは LaunchConfigurationDelegate クラスの派生クラスなのでした。Java の起動に特化したクラスのようです。
WrpeLaunchConfigurationDelegate クラスでは IVMInstall オブジェクトを取得するのに、JavaRuntime.getDefaultVMInstall() メソッドを使用していましたが、AbstractJavaLaunchConfigurationDelegate#getVMInstall メソッドの方がよさげです。
ということで、WrpeLaunchConfigurationDelegate クラスも親クラスを LaunchConfigurationDelegate クラスから AbstractJavaLaunchConfigurationDelegate クラスに変更しました。