private void mergeEdits(FunctionTagManagerDB tagManagerMY,
			FunctionTagManagerDB tagManagerLATEST, FunctionTagManagerDB tagManagerRESULT,
			List<Long> myEditedIDs, List<Long> latestEditedIDs, List<Long> latestDeletedIDs) {

		String CONFLICT_REASON = "Tag name and/or comment edited in both programs";

		for (long id : myEditedIDs) {

			FunctionTag tagMy = tagManagerMY.getFunctionTag(id);

			if (latestEditedIDs.contains(id)) {
				tagConflicts.put(id, CONFLICT_REASON);
			}
			else {
				// Do a check here on the deleted list. If the tag was deleted in Latest, then
				// it won't exist in Result so we don't want to try to do an update. This is ok
				// since the edit/delete conflict would have already been noticed and added to
				// the conflict list in #mergeDeletes().
				if (!latestDeletedIDs.contains(id)) {
					FunctionTag functionTag = tagManagerRESULT.getFunctionTag(id);
					if (functionTag != null) {
						functionTag.setName(tagMy.getName());
						functionTag.setComment(tagMy.getComment());
					}

				}
			}
		}
		for (long id : latestEditedIDs) {

			if (myEditedIDs.contains(id)) {
				tagConflicts.put(id, CONFLICT_REASON);
			}
			else {
				// The Result program already has Latest changes in it, so no need to update 
				// it here. If this wasn't the case we'd have to do the following:
				// tagManagerRESULT.updateFunctionTag(id, tagLatest.getName(), tagLatest.getComment());
			}
		}
	}
Merges tags that have been edited (name/comment changed). 

CONFLICT CASES:
	1. The same tag has been edited in both programs, either the name or comment.

Note that the conflict case of a tag being edited in one program and 
deleted in another is handled in {@link #mergeDeletions(FunctionTagManagerDB, List, List, List, List)}.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/FunctionTagMerger.java