void (@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) { Ref<Boolean> documentChanged = new Ref<>(); DocumentListener listener = new DocumentListener() { @Override public void documentChanged(@NotNull DocumentEvent event) { if (event.getOldLength() > 0 || event.getNewLength() > 0) documentChanged.set(Boolean.TRUE); } }; editor.getDocument().addDocumentListener(listener); try { myOriginalHandler.execute(editor, caret, dataContext); } finally { editor.getDocument().removeDocumentListener(listener); } if (documentChanged.isNull()) { ActionManager actionManager = ActionManager.getInstance(); KeyboardShortcut completionShortcut = actionManager.getKeyboardShortcut(IdeActions.ACTION_CHOOSE_LOOKUP_ITEM_REPLACE); KeyboardShortcut parameterShortcut = actionManager.getKeyboardShortcut(IdeActions.ACTION_EDITOR_NEXT_PARAMETER); if (completionShortcut != null && completionShortcut.equals(parameterShortcut)) { EditorActionHandler parameterHandler = EditorActionManager.getInstance().getActionHandler(IdeActions.ACTION_EDITOR_NEXT_PARAMETER); if (parameterHandler.isEnabled(editor, caret, dataContext)) parameterHandler.execute(editor, caret, dataContext); } } }