private void namesContentChanged(ProgramModule sourceRoot, String sourceTreeName, String destTreeName,
			ProgramModule origRoot, int conflictIndex) throws CancelledException {

		String origTreeName = origRoot.getTreeName();

		if (onlyDestinationStructureChoice == ASK_USER && conflictOption == ASK_USER &&
			mergeManager != null) {
			waitForUserInput(sourceTreeName, destTreeName, origTreeName, conflictIndex, true, true,
				true, false);

			if (conflictOption == CANCELED) {
				throw new CancelledException();
			}
			// If the "Use For All" check box is selected 
			// then save the option chosen for this conflict type.
			if (mergePanel.getUseForAll()) {
				onlyDestinationStructureChoice = conflictOption;
			}
		}
		int optionToUse =
			(onlyDestinationStructureChoice == ASK_USER) ? conflictOption
					: onlyDestinationStructureChoice;
		switch (optionToUse) {
			case KEEP_OTHER_NAME:
				// no action required
				break;
			case KEEP_PRIVATE_NAME:
				// rename other to source name
				try {
					resultListing.renameTree(destTreeName, getUniqueTreeName(sourceTreeName));
				}
				catch (DuplicateNameException e) {
					throw new AssertException("Got duplicate name exception!");
				}
				break;
			case ADD_NEW_TREE:
			case RENAME_PRIVATE:
				createTree(resultListing, getUniqueTreeName(sourceTreeName), sourceRoot);
				break;
			case ORIGINAL_NAME:
				createTree(resultListing, getUniqueTreeName(origTreeName), origRoot);
				break;
			case CANCELED:
				throw new CancelledException();
		}
		conflictOption = ASK_USER;
	}
Case 4: destination Name and content changed, source name changed
@param sourceRoot source root module
@param sourceTreeName source tree name
@param destTreeName destination tree name
@throws CancelledException
Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/ProgramTreeMergeManager.java