2 * Copyright 2000-2011 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.execution.util;
18 import com.intellij.execution.CantRunException;
19 import com.intellij.execution.CommonJavaRunConfigurationParameters;
20 import com.intellij.execution.JavaExecutionUtil;
21 import com.intellij.execution.configurations.JavaParameters;
22 import com.intellij.execution.configurations.RunConfigurationModule;
23 import com.intellij.execution.configurations.SimpleJavaParameters;
24 import com.intellij.execution.junit.JUnitUtil;
25 import com.intellij.openapi.module.Module;
26 import com.intellij.openapi.project.Project;
27 import com.intellij.openapi.projectRoots.JavaSdk;
28 import com.intellij.openapi.projectRoots.Sdk;
29 import com.intellij.openapi.projectRoots.ex.PathUtilEx;
30 import com.intellij.openapi.roots.ModuleRootManager;
31 import com.intellij.openapi.util.text.StringUtil;
32 import com.intellij.openapi.vfs.VirtualFile;
33 import com.intellij.psi.PsiClass;
34 import com.intellij.psi.PsiFile;
42 public class JavaParametersUtil {
43 private JavaParametersUtil() { }
45 public static void configureConfiguration(SimpleJavaParameters parameters, CommonJavaRunConfigurationParameters configuration) {
46 ProgramParametersUtil.configureConfiguration(parameters, configuration);
48 Project project = configuration.getProject();
49 Module module = ProgramParametersUtil.getModule(configuration);
51 String vmParameters = configuration.getVMParameters();
52 if (vmParameters != null) {
53 vmParameters = ProgramParametersUtil.expandPath(vmParameters, module, project);
55 if (parameters.getEnv() != null) {
56 for (Map.Entry<String, String> each : parameters.getEnv().entrySet()) {
57 vmParameters = StringUtil.replace(vmParameters, "$" + each.getKey() + "$", each.getValue(), false); //replace env usages
62 parameters.getVMParametersList().addParametersString(vmParameters);
65 public static int getClasspathType(final RunConfigurationModule configurationModule, final String mainClassName,
66 final boolean classMustHaveSource) throws CantRunException {
67 final Module module = configurationModule.getModule();
68 if (module == null) throw CantRunException.noModuleConfigured(configurationModule.getModuleName());
69 final PsiClass psiClass = JavaExecutionUtil.findMainClass(module, mainClassName);
70 if (psiClass == null) {
71 if (!classMustHaveSource) return JavaParameters.JDK_AND_CLASSES_AND_TESTS;
72 throw CantRunException.classNotFound(mainClassName, module);
74 final PsiFile psiFile = psiClass.getContainingFile();
75 if (psiFile == null) throw CantRunException.classNotFound(mainClassName, module);
76 final VirtualFile virtualFile = psiFile.getVirtualFile();
77 if (virtualFile == null) throw CantRunException.classNotFound(mainClassName, module);
78 Module classModule = new JUnitUtil.ModuleOfClass().convert(psiClass);
79 if (classModule == null) classModule = module;
80 return ModuleRootManager.getInstance(classModule).getFileIndex().
81 isInTestSourceContent(virtualFile) ? JavaParameters.JDK_AND_CLASSES_AND_TESTS : JavaParameters.JDK_AND_CLASSES;
84 public static void configureModule(final RunConfigurationModule runConfigurationModule,
85 final JavaParameters parameters,
86 final int classPathType,
87 final String jreHome) throws CantRunException {
88 Module module = runConfigurationModule.getModule();
90 throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName());
92 configureModule(module, parameters, classPathType, jreHome);
95 public static void configureModule(Module module, JavaParameters parameters, int classPathType, String jreHome) throws CantRunException {
96 parameters.configureByModule(module, classPathType, createModuleJdk(module, jreHome));
99 public static void configureProject(Project project, final JavaParameters parameters, final int classPathType, final String jreHome)
100 throws CantRunException {
101 parameters.configureByProject(project, classPathType, createProjectJdk(project, jreHome));
104 private static Sdk createModuleJdk(final Module module, final String jreHome) throws CantRunException {
105 return jreHome == null ? JavaParameters.getModuleJdk(module) : createAlternativeJdk(jreHome);
108 private static Sdk createProjectJdk(final Project project, final String jreHome) throws CantRunException {
109 return jreHome == null ? createProjectJdk(project) : createAlternativeJdk(jreHome);
112 private static Sdk createProjectJdk(final Project project) throws CantRunException {
113 final Sdk jdk = PathUtilEx.getAnyJdk(project);
115 throw CantRunException.noJdkConfigured();
120 private static Sdk createAlternativeJdk(final String jreHome) throws CantRunException {
121 final Sdk jdk = JavaSdk.getInstance().createJdk("", jreHome);
122 if (jdk == null) throw CantRunException.noJdkConfigured();