private void collectInvolvedIds(final String pluginId, boolean toEnable, Set<String> ids) { ids.add(pluginId); if (toEnable) { for (String id : getNonOptionalDependencies(pluginId)) { collectInvolvedIds(id, true, ids); } } else { Condition<PluginId> condition = new Condition<PluginId>() { @Override public boolean value(PluginId id) { return pluginId.equals(id.getIdString()); } }; for (final IdeaPluginDescriptor plugin : myAllPlugins) { if (null != ContainerUtil.find(plugin.getDependentPluginIds(), condition) && null == ContainerUtil.find(plugin.getOptionalDependentPluginIds(), condition)) { collectInvolvedIds(plugin.getPluginId().getIdString(), false, ids); } } } }
void setPluginEnabledWithDependencies(final String pluginId, boolean enabled) { initIfNeed(); Set<String> ids = new HashSet<String>(); collectInvolvedIds(pluginId, enabled, ids); Set<IdSet> sets = new HashSet<IdSet>(); for (String id : ids) { IdSet set = getSet(id); if (set != null) { sets.add(set); } } for (IdSet set : sets) { ids.addAll(Arrays.asList(set.getIds())); } for (String id : ids) { if (enabled) { myDisabledPluginIds.remove(id); } else { myDisabledPluginIds.add(id); } } }