default void moveText(int srcStart, int srcEnd, int dstOffset) {
    assert srcStart <= srcEnd && (dstOffset <= srcStart || dstOffset >= srcEnd);
    if (srcStart < srcEnd && (dstOffset < srcStart || dstOffset > srcEnd)) {
      String fragment = getText(new TextRange(srcStart, srcEnd));
      insertString(dstOffset, fragment);
      int shift = dstOffset < srcStart ? srcEnd - srcStart : 0;
      deleteString(srcStart + shift, srcEnd + shift);
    }
  }
default void moveText(int srcStart, int srcEnd, int dstOffset)