IDEA-CR-23370 beautify essential plugin missing message

This commit is contained in:
Gregory.Shrago
2017-08-07 16:55:02 +03:00
parent 5f64525cdb
commit 2eee9af912
2 changed files with 23 additions and 10 deletions
@@ -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<String> 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<String> ids = ((ApplicationInfoImpl)ApplicationInfoImpl.getShadowInstance()).getEssentialPluginsIds();
Set<String> 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<String> pluginIds;
public EssentialPluginMissingException(@NotNull Set<String> ids) {
this.pluginIds = ids;
}
}
}
@@ -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<String> 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);
}