@Override
  public @Nullable Result applyFilter(@NotNull String line, int entireLength) {
    ApplicationManager.getApplication().assertReadAccessAllowed();
    boolean dumb = myDumbService.isDumb();
    List<Filter> filters = myFilters;
    int count = filters.size();

    List<ResultItem> resultItems = null;
    //noinspection ForLoopReplaceableByForEach
    for (int i = 0; i < count; i++) {
      ProgressManager.checkCanceled();
      Filter filter = filters.get(i);
      if (myDumbService.isUsableInCurrentContext(filter)) {
        long t0 = System.currentTimeMillis();

        Result result;
        try {
          result = filter.applyFilter(line, entireLength);
        }
        catch (ProcessCanceledException ignore) {
          result = null;
        }
        catch (Throwable t) {
          throw new ApplyFilterException("Error while applying " + filter + " to '" + line + "'", t);
        }
        if (result != null) {
          resultItems = merge(resultItems, result, entireLength, filter);
        }

        t0 = System.currentTimeMillis() - t0;
        if (t0 > 1000) {
          LOG.warn(filter.getClass().getSimpleName() + ".applyFilter() took " + t0 + " ms on '''" + line + "'''");
        }
        if (result != null && shouldStopFiltering(result)) {
          break;
        }
      }
    }
    if (resultItems == null) {
      return null;
    }
    return createFinalResult(resultItems);
  }
@Override
  public @Nullable Result applyFilter(@NotNull String line, int entireLength)