IDEA-170889 If two plugins have conflict in Extension Point, IDE never start

(cherry picked from commit 257828c)
This commit is contained in:
Alexey Utkin
2017-04-04 12:22:36 +03:00
parent 9713316b49
commit e0a7f6a525
2 changed files with 11 additions and 6 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.ide.plugins;
import com.intellij.diagnostic.PluginException;
import com.intellij.ide.ClassUtilCore;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.StartupProgress;
@@ -25,6 +26,7 @@ import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.components.ExtensionAreas;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.*;
import com.intellij.openapi.extensions.impl.PicoPluginExtensionInitializationException;
import com.intellij.openapi.util.BuildNumber;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Couple;
@@ -1363,6 +1365,9 @@ public class PluginManagerCore {
try {
initializePlugins(progress);
}
catch (PicoPluginExtensionInitializationException e) {
throw new PluginException(e, e.getPluginId());
}
catch (RuntimeException e) {
getLogger().error(e);
throw e;
@@ -1407,4 +1412,4 @@ public class PluginManagerCore {
getLogger().info(t);
}
}
}
}
@@ -277,13 +277,13 @@ public class ExtensionsAreaImpl implements ExtensionsArea {
@NotNull PluginDescriptor descriptor,
@NotNull ExtensionPoint.Kind kind) {
if (hasExtensionPoint(extensionPointName)) {
final String message =
"Duplicate registration for EP: " + extensionPointName + ": original plugin " + getExtensionPoint(extensionPointName).getDescriptor().getPluginId() +
", new plugin " + descriptor.getPluginId();
if (DEBUG_REGISTRATION) {
final ExtensionPointImpl oldEP = getExtensionPoint(extensionPointName);
myLogger.error("Duplicate registration for EP: " + extensionPointName + ": original plugin " + oldEP.getDescriptor().getPluginId() +
", new plugin " + descriptor.getPluginId(),
myEPTraces.get(extensionPointName));
myLogger.error(message, myEPTraces.get(extensionPointName));
}
throw new RuntimeException("Duplicate registration for EP: " + extensionPointName);
throw new PicoPluginExtensionInitializationException(message, null, descriptor.getPluginId());
}
registerExtensionPoint(new ExtensionPointImpl(extensionPointName, extensionPointBeanClass, kind, this, myAreaInstance, descriptor));