JUnit Plug-in での起動を調べる その 3

引き続き JUnit Plug-in を調べていきましょう。

昨日は IType を取得するところまでいったので、次の VMRunnerConfiguration オブジェクトを取得するところです。

JUnitBaseLaunchConfiguration#launch の中では launchTypes メソッドをコールして VMRunnerConfiguration オブジェクトを生成しています。

	protected VMRunnerConfiguration launchTypes(ILaunchConfiguration configuration,
					String mode, IType[] tests, int port) throws CoreException {
		File workingDir = verifyWorkingDirectory(configuration);
		String workingDirName = null;
		if (workingDir != null) 
			workingDirName = workingDir.getAbsolutePath();
		
		// Program & VM args
		String vmArgs= getVMArguments(configuration);
		ExecutionArguments execArgs = new ExecutionArguments(vmArgs, ""); //$NON-NLS-1$
		String[] envp= DebugPlugin.getDefault().getLaunchManager().getEnvironment(configuration);

		VMRunnerConfiguration runConfig= createVMRunner(configuration, tests, port, mode);
		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
		runConfig.setWorkingDirectory(workingDirName);
		runConfig.setEnvironment(envp);

		Map vmAttributesMap = getVMSpecificAttributesMap(configuration);
		runConfig.setVMSpecificAttributesMap(vmAttributesMap);

		String[] bootpath = getBootpath(configuration);
		runConfig.setBootClassPath(bootpath);
		
		return runConfig;
	}

まずはじめに workingDir を取得しているようです。workingDir も CLASSPATH に含めなくてはいけないので、これは当然の処理なのでしょう。

で、その verifyWorkingDirectory メソッドですが、これは AbstractJavaLaunchConfigurationDelegate クラスで定義されています。ところで、AbstractJavaLaunchConfigurationDelegate クラスには verifyWorkingDirectory メソッドの他に getWorkinDirectory というメソッドもあります。何が違うんでしょうね?

AbstractJavaLaunchConfigurationDelegate クラスのソースを見てみると...

	public File getWorkingDirectory(ILaunchConfiguration configuration)
			throws CoreException {
		return verifyWorkingDirectory(configuration);
	}

はぁ? 何で、こんなことするんでしょう? どちらかに統一すればいいのに。

まぁ、いいや。

次の vmArgs は特に問題ないと思います。実際に Project Looking Glass で使用する場合にはここに追加すればいいのでしょう。

それから envp という変数が出てきます。

		String[] envp= DebugPlugin.getDefault().getLaunchManager().getEnvironment(configuration);

これにはいったいどんな値が代入されているのでしょうか?

今日は時間がなくなってしまったので、明日はここから調べ続けてみます。