@NotNull
  Promise<? super Object> select(@Nullable Configurable configurable) {
    AsyncPromise<? super Object> promise = new AsyncPromise<>();
    myQueuedConfigurable = configurable;
    myQueue.queue(new Update(this) {
      @Override
      public void run() {
        if (configurable != myQueuedConfigurable) {
          return;
        }

        Runnable handler = () -> {
          fireSelected(configurable).processed(promise);
        };

        if (configurable == null) {
          handler.run();
          return;
        }

        MyNode editorNode = findNode(configurable);
        FilteringTreeStructure.FilteringNode editorUiNode = myModel.getTreeStructure().getVisibleNodeFor(editorNode);
        if (editorUiNode == null) return;

        myModel.select(editorUiNode, myTree, treePath -> handler.run());
      }

      @Override
      public void setRejected() {
        super.setRejected();
        promise.cancel();
      }
    });
    return promise;
  }
@NotNull
  Promise<? super Object> select(@Nullable Configurable configurable)