private void showPopupMenu(@NotNull ExecutionEvent event, @NotNull DBNNode node) throws ExecutionException {
        final IWorkbenchPart part = HandlerUtil.getActivePartChecked(event);
        final Shell activeShell = HandlerUtil.getActiveShell(event);
        final Control focusControl = activeShell != null ? activeShell.getDisplay().getFocusControl() : null;

        if (part == null || activeShell == null || focusControl == null) {
            return;
        }

        if (menuManager != null) {
            menuManager.dispose();
        }

        menuManager = new MenuManager();

        for (IContributionItem item : fillCreateMenuItems(part.getSite(), node)) {
            menuManager.add(item);
        }

        final Menu contextMenu = menuManager.createContextMenu(focusControl);
        contextMenu.addMenuListener(MenuListener.menuShownAdapter(e -> {
            int index = 0;
            for (final MenuItem item : contextMenu.getItems()) {
                if (CommonUtils.isNotEmpty(item.getText())) {
                    item.setText(ActionUtils.getLabelWithIndexMnemonic(item.getText(), index));
                    index += 1;
                }
            }
        }));

        final Point location = ActionUtils.getLocationFromControl(activeShell, focusControl);
        if (location != null) {
            contextMenu.setLocation(location);
        }

        contextMenu.setVisible(true);
    }
Sorry, this is a bit over-complicated handler. Historical reasons.
It can create object of specified type (in parameters) or for current selection.
Dynamic menu "Create" fills elements with parameters. Direct contribution of create command will create nearest
object type according to navigator selection.
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/actions/NavigatorHandlerObjectCreateNew.java