private void handlePrimaryConflict(ListingMergePanel listingPanel, Address addr,
			int chosenConflictOption) throws CancelledException {
		currentConflictType = SymbolConflictType.PRIMARY_SYMBOL_CONFLICT;
		boolean askUser = (primarySymbolChoice == ASK_USER) && (chosenConflictOption == ASK_USER);
		// Deal with primary conflicts (May or may not still be in conflict).
		if (primaryConflicts.contains(addr)) {
			Symbol latestPrimary = latestSymTab.getPrimarySymbol(addr);
			Symbol latestResultSymbol = getResultSymbolFromLatestSymbol(latestPrimary);
			Symbol myPrimary = mySymTab.getPrimarySymbol(addr);
			Symbol myResultSymbol = getResultSymbolFromMySymbol(myPrimary);
			if (myResultSymbol == null || Objects.equals(myResultSymbol, latestResultSymbol)) {
				return;
			}
			currentAddress = addr;
			currentBackgroundSet = new AddressSet(addr, addr);
			if (askUser && mergeManager != null) {
				showConflictPanel(listingPanel, PRIMARY_CONFLICT, primarySymbolChoice,
					"Primary Symbol");
			}
			else {
				int optionToUse =
					(primarySymbolChoice == ASK_USER) ? chosenConflictOption : primarySymbolChoice;
				setPrimary(addr, optionToUse);
			}
		}
	}
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