void (@NotNull AnActionEvent e) { QuickActionProvider provider = e.getRequiredData(QuickActionProvider.KEY); List<AnAction> actions = provider.getActions(true); DefaultActionGroup group = new DefaultActionGroup(actions); group.addSeparator(); JComponent component = provider.getComponent(); if (component != null && !provider.isCycleRoot()) { Component eachParent = component.getParent(); while (eachParent != null) { QuickActionProvider parentProvider = ObjectUtils.tryCast(eachParent, QuickActionProvider.class); if (parentProvider != null && provider != parentProvider) { List<AnAction> parentActions = parentProvider.getActions(false); if (!parentActions.isEmpty()) { String name = StringUtil.notNullize(parentProvider.getName()); DefaultActionGroup parentGroup = new DefaultActionGroup(name, parentActions); if (!StringUtil.isEmpty(name)) { parentGroup.setPopup(true); } else { group.add(Separator.getInstance()); } group.add(parentGroup); } if (parentProvider.isCycleRoot()) break; } eachParent = eachParent.getParent(); } } JBPopupFactory.getInstance() .createActionGroupPopup(null, group, e.getDataContext(), ALPHA_NUMBERING, true) .showInBestPositionFor(e.getDataContext()); }