private void removeExternal(long resultExternalSymbolID) {
		Symbol externalSymbol = symbolTables[RESULT].getSymbol(resultExternalSymbolID);
		if (!externalSymbol.isExternal()) {
			throw new AssertException("Symbol to remove isn't an external as expected.");
		}
		ExternalLocation resultExternalLocation =
			externalManagers[RESULT].getExternalLocation(externalSymbol);
		if (resultExternalLocation == null) {
			return;
		}
		if (resultExternalLocation.isFunction()) {
			Symbol symbol = resultExternalLocation.getSymbol();
			Address addr = symbol.getAddress();
			symbol.delete();
			// Re-acquire the external location which should now be an external label.
			Symbol resultSymbol = symbolTables[RESULT].getPrimarySymbol(addr);
			resultExternalLocation = externalManagers[RESULT].getExternalLocation(resultSymbol);
			if (resultExternalLocation == null) {
				throw new AssertException("Why isn't there an external label.");
			}
		}
		Symbol symbol = resultExternalLocation.getSymbol();
		if (symbol != null) {
			symbol.delete();
		}
	}
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