void (List<? super SettingsEditorFragment<Settings, ?>> fragments) { for (Executor executor : Executor.EXECUTOR_EXTENSION_NAME.getExtensionList()) { ProgramRunner<RunnerSettings> runner = ProgramRunner.getRunner(executor.getId(), mySettings); if (runner == null) { continue; } SettingsEditor<ConfigurationPerRunnerSettings> configEditor = mySettings.getRunnerSettingsEditor(runner); SettingsEditor<RunnerSettings> runnerEditor = runner.getSettingsEditor(executor, mySettings); if (configEditor == null && runnerEditor == null) { continue; } JComponent component = new JPanel(new BorderLayout()); component.setBorder(IdeBorderFactory.createTitledBorder(executor.getStartActionText(), false)); if (configEditor != null) { component.add(configEditor.getComponent(), BorderLayout.CENTER); } if (runnerEditor != null) { component.add(runnerEditor.getComponent(), configEditor == null ? BorderLayout.CENTER : BorderLayout.SOUTH); } RunConfigurationEditorFragment<Settings, JComponent> fragment = new RunConfigurationEditorFragment<>(executor.getId() + ".config", executor.getStartActionText(), ExecutionBundle.message("run.configuration.startup.connection.rab.title"), component, 0, settings -> false) { @Override public void doReset(@NotNull RunnerAndConfigurationSettingsImpl s) { if (configEditor != null) { configEditor.resetFrom(s.getConfigurationSettings(runner)); } if (runnerEditor != null) { runnerEditor.resetFrom(s.getRunnerSettings(runner)); } } @Override public void applyEditorTo(@NotNull RunnerAndConfigurationSettingsImpl s) { try { if (configEditor != null) { configEditor.applyTo(s.getConfigurationSettings(runner)); } if (runnerEditor != null) { runnerEditor.applyTo(s.getRunnerSettings(runner)); } } catch (ConfigurationException e) { LOG.error(e); } } }; if (configEditor != null) { Disposer.register(fragment, configEditor); } if (runnerEditor != null) { Disposer.register(fragment, runnerEditor); } fragments.add(fragment); } }