@Override
  protected void doExecute(@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);
      }
    }
  }
@Override
  protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext)