private void processModifies(TaskMonitor monitor) throws CancelledException {
		updateProgressMessage("Processing modified symbols...");
		monitor.setMessage("Symbol Merge: Processing modified symbols...");

		int len = myModifiedIDs.length;
		monitor.initialize(len);
		for (int i = 0; i < len; i++) {
			monitor.setProgress(i);
			monitor.checkCancelled();
			incrementProgress(1);
			long id = myModifiedIDs[i];
			Symbol mySym = mySymTab.getSymbol(id);
			SymbolType myType = mySym.getSymbolType();
			Symbol resultSym = getResultSymbolFromMySymbol(mySym);
			// Symbol types are:
			// CLASS, EXTERNAL, FUNCTION, GLOBAL, GLOBAL_VAR, LIBRARY,
			// LOCAL_VAR, NAMESPACE, PARAMETER
			if (myType == SymbolType.FUNCTION) {
				if (resultSym != null) { // Function still exists.
					processModifiedFunctionNamespace(id, mySym, resultSym);
					// Functions were already handled by function merging, but
					// the associated symbol's comment and source was not.
					// If the symbol still exists then automatically handle the source and check
					// for comment conflicts.
					processModifiedFunctionSymbol(id, resultSym, mySym);
				}
				continue;
			}
			else if ((myType != SymbolType.LABEL) && (myType != SymbolType.CLASS) &&
				(myType != SymbolType.NAMESPACE)) {
				continue;
			}
			// Skip external labels since they should have already been handled by ExternalFunctionMerger.
			if (myType == SymbolType.LABEL && mySym.isExternal()) {
				continue;
			}

//			boolean modifiedInLatest = Arrays.binarySearch(latestModifiedIDs, id) >= 0;
			boolean removedInLatest = Arrays.binarySearch(latestRemoveIDs, id) >= 0;

			boolean renamedInMy = Arrays.binarySearch(myRenameIDs, id) >= 0;
//			boolean commentChangedInMy = Arrays.binarySearch(myCommentChangeIDs, id) >= 0;
			boolean sourceChangedInMy = Arrays.binarySearch(mySourceChangeIDs, id) >= 0;
			boolean renamedInLatest = Arrays.binarySearch(latestRenameIDs, id) >= 0;
//			boolean commentChangedInLatest = Arrays.binarySearch(latestCommentChangeIDs, id) >= 0;
			boolean sourceChangedInLatest = Arrays.binarySearch(latestSourceChangeIDs, id) >= 0;

			if (removedInLatest) {
				// Comment and source changes alone won't result in conflict.
				// Instead the remove wins out over symbol comment and source changes.
				if (renamedInMy) {
					saveRemoveConflict(mySym); // Rename My vs Remove Latest
				}
				continue;
			}
			if (renamedInMy) {
				if (renamedInLatest) {
					Symbol latestSym = latestSymTab.getSymbol(id);
					String myName = mySym.getName();
					Namespace myNamespace = mySym.getParentNamespace();
					String latestName = latestSym.getName();
					Namespace latestNamespace = latestSym.getParentNamespace();
					Namespace equivNamespace = DiffUtility.getNamespace(latestNamespace, myPgm);
					if (!myName.equals(latestName) || (myNamespace != equivNamespace)) {
						saveRenameConflict(id);
						continue;
					}
				}
				// Otherwise, auto merge the rename. (AUTO_MERGE)
				try {
					// Try to rename
					renameResultSymbol(mySym);
				}
				catch (Exception e) {
					String msg = "Failed to rename '" + mySym.getName(true) + "'.";
					Msg.showError(this, null, "Rename Symbol Error", msg, e);
				}
			}
			else {
				// Handle Symbol source if it wasn't done as part of a rename.
				if (resultSym != null) {
					if (sourceChangedInMy) {
						if (!sourceChangedInLatest) {
							try {
								// Use My version's source since Latest didn't change it.
								resultSym.setSource(mySym.getSource());
							}
							catch (IllegalArgumentException e) {
								Msg.warn(this, e.getMessage());
							}
						}
						// For now if symbol source conflict, Latest program (first in) wins.
					}
				}
			}
			// Handle Symbol comments.
//			if (commentChangedInMy) {
//				if (!commentChangedInLatest) {
//					if (resultSym != null) {
//						resultSym.setSymbolStringData(mySym.getSymbolStringData());
//					}
//				}
//				else {
//					Symbol latestSym = latestSymTab.getSymbol(id);
//					if (!SystemUtilities.isEqual(latestSym.getSymbolStringData(), mySym.getSymbolStringData())) {
//						saveCommentConflict(id);
//					}
//				}
//			}
		}
		monitor.setProgress(len);
	}
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