public boolean handleNextStep(PopupStep nextStep, Object parentValue, InputEvent e) {
    disposeAsyncPopupWaiter();
    if (nextStep == PopupStep.FINAL_CHOICE) {
      disposePopup(e);
      return true;
    }
    else if (nextStep instanceof AsyncPopupStep<?> async) {
      Rectangle bounds = getCellBounds(getSelectedIndex());
      // TODO: separator size calculation, see IDEA-327566
      RelativePoint point = new RelativePoint(getList(), new Point(bounds.width, bounds.y + bounds.height / 2));
      myAsyncPopupWaiter = new AsyncPopupWaiter(async, point, step -> {
        handleNextStep(step, parentValue, e);
        return Unit.INSTANCE;
      });
      return false;
    }
    else {
      showNextStepPopup(nextStep, parentValue);
      return false;
    }
  }
public boolean handleNextStep(PopupStep nextStep, Object parentValue, InputEvent e)