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 クラスに変更しました。