public static <T> List<ChangesBlock<T>> merge(@NotNull Editor editor,
                                                @NotNull List<? extends Range> ranges,
                                                @NotNull FlagsProvider<T> flagsProvider,
                                                @NotNull Rectangle clip) {
    return new VisibleRangeMerger<>(editor, flagsProvider).run(ranges, clip);
  }
public static <T> List<ChangesBlock<T>> merge(@NotNull Editor editor,
                                                @NotNull List<? extends Range> ranges,
                                                @NotNull FlagsProvider<T> flagsProvider,
                                                @NotNull Rectangle clip)