summaryrefslogtreecommitdiff
path: root/python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java')
-rw-r--r--python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java b/python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java
index 8e75e634755b..9d22af8c03bf 100644
--- a/python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java
+++ b/python/src/com/jetbrains/python/sdk/flavors/WinPythonSdkFlavor.java
@@ -15,7 +15,9 @@
*/
package com.jetbrains.python.sdk.flavors;
+import com.google.common.collect.ImmutableMap;
import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.io.WindowsRegistryUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -23,15 +25,17 @@ import com.intellij.openapi.vfs.newvfs.NewVirtualFile;
import com.jetbrains.python.PythonHelpersLocator;
import java.io.File;
-import java.util.Collection;
-import java.util.Set;
-import java.util.TreeSet;
+import java.util.*;
/**
* @author yole
*/
public class WinPythonSdkFlavor extends CPythonSdkFlavor {
public static WinPythonSdkFlavor INSTANCE = new WinPythonSdkFlavor();
+ private static Map<String, String> ourRegistryMap =
+ ImmutableMap.of("HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore", "python.exe",
+ "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Python\\PythonCore", "python.exe",
+ "HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython", "ipy.exe");
private WinPythonSdkFlavor() {
}
@@ -48,6 +52,7 @@ public class WinPythonSdkFlavor extends CPythonSdkFlavor {
for (String name : exe_names) {
findInstallations(candidates, name, "C:\\", "C:\\Program Files\\");
findInPath(candidates, name);
+ findInRegistry(candidates);
}
}
@@ -59,6 +64,7 @@ public class WinPythonSdkFlavor extends CPythonSdkFlavor {
public static void findInPath(Collection<String> candidates, String exeName) {
final String path = System.getenv("PATH");
+ if (path == null) return;
for (String pathEntry : StringUtil.split(path, ";")) {
if (pathEntry.startsWith("\"") && pathEntry.endsWith("\"")) {
if (pathEntry.length() < 2) continue;
@@ -71,6 +77,25 @@ public class WinPythonSdkFlavor extends CPythonSdkFlavor {
}
}
+ public static void findInRegistry(Collection<String> candidates) {
+ for (Map.Entry<String, String> entry : ourRegistryMap.entrySet()) {
+ final String prefix = entry.getKey();
+ final String exePath = entry.getValue();
+ List<String> strings = WindowsRegistryUtil.readRegistryBranch(prefix);
+ for (String string : strings) {
+ final String path =
+ WindowsRegistryUtil.readRegistryDefault(prefix + "\\" + string +
+ "\\InstallPath");
+ if (path != null) {
+ File f = new File(path, exePath);
+ if (f.exists()) {
+ candidates.add(FileUtil.toSystemDependentName(f.getPath()));
+ }
+ }
+ }
+ }
+ }
+
private static void findSubdirInstallations(Collection<String> candidates, String rootDir, String dir_prefix, String exe_name) {
VirtualFile rootVDir = LocalFileSystem.getInstance().findFileByPath(rootDir);
if (rootVDir != null) {