@Override
  protected void replace(int from, int to, List<T> newData) {
    super.replace(from, to, newData);
    if (myNamer != null) {
      boolean updateFull = myFullMatchIndex == -1 || myFullMatchIndex >= from;
      boolean updatePrefix = myStartsWithIndex == -1 || myStartsWithIndex >= from;
      if (!updateFull && !updatePrefix) return;
      for (int i = 0; i < newData.size(); i++) {
        T elt = newData.get(i);
        String name = myNamer.fun(elt);
        if (name != null) {
          String filterString = StringUtil.toUpperCase(myPattern.compute());
          String candidateString = StringUtil.toUpperCase(name);
          int index = i + from;

          if (updateFull && filterString.equals(candidateString)) {
            myFullMatchIndex = index;
            updateFull = false;
          }

          if (updatePrefix && candidateString.startsWith(filterString)) {
            myStartsWithIndex = index;
            updatePrefix = false;
          }
          if (!updateFull && !updatePrefix) break;
        }
      }
      if (updateFull) {
        if (myFullMatchIndex >= to) {
          myFullMatchIndex = myFullMatchIndex - to + newData.size();
        } else {
          myFullMatchIndex = -1;
        }
      }
      if (updatePrefix) {
        if (myStartsWithIndex >= to) {
          myStartsWithIndex = myStartsWithIndex - to + newData.size();
        } else {
          myStartsWithIndex = -1;
        }
      }
    }
  }
@Override
  protected void replace(int from, int to, List<T> newData)