private void showMergePanel(final ListingMergePanel listingPanel, final Address addr,
			Long tagID, TaskMonitor monitor) {

		this.currentAddress = addr;
		this.currentMonitor = monitor;

		try {
			final ChangeListener changeListener = new ChangeListener() {
				@Override
				public void stateChanged(ChangeEvent e) {

					// If choice has already been set, then just use that option and don't
					// prompt the user.
					conflictOption = conflictPanel.getSelectedOptions();
					if (conflictOption == ASK_USER) {
						if (mergeManager != null) {
							mergeManager.setApplyEnabled(false);
							try {
								mergeConflictingTag(addr, KEEP_LATEST, currentMonitor);
							}
							catch (CancelledException ce) {
								// no need to do anything
							}
						}
						return;
					}
					if (mergeManager != null) {
						mergeManager.clearStatusText();
					}
					try {
						mergeConflictingTag(addr, conflictOption, currentMonitor);
					}
					catch (CancelledException ce) {
						// no need to do anything
					}
					if (mergeManager != null) {
						mergeManager.setApplyEnabled(true);
					}
				}
			};
			SwingUtilities.invokeAndWait(new Runnable() {
				@Override
				public void run() {
					setupConflictsPanel(listingPanel, FunctionTagListingMerger.this.currentAddress,
						tagID, changeListener);
					listingPanel.setBottomComponent(conflictPanel);
				}
			});
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					Address addressToShow = FunctionTagListingMerger.this.currentAddress;
					listingPanel.clearAllBackgrounds();
					if (addressToShow != null) {
						listingPanel.paintAllBackgrounds(getCodeUnitAddressSet(addressToShow));
						listingPanel.goTo(addressToShow);
					}
				}
			});
		}
		catch (InterruptedException | InvocationTargetException e) {
			MergeManager.showBlockingError("Merge Error", "Error displaying merge panel", e);
			return;
		}

		if (mergeManager != null) {
			mergeManager.setApplyEnabled(false);
			mergeManager.showListingMergePanel(currentAddress);
		}
	}
Displays the conflict resolution panel for a single tag ID at the specified
address.

@param listingPanel the listing panel to display
@param addr the address where the merge is occurring
@param tagID the tag id being merged
@param monitor the task monitor
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/FunctionTagListingMerger.java