execution: extract check for alternative jre; check for working directory (IDEA-77754)

This commit is contained in:
Anna Kozlova
2012-01-30 18:09:17 +04:00
parent b6c9bd0b0b
commit 6028286aea
6 changed files with 53 additions and 37 deletions
@@ -24,6 +24,7 @@ import com.intellij.execution.junit.RefactoringListeners;
import com.intellij.execution.process.OSProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.openapi.components.PathMacroManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
@@ -31,7 +32,6 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.impl.JavaSdkImpl;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
@@ -138,19 +138,13 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
}
public void checkConfiguration() throws RuntimeConfigurationException {
if (ALTERNATIVE_JRE_PATH_ENABLED){
if (ALTERNATIVE_JRE_PATH == null ||
ALTERNATIVE_JRE_PATH.length() == 0 ||
!JavaSdkImpl.checkForJre(ALTERNATIVE_JRE_PATH)){
throw new RuntimeConfigurationWarning(ExecutionBundle.message("jre.path.is.not.valid.jre.home.error.mesage", ALTERNATIVE_JRE_PATH));
}
}
JavaParametersUtil.checkAlternativeJRE(this);
final JavaRunConfigurationModule configurationModule = getConfigurationModule();
final PsiClass psiClass = configurationModule.checkModuleAndClassName(MAIN_CLASS_NAME, ExecutionBundle.message("no.main.class.specified.error.text"));
if (!PsiMethodUtil.hasMainMethod(psiClass)) {
throw new RuntimeConfigurationWarning(ExecutionBundle.message("main.method.not.found.in.class.error.message", MAIN_CLASS_NAME));
}
ProgramParametersUtil.checkWorkingDirectoryExist(this, getProject(), configurationModule.getModule());
JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this);
}
@@ -17,9 +17,11 @@ package com.intellij.execution.util;
import com.intellij.execution.CantRunException;
import com.intellij.execution.CommonJavaRunConfigurationParameters;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RunConfigurationModule;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.configurations.SimpleJavaParameters;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.openapi.module.Module;
@@ -122,4 +124,15 @@ public class JavaParametersUtil {
if (jdk == null) throw CantRunException.noJdkConfigured();
return jdk;
}
public static void checkAlternativeJRE(CommonJavaRunConfigurationParameters configuration) throws RuntimeConfigurationWarning {
if (configuration.isAlternativeJrePathEnabled()) {
if (configuration.getAlternativeJrePath() == null ||
configuration.getAlternativeJrePath().length() == 0 ||
!JavaSdk.checkForJre(configuration.getAlternativeJrePath())) {
throw new RuntimeConfigurationWarning(
ExecutionBundle.message("jre.path.is.not.valid.jre.home.error.mesage", configuration.getAlternativeJrePath()));
}
}
}
}
@@ -17,6 +17,7 @@ package com.intellij.execution.util;
import com.intellij.execution.CommonProgramRunConfigurationParameters;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.configurations.SimpleProgramParameters;
import com.intellij.openapi.components.PathMacroManager;
import com.intellij.openapi.module.Module;
@@ -26,6 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.PathUtil;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
@@ -36,6 +38,19 @@ public class ProgramParametersUtil {
parameters.getProgramParametersList().addParametersString(configuration.getProgramParameters());
parameters.setWorkingDirectory(getWorkingDir(configuration, project, module));
parameters.setupEnvs(configuration.getEnvs(), configuration.isPassParentEnvs());
if (parameters.getEnv() != null) {
Map<String, String> expanded = new HashMap<String, String>();
for (Map.Entry<String, String> each : parameters.getEnv().entrySet()) {
expanded.put(each.getKey(), expandPath(each.getValue(), module, project));
}
parameters.setEnv(expanded);
}
}
public static String getWorkingDir(CommonProgramRunConfigurationParameters configuration, Project project, Module module) {
String workingDirectory = configuration.getWorkingDirectory();
VirtualFile baseDir = project.getBaseDir();
@@ -46,15 +61,14 @@ public class ProgramParametersUtil {
if (!FileUtil.isAbsolute(workingDirectory) && baseDir != null) {
workingDirectory = baseDir.getPath() + "/" + workingDirectory;
}
parameters.setWorkingDirectory(workingDirectory);
return workingDirectory;
}
parameters.setupEnvs(configuration.getEnvs(), configuration.isPassParentEnvs());
if (parameters.getEnv() != null) {
Map<String, String> expanded = new HashMap<String, String>();
for (Map.Entry<String, String> each : parameters.getEnv().entrySet()) {
expanded.put(each.getKey(), expandPath(each.getValue(), module, project));
}
parameters.setEnv(expanded);
public static void checkWorkingDirectoryExist(CommonProgramRunConfigurationParameters configuration, Project project, Module module)
throws RuntimeConfigurationWarning {
final String workingDir = getWorkingDir(configuration, project, module);
if (!new File(workingDir).exists()) {
throw new RuntimeConfigurationWarning("Working directory '" + workingDir + "' doesn't exist");
}
}
@@ -16,16 +16,19 @@
package com.intellij.execution.junit;
import com.intellij.execution.CantRunException;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configurations.*;
import com.intellij.execution.testframework.SourceScope;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.JavaDirectoryService;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScopes;
@@ -80,14 +83,8 @@ class TestDirectory extends TestPackage {
@Override
public void checkConfiguration() throws RuntimeConfigurationException {
if (myConfiguration.isAlternativeJrePathEnabled()) {
if (myConfiguration.getAlternativeJrePath() == null ||
myConfiguration.getAlternativeJrePath().length() == 0 ||
!JavaSdk.checkForJre(myConfiguration.getAlternativeJrePath())) {
throw new RuntimeConfigurationWarning(
ExecutionBundle.message("jre.path.is.not.valid.jre.home.error.mesage", myConfiguration.getAlternativeJrePath()));
}
}
JavaParametersUtil.checkAlternativeJRE(myConfiguration);
ProgramParametersUtil.checkWorkingDirectoryExist(myConfiguration, myConfiguration.getProject(), myConfiguration.getConfigurationModule().getModule());
final String dirName = myConfiguration.getPersistentData().getDirName();
if (dirName == null || dirName.isEmpty()) {
throw new RuntimeConfigurationError("Directory is not specified");
@@ -36,13 +36,13 @@ import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.testframework.*;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.JavaSdkType;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
@@ -179,14 +179,8 @@ public abstract class TestObject implements JavaCommandLine {
};
public void checkConfiguration() throws RuntimeConfigurationException{
if (myConfiguration.isAlternativeJrePathEnabled()){
if (myConfiguration.getAlternativeJrePath() == null ||
myConfiguration.getAlternativeJrePath().length() == 0 ||
!JavaSdk.checkForJre(myConfiguration.getAlternativeJrePath())){
throw new RuntimeConfigurationWarning(
ExecutionBundle.message("jre.path.is.not.valid.jre.home.error.mesage", myConfiguration.getAlternativeJrePath()));
}
}
JavaParametersUtil.checkAlternativeJRE(myConfiguration);
ProgramParametersUtil.checkWorkingDirectoryExist(myConfiguration, myConfiguration.getProject(), myConfiguration.getConfigurationModule().getModule());
}
public SourceScope getSourceScope() {
@@ -29,6 +29,8 @@ import com.intellij.execution.configurations.*;
import com.intellij.execution.junit.RefactoringListeners;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.SourceScope;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
import com.intellij.openapi.components.PathMacroManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
@@ -338,6 +340,8 @@ public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigu
}
}
JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this);
ProgramParametersUtil.checkWorkingDirectoryExist(this, getProject(), getConfigurationModule().getModule());
JavaParametersUtil.checkAlternativeJRE(this);
//TODO add various checks here
}