void (@NotNull JTextComponent textComponent) { if (textComponent.getClientProperty(UNDO_MANAGER) instanceof UndoManager) { return; } UndoManager undoManager = new UndoManager(); textComponent.putClientProperty(UNDO_MANAGER, undoManager); textComponent.getDocument().addUndoableEditListener(undoManager); textComponent.getDocument().addDocumentListener(SET_TEXT_CHECKER); textComponent.getInputMap() .put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, SystemInfoRt.isMac ? Event.META_MASK : Event.CTRL_MASK), "undoKeystroke"); textComponent.getActionMap().put("undoKeystroke", UNDO_ACTION); textComponent.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, (SystemInfoRt.isMac ? Event.META_MASK : Event.CTRL_MASK) | Event.SHIFT_MASK), "redoKeystroke"); textComponent.getActionMap().put("redoKeystroke", REDO_ACTION); }