読者です 読者をやめる 読者になる 読者になる

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