void (@NotNull String textToSet) { if (!updateTextComponent(true)) { replaceTextInTextComponentEnsuringSelection(textToSet, mySearchTextComponent); return; } mySearchTextComponent.getDocument().addDocumentListener(new DocumentAdapter() { @Override protected void textChanged(@NotNull DocumentEvent e) { ApplicationManager.getApplication().invokeLater(() -> myEventDispatcher.getMulticaster().searchFieldDocumentChanged()); } }); mySearchTextComponent.registerKeyboardAction(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { if (StringUtil.isEmpty(mySearchTextComponent.getText())) { close(); } else { IdeFocusManager.getInstance(myProject).requestFocus(myTargetComponent, true); addTextToRecent(mySearchTextComponent); } } }, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, SystemInfo.isMac ? META_DOWN_MASK : CTRL_DOWN_MASK), JComponent.WHEN_FOCUSED); // make sure Enter is consumed by search text field, even if 'next occurrence' action is disabled // this is needed to e.g. avoid triggering a default button in containing dialog (see IDEA-128057) mySearchTextComponent.registerKeyboardAction(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {} }, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), WHEN_FOCUSED); new VariantsCompletionAction(mySearchTextComponent); // It registers a shortcut set automatically on construction }