public static <Settings> SettingsEditorFragment<Settings, ?> createSettingsTag(String id, @Nls String name, @Nls String group,
                                                                                 @NotNull Predicate<? super RunnerAndConfigurationSettingsImpl> getter,
                                                                                 @NotNull BiConsumer<? super RunnerAndConfigurationSettingsImpl, ? super Boolean> setter,
                                                                                 int menuPosition) {
    Ref<SettingsEditorFragment<?, ?>> ref = new Ref<>();
    TagButton button = new TagButton(name, (e) -> {
      ref.get().setSelected(false);
      ref.get().logChange(false, e);
    });
    RunConfigurationEditorFragment<Settings, ?> fragment = new RunConfigurationEditorFragment<>(id, name, group, button, 0, getter) {
      @Override
      protected void disposeEditor() {
        Disposer.dispose(myComponent);
      }

      @Override
      public void doReset(@NotNull RunnerAndConfigurationSettingsImpl s) {
        button.setVisible(getter.test(s));
      }

      @Override
      public void applyEditorTo(@NotNull RunnerAndConfigurationSettingsImpl s) {
        setter.accept(s, button.isVisible());
      }

      @Override
      public boolean isTag() {
        return true;
      }

      @Override
      public int getMenuPosition() {
        return menuPosition;
      }
    };
    ref.set(fragment);
    return fragment;
  }
public static <Settings> SettingsEditorFragment<Settings, ?> createSettingsTag(String id, @Nls String name, @Nls String group,
                                                                                 @NotNull Predicate<? super RunnerAndConfigurationSettingsImpl> getter,
                                                                                 @NotNull BiConsumer<? super RunnerAndConfigurationSettingsImpl, ? super Boolean> setter,
                                                                                 int menuPosition)