private void nameContentsChanged(ProgramModule sourceRoot, String sourceTreeName, String destTreeName,
			String origTreeName, int conflictIndex) throws CancelledException {

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

			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()) {
				onlySourceStructureChoice = conflictOption;
			}
		}
		int optionToUse =
			(onlySourceStructureChoice == ASK_USER) ? conflictOption : onlySourceStructureChoice;
		switch (optionToUse) {
			case KEEP_OTHER_NAME:
				// delete and add back in using source tree
				resultListing.removeTree(destTreeName);
				createTree(resultListing, destTreeName, sourceRoot);
				break;
			case KEEP_PRIVATE_NAME:
				// delete other name
				resultListing.removeTree(destTreeName);
				createTree(resultListing, sourceTreeName, sourceRoot);
				break;
			case ADD_NEW_TREE:
				createTree(resultListing, sourceTreeName, sourceRoot);
				break;
			case RENAME_PRIVATE:
				createTree(resultListing, getUniqueTreeName(sourceTreeName), sourceRoot);
				break;
			case ORIGINAL_NAME:
				try {
					resultListing.renameTree(destTreeName, getUniqueTreeName(origTreeName));
				}
				catch (DuplicateNameException e) {
				}
				break;
			case CANCELED:
				throw new CancelledException();
		}
		conflictOption = ASK_USER;
	}
Case 5: destination Name changed, source name and content 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