IDEA-149864 Switch boot JDK on Windows shouldn't appear since unavailable
[idea/community.git] / platform / lang-impl / src / com / intellij / openapi / util / SwitchBootJdkAction.java
index 6a9274a5a610a1ee5e816dd43dabc87b7588b8c8..8571ac0e120fc91661fccfbbdb8b3f1f0f28171a 100644 (file)
@@ -50,7 +50,8 @@ import java.util.Locale;
  */
 public class SwitchBootJdkAction extends AnAction implements DumbAware {
   @NonNls private static final Logger LOG = Logger.getInstance("#com.intellij.ide.actions.SwitchBootJdkAction");
-  @NonNls private static final String productJdkConfigFileName = getExecutable() + ".jdk";
+  @NonNls private static final String productJdkConfigFileName =
+    getExecutable() + (SystemInfo.isWindows ? ((SystemInfo.is64Bit) ? "64.exe.jdk" : ".exe.jdk") : ".jdk");
   @NonNls private static final File productJdkConfigFile = new File(PathManager.getConfigPath(), productJdkConfigFileName);
   @NonNls private static final File bundledJdkFile = getBundledJDKFile();
 
@@ -67,11 +68,6 @@ public class SwitchBootJdkAction extends AnAction implements DumbAware {
 
   @Override
   public void update(AnActionEvent e) {
-    Presentation presentation = e.getPresentation();
-    if (!(SystemInfo.isMac || SystemInfo.isLinux)) {
-      presentation.setEnabledAndVisible(false);
-      return;
-    }
     e.getPresentation().setText("Switch Boot JDK");
   }
 
@@ -233,6 +229,9 @@ public class SwitchBootJdkAction extends AnAction implements DumbAware {
     "/usr/lib/jvm/", // Ubuntu
     "/usr/java/"     // Fedora
   };
+  private static final String STANDARD_JVM_X64_LOCATIONS_ON_WINDOWS = "Program Files/Java";
+
+  private static final String STANDARD_JVM_X86_LOCATIONS_ON_WINDOWS = "Program Files (x86)/Java";
 
   private static final Version JDK8_VERSION = new Version(1, 8, 0);
 
@@ -260,6 +259,16 @@ public class SwitchBootJdkAction extends AnAction implements DumbAware {
         jdkBundleList.addBundlesFromLocation(location, JDK8_VERSION, null);
       }
     }
+    else if (SystemInfo.isWindows) {
+      for (File root : File.listRoots()) {
+        if (SystemInfo.is32Bit) {
+          jdkBundleList.addBundlesFromLocation(new File(root, STANDARD_JVM_X86_LOCATIONS_ON_WINDOWS).getAbsolutePath(), JDK8_VERSION, null);
+        }
+        else {
+          jdkBundleList.addBundlesFromLocation(new File(root, STANDARD_JVM_X64_LOCATIONS_ON_WINDOWS).getAbsolutePath(), JDK8_VERSION, null);
+        }
+      }
+    }
 
     return jdkBundleList;
   }