private void doAddKeyBinding(ComponentProvider provider, DockingActionIf action,
			KeyStroke mappingKeyStroke, KeyStroke actionKeyStroke) {

		DockingKeyBindingAction existingAction = dockingKeyMap.get(mappingKeyStroke);
		if (existingAction instanceof MultipleKeyAction) {
			MultipleKeyAction multipleKeyction = (MultipleKeyAction) existingAction;
			multipleKeyction.addAction(provider, action);
			return;
		}

		if (existingAction instanceof SystemKeyBindingAction) {
			// This should not happen due to protections in the UI
			Msg.error(this, "Attempted to use the same keybinding for an existing System action: " +
				existingAction + ".  Keystroke: " + mappingKeyStroke);
			return;
		}

		if (systemActionsByFullName.containsKey(action.getFullName())) {
			// the user has updated the binding for a System action; re-install it
			registerSystemKeyBinding(action, mappingKeyStroke);
			return;
		}

		// assume existingAction == null
		dockingKeyMap.put(mappingKeyStroke,
			new MultipleKeyAction(tool, provider, action, actionKeyStroke));
	}
A class that organizes system key bindings by mapping them to assigned {@link DockingActionIf}s.

<p>This class understands reserved system key bindings.  For non-reserved key bindings, this
class knows how to map a single key binding to multiple actions.
Ghidra/Framework/Docking/src/main/java/docking/action/KeyBindingsManager.java