in src/main/java/org/jetbrains/plugins/spotbugs/gui/settings/PluginTablePane.java [171:232]
private void doAddWithFileChooser(@Nullable final Project project) {
final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, true, true, false, true);
descriptor.setTitle(ResourcesLoader.getString("plugins.choose.title"));
descriptor.setDescription(ResourcesLoader.getString("plugins.choose.description"));
descriptor.withFileFilter(virtualFile -> "jar".equalsIgnoreCase(virtualFile.getExtension()));
final VirtualFile[] files = FileChooser.chooseFiles(descriptor, this, project, null);
if (files.length > 0) {
// collect current plugin settings
final Set<PluginSettings> settings = new HashSet<>();
for (final PluginInfo plugin : getModel().rows) {
settings.add(plugin.settings);
}
// unload all plugin
for (final Plugin plugin : Plugin.getAllPlugins()) {
if (!plugin.isCorePlugin()) {
FindBugsCustomPluginUtil.unload(plugin);
}
}
// load chosen plugins
StringBuilder errors = new StringBuilder();
for (final VirtualFile virtualFile : files) {
final File file = VfsUtilCore.virtualToIoFile(virtualFile);
Plugin plugin = null;
try {
plugin = FindBugsCustomPluginUtil.loadTemporary(file);
final PluginSettings pluginSettings = new PluginSettings();
pluginSettings.id = plugin.getPluginId();
pluginSettings.bundled = false;
pluginSettings.enabled = true; // enable ; do not use plugin.isEnabledByDefault();
pluginSettings.url = FindBugsCustomPluginUtil.getAsString(plugin);
for (final PluginSettings other : settings) {
if (other.id.equals(pluginSettings.id)) {
pluginSettings.enabled = false;
break;
}
}
settings.add(pluginSettings);
} catch (final Exception e) {
LOGGER.warn(String.valueOf(file), e);
errors.append("\n - ").append(e.getMessage());
} finally {
if (plugin != null) {
FindBugsCustomPluginUtil.unload(plugin);
}
}
}
// reload all plugins
load(settings);
if (errors.length() > 0) {
Messages.showErrorDialog(
this,
ResourcesLoader.getString("plugins.load.error.text") + errors.toString(),
StringUtil.capitalizeWords(ResourcesLoader.getString("plugins.load.error.title"), true)
);
}
}
}