@Override
  public ProperTextRange intersection(@NotNull TextRange range) {
    assertProperRange(range);

    int newStart = Math.max(getStartOffset(), range.getStartOffset());
    int newEnd = Math.min(getEndOffset(), range.getEndOffset());
    return isProperRange(newStart, newEnd) ? new ProperTextRange(newStart, newEnd) : null;
  }
@Override
  public ProperTextRange intersection(@NotNull TextRange range)