docs: public void setRange(int start, int end) {
          if (end < start) {
              throw new IllegalArgumentException("end should be larger or equeal then start position");
          }
  
          if (start == -1 && end == -1) {
              this.mRange = RANGE_EMPTY;
              onRangeChange(start, end);
              return;
          }
  
          if ((end - start + 1) != getItemCount()) {
              throw new MismatchChildCountException("ItemCount mismatch when range: " + mRange.toString() + " childCount: " + getItemCount());
          }
  
          if (start == mRange.getUpper() && end == mRange.getLower()) {
              // no change
              return;
          }
  
          this.mRange = Range.create(start, end);
          onRangeChange(start, end);
      }