in src/main/java/org/jetbrains/plugins/spotbugs/plugins/AbstractPluginLoader.java [60:157]
public void load(@NotNull final Set<PluginSettings> settings) {
PluginLoader.invalidate();
// 1. unload plugins
for (final Plugin plugin : Plugin.getAllPlugins()) {
if (plugin.isCorePlugin()) {
seenCorePlugin(plugin);
} else {
FindBugsCustomPluginUtil.unload(plugin);
}
}
// 2. load bundled plugins and unload
final IdeaPluginDescriptor ideaPluginDescriptor = FindBugsPluginUtil.getIdeaPluginDescriptor();
Plugins.deploy(ideaPluginDescriptor);
final File[] bundledPlugins = Plugins.getDirectory(ideaPluginDescriptor).listFiles();
final Set<String> enabledBundledPluginUrls = new HashSet<>();
if (bundledPlugins != null) {
for (final File pluginFile : bundledPlugins) {
if (!pluginFile.getName().endsWith(".jar")) {
continue;
}
if (!pluginFile.isFile()) {
continue;
}
if (!pluginFile.canRead()) {
continue;
}
try {
Plugin plugin = FindBugsCustomPluginUtil.loadTemporary(pluginFile);
PluginSettings pluginSettings = PluginSettings.findBundledById(settings, plugin.getPluginId());
if (pluginSettings == null) {
pluginSettings = new PluginSettings();
pluginSettings.id = plugin.getPluginId();
pluginSettings.bundled = true;
pluginSettings.enabled = false;
seenBundledPlugin(PluginInfo.create(pluginSettings, plugin));
} else {
seenConfiguredPlugin(PluginInfo.create(pluginSettings, plugin));
}
if (pluginSettings.enabled) {
enabledBundledPluginUrls.add(FindBugsCustomPluginUtil.getAsString(plugin));
}
FindBugsCustomPluginUtil.unload(plugin);
} catch (final Exception e) {
LOGGER.warn("Could not load plugin: " + pluginFile, e);
}
}
}
// 3. load user plugins and unload
final Set<String> enabledUserPluginUrls = new HashSet<String>();
for (final PluginSettings pluginSettings : settings) {
if (pluginSettings.bundled) {
continue;
}
final String pluginUrl = pluginSettings.url;
try {
final File pluginFile = FindBugsCustomPluginUtil.getAsFile(pluginUrl);
if (!pluginFile.exists()) {
final String error = ResourcesLoader.getString("error.path.exists", pluginFile.getPath());
seenConfiguredPlugin(PluginInfo.create(pluginSettings, error));
handleError(error);
continue;
}
if (!pluginFile.isFile()) {
final String error = ResourcesLoader.getString("error.file.type", pluginFile.getPath());
seenConfiguredPlugin(PluginInfo.create(pluginSettings, error));
handleError(error);
continue;
}
if (!pluginFile.canRead()) {
final String error = ResourcesLoader.getString("error.file.readable", pluginFile.getPath());
seenConfiguredPlugin(PluginInfo.create(pluginSettings, error));
handleError(error);
continue;
}
final Plugin plugin = FindBugsCustomPluginUtil.loadTemporary(pluginUrl);
seenConfiguredPlugin(PluginInfo.create(pluginSettings, plugin));
if (pluginSettings.enabled) {
enabledUserPluginUrls.add(pluginUrl);
}
FindBugsCustomPluginUtil.unload(plugin);
} catch (final Exception e) {
final String error = ResourcesLoader.getString("plugins.load.error.text.path", pluginUrl);
seenConfiguredPlugin(PluginInfo.create(pluginSettings, error));
handleFatalError(error, e);
}
}
// 4. load enabled plugins
loadPluginsPermanently(enabledBundledPluginUrls, false);
loadPluginsPermanently(enabledUserPluginUrls, true);
}