public static Collection<RunContentDescriptor> findRunningConsole(
      final Project project,
      @NotNull final NotNullFunction<RunContentDescriptor, Boolean> descriptorMatcher) {
    final ExecutionManager executionManager = ExecutionManager.getInstance(project);

    final RunContentDescriptor selectedContent =
        executionManager.getContentManager().getSelectedContent();
    if (selectedContent != null) {
      final ToolWindow toolWindow =
          ExecutionManager.getInstance(project)
              .getContentManager()
              .getToolWindowByDescriptor(selectedContent);
      if (toolWindow != null && toolWindow.isVisible()) {
        if (descriptorMatcher.fun(selectedContent)) {
          return Collections.singletonList(selectedContent);
        }
      }
    }

    final ArrayList<RunContentDescriptor> result = Lists.newArrayList();
    final RunContentDescriptor[] runContentDescriptors =
        ((RunContentManagerImpl) executionManager.getContentManager()).getAllDescriptors();
    for (RunContentDescriptor runContentDescriptor : runContentDescriptors) {
      if (descriptorMatcher.fun(runContentDescriptor)) {
        result.add(runContentDescriptor);
      }
    }
    return result;
  }
 public static List<RunContentDescriptor> collectConsolesByDisplayName(
     final Project project, @NotNull NotNullFunction<String, Boolean> titleMatcher) {
   List<RunContentDescriptor> result = Lists.newArrayList();
   final ExecutionManager executionManager = ExecutionManager.getInstance(project);
   final RunContentDescriptor[] runContentDescriptors =
       ((RunContentManagerImpl) executionManager.getContentManager()).getAllDescriptors();
   for (RunContentDescriptor runContentDescriptor : runContentDescriptors) {
     if (titleMatcher.fun(runContentDescriptor.getDisplayName())) {
       result.add(runContentDescriptor);
     }
   }
   return result;
 }