public @NotNull List<? extends TextChange> getChanges(int start, int end) {
    assert start <= end;
    
    int changeStartIndex = getChangeIndex(start);
    if (changeStartIndex < 0) {
      changeStartIndex = -changeStartIndex - 1;
    }
    if (changeStartIndex >= myChanges.size()) {
      return Collections.emptyList();
    }
    
    int changeEndIndex = getChangeIndex(end);
    boolean endInclusive = true;
    if (changeEndIndex < 0) {
      changeEndIndex = -changeEndIndex - 1;
      endInclusive = false;
    }

    List<TextChange> result = null;
    for (int i = changeStartIndex; i <= changeEndIndex; i++) {
      if (!endInclusive && i == changeEndIndex) {
        break;
      }
      if (result == null) {
        result = new ArrayList<>();
      }
      result.add(myChanges.get(i).change);
    }
    return result == null ? Collections.emptyList() : result;
  }
public @NotNull List<? extends TextChange> getChanges(int start, int end)