extracted public method to show warning dialog and disable plugin
authornik <Nikolay.Chashnikov@jetbrains.com>
Fri, 30 Oct 2015 15:54:09 +0000 (18:54 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Fri, 30 Oct 2015 15:54:33 +0000 (18:54 +0300)
platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
platform/platform-impl/src/com/intellij/diagnostic/errordialog/DisablePluginWarningDialog.java

index 84be6a3ee706ae1ea38f5b32d734e97f43248332..c92535293c12e0ceb8d7ee9ba41460b21410f695 100644 (file)
@@ -28,7 +28,6 @@ import com.intellij.ide.plugins.PluginManagerMain;
 import com.intellij.ide.plugins.cl.PluginClassLoader;
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.application.Application;
 import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.ApplicationNamesInfo;
 import com.intellij.openapi.application.ex.ApplicationEx;
@@ -47,7 +46,6 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.SystemInfo;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.wm.IdeFocusManager;
@@ -56,7 +54,6 @@ import com.intellij.ui.HeaderlessTabbedPane;
 import com.intellij.ui.HyperlinkLabel;
 import com.intellij.ui.IdeBorderFactory;
 import com.intellij.util.Consumer;
-import com.intellij.util.Function;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.text.DateFormatUtil;
 import com.intellij.util.ui.UIUtil;
@@ -401,43 +398,8 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
 
   private void disablePlugin() {
     final PluginId pluginId = findPluginId(getSelectedMessage().getThrowable());
-    if (pluginId == null) {
-      return;
-    }
-
-    IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
-    final Ref<Boolean> hasDependants = new Ref<Boolean>(false);
-    PluginManager.checkDependants(plugin, new Function<PluginId, IdeaPluginDescriptor>() {
-                                    @Override
-                                    public IdeaPluginDescriptor fun(PluginId pluginId) {
-                                      return PluginManager.getPlugin(pluginId);
-                                    }
-                                  }, new Condition<PluginId>() {
-      @Override
-      public boolean value(PluginId pluginId) {
-        if (PluginManagerCore.CORE_PLUGIN_ID.equals(pluginId.getIdString())) {
-          return true;
-        }
-        hasDependants.set(true);
-        return false;
-      }
-    }
-    );
-
-    Application app = ApplicationManager.getApplication();
-    DisablePluginWarningDialog d =
-      new DisablePluginWarningDialog(getRootPane(), plugin.getName(), hasDependants.get(), app.isRestartCapable());
-    d.show();
-    switch (d.getExitCode()) {
-      case CANCEL_EXIT_CODE:
-        return;
-      case DisablePluginWarningDialog.DISABLE_EXIT_CODE:
-        PluginManager.disablePlugin(pluginId.getIdString());
-        break;
-      case DisablePluginWarningDialog.DISABLE_AND_RESTART_EXIT_CODE:
-        PluginManager.disablePlugin(pluginId.getIdString());
-        app.restart();
-        break;
+    if (pluginId != null) {
+      DisablePluginWarningDialog.disablePlugin(pluginId, getRootPane());
     }
   }
 
index 8fad9455d48ebfda6f253bfa15a282c966906125..3130b4aed19038d23f582b326d57d255c8dbfd7f 100644 (file)
@@ -1,9 +1,18 @@
 package com.intellij.diagnostic.errordialog;
 
 import com.intellij.diagnostic.DiagnosticBundle;
+import com.intellij.ide.plugins.IdeaPluginDescriptor;
+import com.intellij.ide.plugins.PluginManager;
+import com.intellij.ide.plugins.PluginManagerCore;
+import com.intellij.openapi.application.Application;
+import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.application.ApplicationNamesInfo;
+import com.intellij.openapi.extensions.PluginId;
 import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.Ref;
 import com.intellij.openapi.util.SystemInfo;
+import com.intellij.util.Function;
 import org.jetbrains.annotations.NotNull;
 
 import javax.swing.*;
@@ -18,12 +27,12 @@ public class DisablePluginWarningDialog extends DialogWrapper {
   private JLabel myRestartLabel;
   private JPanel myContentPane;
 
-  public static final int DISABLE_EXIT_CODE = OK_EXIT_CODE;
-  public static final int DISABLE_AND_RESTART_EXIT_CODE = NEXT_USER_EXIT_CODE;
+  private static final int DISABLE_EXIT_CODE = OK_EXIT_CODE;
+  private static final int DISABLE_AND_RESTART_EXIT_CODE = NEXT_USER_EXIT_CODE;
   private final boolean myRestartCapable;
 
-  public DisablePluginWarningDialog(Component c, String pluginName, boolean hasDependants, boolean restartCapable) {
-    super(c, false);
+  private DisablePluginWarningDialog(@NotNull Component parent, String pluginName, boolean hasDependants, boolean restartCapable) {
+    super(parent, false);
     myRestartCapable = restartCapable;
     myPromptLabel.setText(
       DiagnosticBundle.message(hasDependants ? "error.dialog.disable.plugin.prompt.dependants" : "error.dialog.disable.plugin.prompt",
@@ -36,6 +45,42 @@ public class DisablePluginWarningDialog extends DialogWrapper {
     init();
   }
 
+  public static void disablePlugin(@NotNull PluginId pluginId, @NotNull JComponent parentComponent) {
+    IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
+    final Ref<Boolean> hasDependants = new Ref<Boolean>(false);
+    PluginManagerCore.checkDependants(plugin, new Function<PluginId, IdeaPluginDescriptor>() {
+                                        @Override
+                                        public IdeaPluginDescriptor fun(PluginId pluginId) {
+                                          return PluginManager.getPlugin(pluginId);
+                                        }
+                                      }, new Condition<PluginId>() {
+                                        @Override
+                                        public boolean value(PluginId pluginId) {
+                                          if (PluginManagerCore.CORE_PLUGIN_ID.equals(pluginId.getIdString())) {
+                                            return true;
+                                          }
+                                          hasDependants.set(true);
+                                          return false;
+                                        }
+                                      }
+    );
+
+    Application app = ApplicationManager.getApplication();
+    DisablePluginWarningDialog d = new DisablePluginWarningDialog(parentComponent, plugin.getName(), hasDependants.get(), app.isRestartCapable());
+    d.show();
+    switch (d.getExitCode()) {
+      case CANCEL_EXIT_CODE:
+        return;
+      case DISABLE_EXIT_CODE:
+        PluginManagerCore.disablePlugin(pluginId.getIdString());
+        break;
+      case DISABLE_AND_RESTART_EXIT_CODE:
+        PluginManagerCore.disablePlugin(pluginId.getIdString());
+        app.restart();
+        break;
+    }
+  }
+
   @Override
   protected JComponent createCenterPanel() {
     return myContentPane;