[plugins] PluginEnabler implementations registered
[idea/community.git] / platform / platform-impl / src / com / intellij / externalDependencies / impl / CheckRequiredPluginsActivity.java
index b48617febb395b424b45339b4b849ae507ec05de..84128b7e7d2f2373f352cd9dbbc87ccfc2688599 100644 (file)
@@ -55,64 +55,61 @@ final class CheckRequiredPluginsActivity implements StartupActivity.RequiredForS
       return;
     }
 
+    String projectName = project.getName();
+
     final List<@Nls String> errorMessages = new ArrayList<>();
     final List<IdeaPluginDescriptor> disabled = new ArrayList<>();
     final Set<PluginId> notInstalled = new HashSet<>();
     List<IdeaPluginDescriptor> pluginsToEnableWithoutRestart = new ArrayList<>();
-    DynamicPluginEnabler pluginEnabler = DynamicPluginEnabler.getInstance();
-    ProjectPluginTracker pluginTracker = pluginEnabler.getPluginTracker(project);
+
+    ApplicationInfo applicationInfo = ApplicationInfo.getInstance();
+    PluginEnabler pluginEnabler = PluginEnabler.getInstance();
+    ProjectPluginTracker pluginTracker = DynamicPluginEnabler.findPluginTracker(project, pluginEnabler);
 
     for (DependencyOnPlugin dependency : dependencies) {
       PluginId pluginId = PluginId.getId(dependency.getPluginId());
-      IdeaPluginDescriptor plugin = PluginManagerCore.getPlugin(pluginId);
-      if (plugin == null) {
-        errorMessages.add(IdeBundle.message("error.plugin.required.for.project.not.installed", pluginId, project.getName()));
+      IdeaPluginDescriptorImpl descriptor = PluginManagerCore.findPlugin(pluginId);
+      if (descriptor == null) {
+        errorMessages.add(IdeBundle.message("error.plugin.required.for.project.not.installed", pluginId, projectName));
         notInstalled.add(pluginId);
         continue;
       }
 
-      if (!plugin.isEnabled() || pluginTracker.isDisabled(pluginId)) {
-        boolean canEnableWithoutRestart = false;
-        if (Registry.is("ide.plugins.load.automatically")) {
-          String message = DynamicPlugins.INSTANCE.checkCanUnloadWithoutRestart((IdeaPluginDescriptorImpl)plugin);
-          if (message == null) {
-            canEnableWithoutRestart = true;
-            pluginsToEnableWithoutRestart.add(plugin);
-          }
-          else {
-            LOG.info("Required plugin " + plugin.getPluginId() + " can't be enabled without restart: " + message);
-          }
+      String pluginName = descriptor.getName();
+      if (pluginEnabler.isDisabled(pluginId) ||
+          pluginTracker != null && pluginTracker.isDisabled(pluginId)) {
+        boolean canEnableWithoutRestart = Registry.is("ide.plugins.load.automatically") &&
+                                          DynamicPlugins.allowLoadUnloadWithoutRestart(descriptor);
+        if (canEnableWithoutRestart) {
+          pluginsToEnableWithoutRestart.add(descriptor);
         }
-        if (!canEnableWithoutRestart) {
-          errorMessages.add(IdeBundle.message("error.plugin.required.for.project.disabled", plugin.getName(), project.getName()));
-          disabled.add(plugin);
+        else {
+          errorMessages.add(IdeBundle.message("error.plugin.required.for.project.disabled", pluginName, projectName));
+          disabled.add(descriptor);
         }
         continue;
       }
 
       String minVersion = dependency.getMinVersion();
       String maxVersion = dependency.getMaxVersion();
-      String pluginVersion = plugin.getVersion();
-      BuildNumber currentIdeVersion = ApplicationInfo.getInstance().getBuild();
-      if (plugin.isBundled() && !plugin.allowBundledUpdate() && currentIdeVersion.asStringWithoutProductCode().equals(pluginVersion)) {
-        String pluginFromString = PluginManagerCore.CORE_ID.equals(plugin.getPluginId()) ? "" : "plugin '" + plugin.getName() + "' from ";
+      String pluginVersion = descriptor.getVersion();
+
+      BuildNumber currentIdeVersion = applicationInfo.getBuild();
+      if (descriptor.isBundled() && !descriptor.allowBundledUpdate() && currentIdeVersion.asStringWithoutProductCode().equals(pluginVersion)) {
+        String pluginFromString = PluginManagerCore.CORE_ID.equals(descriptor.getPluginId()) ? "" : "plugin '" + pluginName + "' from ";
         if (minVersion != null && currentIdeVersion.compareTo(BuildNumber.fromString(minVersion)) < 0) {
-          errorMessages
-            .add(IdeBundle.message("error.project.requires.newer.ide", project.getName(), pluginFromString, minVersion, pluginVersion));
+          errorMessages.add(IdeBundle.message("error.project.requires.newer.ide", projectName, pluginFromString, minVersion, pluginVersion));
         }
         if (maxVersion != null && currentIdeVersion.compareTo(BuildNumber.fromString(maxVersion)) > 0) {
-          errorMessages
-            .add(IdeBundle.message("error.project.requires.older.ide", project.getName(), pluginFromString, maxVersion, pluginVersion));
+          errorMessages.add(IdeBundle.message("error.project.requires.older.ide", projectName, pluginFromString, maxVersion, pluginVersion));
         }
       }
       else {
         if (minVersion != null && VersionComparatorUtil.compare(pluginVersion, minVersion) < 0) {
-          errorMessages
-            .add(IdeBundle.message("error.project.requires.newer.plugin", project.getName(), plugin.getName(), minVersion, pluginVersion));
+          errorMessages.add(IdeBundle.message("error.project.requires.newer.plugin", projectName, pluginName, minVersion, pluginVersion));
         }
         if (maxVersion != null && VersionComparatorUtil.compare(pluginVersion, maxVersion) > 0) {
-          errorMessages
-            .add(IdeBundle.message("error.project.requires.older.plugin", project.getName(), plugin.getName(), maxVersion, pluginVersion));
+          errorMessages.add(IdeBundle.message("error.project.requires.older.plugin", projectName, pluginName, maxVersion, pluginVersion));
         }
       }
     }