private void renameResultSymbol(Symbol mySym)
			throws DuplicateNameException, InvalidInputException, CircularDependencyException {
		long id = mySym.getID();
		String name = mySym.getName();
		Address addr = mySym.getAddress();
		SourceType source = mySym.getSource();
		Namespace myNamespace = mySym.getParentNamespace();
		Namespace resultNamespace = DiffUtility.getNamespace(myNamespace, resultPgm);
		if (resultNamespace == null) {
			resultNamespace = DiffUtility.createNamespace(myPgm, myNamespace, resultPgm);
		}
		Symbol resultSym = resultSymTab.getSymbol(id);
		if (mySym.isDynamic() && resultSym.isDynamic()) {
			return;
		}
		// See if name exists in namespace already.
		Symbol addressSymbol = resultSymTab.getSymbol(name, addr, resultNamespace);
		if (addressSymbol != null) {
			if (addressSymbol != resultSym) {
				saveAddressConflict(addr, mySym);
			}
		}
		List<Symbol> symbols = resultSymTab.getSymbols(name, resultNamespace);
		for (Symbol symbol : symbols) {
			if (symbol == resultSym) {
				return;
			}
		}

		// rename and then set namespace.
		boolean nameChanged = !name.equals(resultSym.getName());
		boolean scopeChanged = resultSym.getParentNamespace() != resultNamespace;
		String tempName = null;
		if (nameChanged) {
			try {
				resultSym.setName(name, source);
			}
			catch (DuplicateNameException e) {
				if (scopeChanged) {
					// Just transitioning so use a temporary name.
					tempName = ProgramMerge.getUniqueName(resultSymTab, name, addr,
						resultSym.getParentNamespace(), resultNamespace, resultSym.getSymbolType());
					if (tempName == null) {
						throw e;
					}
					resultSym.setName(tempName, source);
				}
				else {
					String uniqueResultName = ProgramMerge.getUniqueName(resultSymTab, name, addr,
						resultSym.getParentNamespace(), resultNamespace, resultSym.getSymbolType());
					if (uniqueResultName == null) {
						throw e;
					}
					resultSym.setName(uniqueResultName, source);
					renamedConflictIDs.add(resultSym.getID());
				}
			}
		}
		if (scopeChanged) {
			resultSym.setNamespace(resultNamespace);
		}
		// Fix the name back up.
		if (tempName != null) {
			try {
				resultSym.setName(name, source);
			}
			catch (DuplicateNameException e) {
				renamedConflictIDs.add(resultSym.getID());
			}
		}
	}
Determine the type of changes to the symbols in the LATEST and MY (CheckedOut) program.
Changes can be symbol removed, added, changed, renamed, and set to primary.
@param monitor task monitor for displaying progress to the user
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/SymbolMerger.java