public static DefaultActionGroup createPopupActionGroup(
     final Project project,
     final TodoPanelSettings settings,
     Consumer<TodoFilter> todoFilterConsumer) {
   TodoFilter[] filters = TodoConfiguration.getInstance().getTodoFilters();
   DefaultActionGroup group = new DefaultActionGroup();
   group.add(
       new TodoFilterApplier(
           IdeBundle.message("action.todo.show.all"),
           IdeBundle.message("action.description.todo.show.all"),
           null,
           settings,
           todoFilterConsumer));
   for (TodoFilter filter : filters) {
     group.add(
         new TodoFilterApplier(filter.getName(), null, filter, settings, todoFilterConsumer));
   }
   group.addSeparator();
   group.add(
       new AnAction(
           IdeBundle.message("action.todo.edit.filters"),
           IdeBundle.message("action.todo.edit.filters"),
           AllIcons.General.Settings) {
         @Override
         public void actionPerformed(AnActionEvent e) {
           final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
           util.editConfigurable(project, new TodoConfigurable());
         }
       });
   return group;
 }
  private Collection<AbstractTreeNode> createGeneralList() {
    ArrayList<AbstractTreeNode> children = new ArrayList<AbstractTreeNode>();

    PsiFile psiFile = getValue();
    final TodoItem[] items =
        findAllTodos(psiFile, myBuilder.getTodoTreeStructure().getSearchHelper());
    final Document document = PsiDocumentManager.getInstance(getProject()).getDocument(psiFile);

    if (document != null) {
      for (final TodoItem todoItem : items) {
        if (todoItem.getTextRange().getEndOffset() < document.getTextLength() + 1) {
          final SmartTodoItemPointer pointer = new SmartTodoItemPointer(todoItem, document);
          TodoFilter todoFilter = getToDoFilter();
          if (todoFilter != null) {
            if (todoFilter.contains(todoItem.getPattern())) {
              children.add(new TodoItemNode(getProject(), pointer, myBuilder));
            }
          } else {
            children.add(new TodoItemNode(getProject(), pointer, myBuilder));
          }
        }
      }
    }
    Collections.sort(children, SmartTodoItemPointerComparator.ourInstance);
    return children;
  }
 @Override
 public void update(AnActionEvent e) {
   super.update(e);
   if (myFilter != null) {
     e.getPresentation().setEnabled(!myFilter.isEmpty());
   }
 }
 @Override
 public boolean isSelected(AnActionEvent e) {
   return Comparing.equal(
       myFilter != null ? myFilter.getName() : null, mySettings.todoFilterName);
 }