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);
これにはいったいどんな値が代入されているのでしょうか?
今日は時間がなくなってしまったので、明日はここから調べ続けてみます。