From a314da80782c23bbd49cdbd772c32cf92eff29ad Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 11 Apr 2011 17:45:50 +0200 Subject: [PATCH] don't prompt to install optional dependencies if they're not in the repo (part of IDEA-67553) --- .../ide/plugins/ActionInstallPlugin.java | 6 ++- .../intellij/ide/plugins/PluginInstaller.java | 43 +++++++++++-------- .../ide/plugins/PluginManagerMain.java | 4 +- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java b/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java index e9f22adf8b75..da1875ea23a2 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java @@ -94,7 +94,7 @@ public class ActionInstallPlugin extends AnAction implements DumbAware { } } try { - if (PluginManagerMain.downloadPlugins(list)) { + if (PluginManagerMain.downloadPlugins(list, host.getAvailablePluginsModel().view)) { host.getInstalledPluginsModel().modifyData(new ArrayList(list)); host.setRequireShutdown(true); } @@ -111,7 +111,9 @@ public class ActionInstallPlugin extends AnAction implements DumbAware { public PluginTable getPluginTable() { return host.getPluginTable(); - }//--------------------------------------------------------------------------- + } + + //--------------------------------------------------------------------------- // Show confirmation message depending on the amount and type of the // selected plugin descriptors: already downloaded plugins need "update" // while non-installed yet need "install". diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java index a506a6f66821..725afd14a85b 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java @@ -27,13 +27,13 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.updateSettings.impl.PluginDownloader; import com.intellij.openapi.util.BuildNumber; import com.intellij.ui.GuiUtils; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import javax.swing.*; import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -47,21 +47,21 @@ public class PluginInstaller { private PluginInstaller() {} - public static boolean prepareToInstall (List plugins) { + public static boolean prepareToInstall(List pluginsToInstall, List allPlugins) { ProgressIndicator pi = ProgressManager.getInstance().getProgressIndicator(); final List pluginIds = new ArrayList(); - for (PluginNode pluginNode : plugins) { + for (PluginNode pluginNode : pluginsToInstall) { pluginIds.add(pluginNode.getPluginId()); } boolean result = false; - for (final PluginNode pluginNode : plugins) { + for (final PluginNode pluginNode : pluginsToInstall) { if (pi != null) pi.setText(pluginNode.getName()); try { - result |= prepareToInstall(pluginNode, pluginIds); + result |= prepareToInstall(pluginNode, pluginIds, allPlugins); } catch (final IOException e) { SwingUtilities.invokeLater(new Runnable(){ @@ -74,7 +74,9 @@ public class PluginInstaller { return result; } - private static boolean prepareToInstall(final PluginNode pluginNode, final List pluginIds) throws IOException { + private static boolean prepareToInstall(final PluginNode pluginNode, + final List pluginIds, + List allPlugins) throws IOException { // check for dependent plugins at first. if (pluginNode.getDepends() != null && pluginNode.getDepends().size() > 0) { // prepare plugins list for install @@ -95,9 +97,12 @@ public class PluginInstaller { depPlugin.setSize("-1"); depPlugin.setName(depPluginId.getIdString()); //prevent from exceptions - if (optionalDependentPluginIds != null && Arrays.binarySearch(optionalDependentPluginIds, depPluginId) != -1) { - optionalDeps.add(depPlugin); - } else { + if (optionalDependentPluginIds != null && ArrayUtil.indexOf(optionalDependentPluginIds, depPluginId) != -1) { + if (isPluginInRepo(depPluginId, allPlugins)) { + optionalDeps.add(depPlugin); + } + } + else { depends.add(depPlugin); } } @@ -120,7 +125,7 @@ public class PluginInstaller { return false; } if (proceed[0]) { - if (!prepareToInstall(depends)) { + if (!prepareToInstall(depends, allPlugins)) { return false; } } else { @@ -147,7 +152,7 @@ public class PluginInstaller { return false; } if (proceed[0]) { - if (!prepareToInstall(optionalDeps)) { + if (!prepareToInstall(optionalDeps, allPlugins)) { return false; } } @@ -171,14 +176,14 @@ public class PluginInstaller { return true; } - /** - * Install plugin into a temp direcotry - * Append 'action script' file with installing actions - * - * @param pluginNode Plugin to install - */ - public static boolean prepareToInstall (PluginNode pluginNode) throws IOException { - return prepareToInstall(pluginNode, null); + + private static boolean isPluginInRepo(PluginId depPluginId, List allPlugins) { + for (IdeaPluginDescriptor plugin : allPlugins) { + if (plugin.getPluginId().equals(depPluginId)) { + return true; + } + } + return false; } public static void prepareToUninstall (PluginId pluginId) throws IOException { diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java index 3164acf821ad..990d399545ec 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerMain.java @@ -387,12 +387,12 @@ public class PluginManagerMain implements Disposable { return main; } - public static boolean downloadPlugins(final List plugins) throws IOException { + public static boolean downloadPlugins(final List plugins, final List allPlugins) throws IOException { final boolean[] result = new boolean[1]; try { ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { public void run() { - result[0] = PluginInstaller.prepareToInstall(plugins); + result[0] = PluginInstaller.prepareToInstall(plugins, allPlugins); } }, IdeBundle.message("progress.download.plugins"), true, null); }