@Override
	public void mergeConflicts(ListingMergePanel listingPanel, Address addr,
			int chosenConflictOption, TaskMonitor monitor)
			throws CancelledException, MemoryAccessException {

		// First do a sanity check and see if this address has any conflicts.
		if (!hasConflict(addr)) {
			return;
		}

		monitor.setMessage("Resolving Function Tag conflicts.");

		boolean askUser = chosenConflictOption == ASK_USER;

		// If we're supposed to ask the user for their preferred conflict option, show
		// the merge panel. But ask check the choice (tagChoice) again after each
		// tag resolution to see if we should be using the "useForAll" option.
		//
		if ((tagChoice == ASK_USER) && askUser && mergeManager != null) {
			if (conflictMap.containsKey(addr)) {
				List<Long> ids = conflictMap.get(addr);

				// Loop over all conflicts at this address....
				for (Long id : ids) {
					currentlyMergingTagID = id;

					// Make sure we're supposed to prompt the user; if not, just use the 
					// previous choice and merge.
					if (tagChoice != ASK_USER) {
						int optionToUse =
							(tagChoice == ASK_USER) ? chosenConflictOption : tagChoice;
						mergeConflictingTag(addr, optionToUse, monitor);
					}
					else {
						showMergePanel(listingPanel, addr, id, monitor);
					}
					monitor.checkCancelled();
				}
			}
		}
		else {
			int optionToUse = (tagChoice == ASK_USER) ? chosenConflictOption : tagChoice;

			if (conflictMap.containsKey(addr)) {
				List<Long> ids = conflictMap.get(addr);
				for (Long id : ids) {
					currentlyMergingTagID = id;
					mergeConflictingTag(addr, optionToUse, monitor);
				}
			}
		}
	}
Stores the users' selection for how to handle a conflict.

@param option user option, from {@link ListingMergeConstants}
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/FunctionTagListingMerger.java