Add possibility to explicitly mark plugin as requiring restart on load/unload

GitOrigin-RevId: 0cd92fdd5e3ff329c71403eb9a30a64dcb736cc2
This commit is contained in:
Dmitry Jemerov
2020-05-11 11:27:25 +00:00
committed by intellij-monorepo-bot
parent cd6e317dc8
commit a81cf72dac
4 changed files with 19 additions and 0 deletions
@@ -77,6 +77,7 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
private boolean myUseCoreClassLoader;
boolean myAllowBundledUpdate;
boolean myImplementationDetail;
boolean myRequireRestart;
private String mySinceBuild;
private String myUntilBuild;
@@ -909,6 +910,11 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
return myImplementationDetail;
}
@Override
public boolean isRequireRestart() {
return myRequireRestart;
}
public @NotNull List<PluginId> getModules() {
return myModules == null ? Collections.emptyList() : myModules;
}
@@ -170,6 +170,10 @@ final class XmlReader {
descriptor.myImplementationDetail = Boolean.parseBoolean(attribute.getValue());
break;
case "require-restart":
descriptor.myRequireRestart = Boolean.parseBoolean(attribute.getValue());
break;
case "version":
String internalVersionString = StringUtil.nullize(attribute.getValue());
if (internalVersionString != null) {
@@ -101,6 +101,11 @@ public interface PluginDescriptor {
return false;
}
/**
* If true, this plugin requires restart even if it otherwise fulfills the requirements of dynamic plugins.
*/
default boolean isRequireRestart() { return false; }
boolean isEnabled();
void setEnabled(boolean enabled);
@@ -120,6 +120,10 @@ object DynamicPlugins {
return null
}
if (descriptor.isRequireRestart) {
return "Plugin ${descriptor.pluginId} is explicitly marked as requiring restart";
}
val loadedPluginDescriptor = if (descriptor.pluginId == null) null else PluginManagerCore.getPlugin(descriptor.pluginId) as? IdeaPluginDescriptorImpl
val app = ApplicationManager.getApplication()