private void merge(ExternalLocation[] externalLocations, int chosenConflictOption,
			TaskMonitor monitor) throws CancelledException {

		try {
			switch (chosenConflictOption) {
				case KEEP_LATEST:
					mergeLatest(externalLocations, monitor);
					break;
				case KEEP_MY:
					mergeMy(externalLocations, monitor);
					break;
				case KEEP_ORIGINAL:
					mergeOriginal(externalLocations, monitor);
					break;
			}
		}
		catch (DuplicateNameException e) {
			MergeManager.showBlockingError("Error Merging External Location", e.getMessage());
		}
		catch (InvalidInputException e) {
			MergeManager.showBlockingError("Error Merging External Location", e.getMessage());
		}
	}
Merges the entire external so that it will match the external as it is in the program
indicated by the chosen option.
@param externalLocations the external locations for the external in Latest, My, and Original.
(Any of these locations can be null if the external is not in that program.)
@param chosenConflictOption ListingMergeConstant (KEEP_LATEST, KEEP_MY, KEEP_ORIGINAL)
indicating which program the resulting external should become.
@param monitor the task monitor for feedback and cancelling the merge.
@throws CancelledException if the user cancels the merge.
@throws InvalidInputException
@throws DuplicateNameException
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalFunctionMerger.java