@Override
  public @NotNull List<TimedVcsCommit> getCommitsMatchingFilter(@NotNull VirtualFile root, @NotNull VcsLogFilterCollection filterCollection,
                                                                @NotNull PermanentGraph.Options graphOptions, int maxCount) throws VcsException {
    VcsLogRangeFilter rangeFilter = filterCollection.get(RANGE_FILTER);
    if (rangeFilter == null) {
      return getCommitsMatchingFilter(root, filterCollection, null, graphOptions, maxCount);
    }

     /*
       We expect a "branch + range" combined filter to display the union of commits reachable from the branch,
       and commits belonging to the range. But Git intersects results for such parameters.
       => to solve this, we make a query for branch filters, and then separate queries for each of the ranges.
     */
    Set<TimedVcsCommit> commits = new LinkedHashSet<>();
    if (filterCollection.get(BRANCH_FILTER) != null || filterCollection.get(REVISION_FILTER) != null) {
      commits.addAll(getCommitsMatchingFilter(root, filterCollection, null, graphOptions, maxCount));
      filterCollection = VcsLogFiltersKt.without(VcsLogFiltersKt.without(filterCollection, BRANCH_FILTER), REVISION_FILTER);
    }
    for (VcsLogRangeFilter.RefRange range : rangeFilter.getRanges()) {
      commits.addAll(getCommitsMatchingFilter(root, filterCollection, range, graphOptions, maxCount));
    }
    return new ArrayList<>(commits);
  }
@Override
  public @NotNull List<TimedVcsCommit> getCommitsMatchingFilter(@NotNull VirtualFile root, @NotNull VcsLogFilterCollection filterCollection,
                                                                @NotNull PermanentGraph.Options graphOptions, int maxCount)