public String validateActionKeyBinding(DockingActionIf dockingAction, KeyStroke ks) {

		if (ks == null) {
			return null; // clearing the key stroke
		}

		//
		// 1) Handle case with given key stroke already in use by a system action
		//
		Action existingAction = dockingKeyMap.get(ks);
		if (existingAction instanceof SystemKeyBindingAction systemAction) {

			DockingActionIf systemDockingAction = systemAction.getAction();
			if (dockingAction == systemDockingAction) {
				return null; // same key stroke; not sure if this can happen
			}

			String ksString = KeyBindingUtils.parseKeyStroke(ks);
			return ksString + " in use by System action '" + systemDockingAction.getName() + "'";
		}

		if (dockingAction == null) {
			return null; // the client is only checking the keystroke and not any associated action
		}

		//
		// 2) Handle the case where a system action key stroke is being set to something that is
		// already in-use by some other action
		//
		boolean hasSystemAction = systemActionsByFullName.containsKey(dockingAction.getFullName());
		if (hasSystemAction && existingAction != null) {
			return "System action cannot be set to in-use key stroke";
		}

		return null;
	}
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