private void queueUpdateBulk(@NotNull List<? extends Node> toUpdate, @NotNull Runnable onCompletedInEdt) {
    if (toUpdate.isEmpty() || isDisposed()) return;
    ReadAction.nonBlocking((Callable<?>)() -> {
        for (Node node : toUpdate) {
          try {
            node.update(edtFireTreeNodesChangedQueue);
          }
          catch (IndexNotReadyException ignore) {
          }
        }
        return null;
      })
      .expireWith(this)
      .finishOnUiThread(ModalityState.defaultModalityState(), __ -> onCompletedInEdt.run())
      .submit(updateRequests);
  }
private void queueUpdateBulk(@NotNull List<? extends Node> toUpdate, @NotNull Runnable onCompletedInEdt)