diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:28:18 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:28:18 -0700 |
commit | d76e3920c56d37c942092b7dca20fcaded81c0a5 (patch) | |
tree | 80a55c7b59c38377216daaada4e8bc47b69ceb9a /platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java | |
parent | 3b37877a2561bf9fbe072253a18688807d523505 (diff) | |
parent | 1aa2e09bdbd413eacb677e9fa4b50630530d0656 (diff) | |
download | idea-d76e3920c56d37c942092b7dca20fcaded81c0a5.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge
Conflicts:
.idea/modules.xml
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java
Change-Id: Id899dae9a1e1c79272f8a70e14a7dcef4f760d7f
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java')
-rw-r--r-- | platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java | 28 |
1 files changed, 20 insertions, 8 deletions
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 b093773bc0fb..366e4e1cf4ef 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginInstaller.java @@ -30,10 +30,7 @@ import com.intellij.ui.GuiUtils; import com.intellij.util.ArrayUtil; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author stathik @@ -45,6 +42,19 @@ public class PluginInstaller { private PluginInstaller() { } public static boolean prepareToInstall(List<PluginNode> pluginsToInstall, List<IdeaPluginDescriptor> allPlugins) { + HashSet<PluginNode> dependant = new HashSet<PluginNode>(); + boolean install = prepareToInstall(pluginsToInstall, allPlugins, dependant); + for (PluginNode node : dependant) { + if (!pluginsToInstall.contains(node)) { + pluginsToInstall.add(node); + } + } + return install; + } + + private static boolean prepareToInstall(List<PluginNode> pluginsToInstall, + List<IdeaPluginDescriptor> allPlugins, + Set<PluginNode> installedDependant) { ProgressIndicator pi = ProgressManager.getInstance().getProgressIndicator(); final List<PluginId> pluginIds = new ArrayList<PluginId>(); @@ -58,7 +68,7 @@ public class PluginInstaller { if (pi != null) pi.setText(pluginNode.getName()); try { - result |= prepareToInstall(pluginNode, pluginIds, allPlugins); + result |= prepareToInstall(pluginNode, pluginIds, allPlugins, installedDependant); } catch (IOException e) { String title = IdeBundle.message("title.plugin.error"); @@ -72,7 +82,9 @@ public class PluginInstaller { private static boolean prepareToInstall(final PluginNode pluginNode, final List<PluginId> pluginIds, - List<IdeaPluginDescriptor> allPlugins) throws IOException { + List<IdeaPluginDescriptor> allPlugins, + Set<PluginNode> installedDependant) throws IOException { + installedDependant.add(pluginNode); // check for dependent plugins at first. if (pluginNode.getDepends() != null && pluginNode.getDepends().size() > 0) { // prepare plugins list for install @@ -122,7 +134,7 @@ public class PluginInstaller { return false; } if (proceed[0]) { - if (!prepareToInstall(depends, allPlugins)) { + if (!prepareToInstall(depends, allPlugins, installedDependant)) { return false; } } @@ -152,7 +164,7 @@ public class PluginInstaller { return false; } if (proceed[0]) { - if (!prepareToInstall(optionalDeps, allPlugins)) { + if (!prepareToInstall(optionalDeps, allPlugins, installedDependant)) { return false; } } |