From 2eee9af912486e01883497a2a1a1add02da71c39 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Mon, 7 Aug 2017 16:51:38 +0300 Subject: [PATCH] IDEA-CR-23370 beautify essential plugin missing message --- .../intellij/ide/plugins/PluginManagerCore.java | 17 ++++++++++------- .../com/intellij/ide/plugins/PluginManager.java | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java index 5199394dcabc..cef70b49656c 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java @@ -37,6 +37,7 @@ import com.intellij.openapi.util.io.StreamUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.JBIterable; import com.intellij.util.containers.MultiMap; import com.intellij.util.execution.ParametersListUtil; import com.intellij.util.graph.*; @@ -1262,10 +1263,10 @@ public class PluginManagerCore { private static void checkEssentialPluginsAreAvailable(IdeaPluginDescriptorImpl[] plugins) { Set availableIds = ContainerUtil.map2Set(plugins, plugin -> plugin.getPluginId().getIdString()); - for (String pluginId : ((ApplicationInfoImpl)ApplicationInfoImpl.getShadowInstance()).getEssentialPluginsIds()) { - if (!availableIds.contains(pluginId)) { - throw new InstallationCorruptedException("Required plugin '" + pluginId + "' isn't available"); - } + List ids = ((ApplicationInfoImpl)ApplicationInfoImpl.getShadowInstance()).getEssentialPluginsIds(); + Set missing = JBIterable.from(ids).filter(id -> !availableIds.contains(id)).toSet(); + if (!missing.isEmpty()) { + throw new EssentialPluginMissingException(missing); } } @@ -1499,9 +1500,11 @@ public class PluginManagerCore { } } - static class InstallationCorruptedException extends RuntimeException { - public InstallationCorruptedException(String message) { - super(message); + static class EssentialPluginMissingException extends RuntimeException { + final Set pluginIds; + + public EssentialPluginMissingException(@NotNull Set ids) { + this.pluginIds = ids; } } } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java index ec88b20ea530..d74865c471f0 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java @@ -37,6 +37,7 @@ import com.intellij.openapi.extensions.impl.PicoPluginExtensionInitializationExc import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.util.ArrayUtil; @@ -52,7 +53,9 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.List; +import java.util.Set; /** * @author mike @@ -111,10 +114,17 @@ public class PluginManager extends PluginManagerCore { public static void processException(Throwable t) { if (!IdeaApplication.isLoaded()) { - InstallationCorruptedException corrupted = findCause(t, InstallationCorruptedException.class); String productName = ApplicationNamesInfo.getInstance().getFullProductName(); - if (corrupted != null) { - Main.showMessage("Corrupted Installation", corrupted.getMessage() + ". Try reinstalling " + productName + " from scratch.", true); + EssentialPluginMissingException exception = findCause(t, EssentialPluginMissingException.class); + Set pluginIds = exception == null ? null : exception.pluginIds; + if (pluginIds != null) { + String[] strings = ArrayUtil.toStringArray(pluginIds); + Arrays.sort(strings); + Main.showMessage("Corrupted Installation", + "Missing essential plugin" + (strings.length == 1 ? "" : "s") + ":\n\n" + + " " + StringUtil.join(strings, "\n ") + + "\n\n" + + "Please reinstall " + productName + " from scratch.", true); System.exit(Main.INSTALLATION_CORRUPTED); }