gradle: Add support choosing Gradle JVM
[idea/community.git] /
1 package org.jetbrains.plugins.gradle.remote;
2
3 import com.intellij.openapi.project.Project;
4 import com.intellij.openapi.projectRoots.JdkUtil;
5 import com.intellij.openapi.projectRoots.ProjectJdkTable;
6 import com.intellij.openapi.projectRoots.Sdk;
7 import com.intellij.openapi.roots.ProjectRootManager;
8 import com.intellij.util.containers.ContainerUtilRt;
9 import org.jetbrains.annotations.Nullable;
10
11 import java.io.File;
12 import java.util.ArrayList;
13 import java.util.List;
14
15 /**
16  * Encapsulates functionality of deciding what java should be used by the gradle process.
17  * <p/>
18  * Thread-safe.
19  * 
20  * @author Denis Zhdanov
21  * @since 2/27/12 2:20 PM
22  */
23 public class GradleJavaHelper {
24
25   public static final String GRADLE_JAVA_HOME_KEY = "gradle.java.home";
26   
27   @SuppressWarnings("MethodMayBeStatic")
28   @Nullable
29   public String getJdkHome(@Nullable Project project) {
30     List<String> candidates = ContainerUtilRt.newArrayList();
31     candidates.add(System.getProperty(GRADLE_JAVA_HOME_KEY));
32     candidates.add(System.getenv("JAVA_HOME"));
33     for (String candidate : candidates) {
34       if (candidate != null && JdkUtil.checkForJdk(new File(candidate))) {
35         return candidate;
36       }
37     }
38
39     if (project != null) {
40       Sdk sdk = ProjectRootManager.getInstance(project).getProjectSdk();
41       if (sdk != null) {
42         String path = sdk.getHomePath();
43         if (path != null && JdkUtil.checkForJdk(new File(path))) {
44           return path;
45         }
46       }
47     }
48
49     Sdk[] sdks = ProjectJdkTable.getInstance().getAllJdks();
50     if (sdks != null) {
51       for (Sdk sdk : sdks) {
52         String path = sdk.getHomePath();
53         if (path != null && JdkUtil.checkForJdk(new File(path))) {
54           return path;
55         }
56       }
57     }
58     
59     return null;
60   }
61 }