void (boolean handleFinalChoices, MouseEvent e) { final boolean pathIsAlreadySelected = myShowingChildPath != null && myShowingChildPath.equals(myWizardTree.getSelectionPath()); if (pathIsAlreadySelected) return; myPendingChildPath = null; Object selected = myWizardTree.getLastSelectedPathComponent(); if (selected != null) { final Object userObject = extractUserObject(selected); if (getTreeStep().isSelectable(selected, userObject)) { disposeChildren(); final boolean hasNextStep = myStep.hasSubstep(userObject); if (!hasNextStep && !handleFinalChoices) { myShowingChildPath = null; return; } PopupStep<?> queriedStep; try (AccessToken ignore = PopupImplUtil.prohibitFocusEventsInHandleSelect(); AccessToken ignore2 = SlowOperations.startSection(SlowOperations.ACTION_PERFORM)) { queriedStep = myStep.onChosen(userObject, handleFinalChoices); } if (queriedStep == PopupStep.FINAL_CHOICE || !hasNextStep) { setFinalRunnable(myStep.getFinalRunnable()); setOk(true); disposeAllParents(e); } else { myShowingChildPath = myWizardTree.getSelectionPath(); handleNextStep(queriedStep, myShowingChildPath); myShowingChildPath = null; } } } }