mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-CR-23370 beautify essential plugin missing message
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user