private void scheduleUpdateNonBlocking(T oldSelectedValue, int oldSelectedIndex) {
    ReadAction
      .nonBlocking(() -> {
        List<T> listItems = getListItems();
        List<ListItemPresentation> presentations = ContainerUtil.map(listItems, this::getPresentation);
        return Pair.create(listItems, presentations);
      })
      .finishOnUiThread(ModalityState.any(), items -> {
        try {
          updateList(oldSelectedValue, oldSelectedIndex, items.first, items.second);
        }
        finally {
          myList.setPaintBusy(false);
        }
      })
      .coalesceBy(myUpdateCoalesceKey)
      .expireWith(this)
      .inSmartMode(myProject)
      .submit(AppExecutorUtil.getAppExecutorService());
  }
private void scheduleUpdateNonBlocking(T oldSelectedValue, int oldSelectedIndex)