private void doAddWithFileChooser()

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)
				);
			}
		}
	}