boolean (PopupStep nextStep, Object parentValue, InputEvent e) { disposeAsyncPopupWaiter(); if (nextStep == PopupStep.FINAL_CHOICE) { disposePopup(e); return true; } else if (nextStep instanceof AsyncPopupStep) { 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((AsyncPopupStep<?>)nextStep, point, step -> { handleNextStep(step, parentValue, e); return Unit.INSTANCE; }); return false; } else { showNextStepPopup(nextStep, parentValue); return false; } }