private void doRefreshDetails(ProgramLocation p1Location) {
		if (p1Location == null) {
			return;
		}
		// Do nothing if not visible.
		if (!isDisplayed) {
			return;
		}

		Program p1 = p1Location.getProgram();
		if (p1 != plugin.getFirstProgram() && p1 != plugin.getSecondProgram()) {
			return; // If this location isn't for our Diff then ignore it. May be switching program tabs.
		}
		if (p1DetailsLocation != p1Location) {
			p1DetailsLocation = p1Location;
		}
		AddressSetView newAddrSet = getDetailsAddressSet(p1DetailsLocation);

		if (newAddrSet == null) {
			setDocumentToErrorMessage("Must have a second program open to determine Diff details.");
			return;
		}

		if (!newAddrSet.equals(detailsAddrSet)) {
			detailsAddrSet = newAddrSet;
		}
		Address p1Address = p1DetailsLocation.getAddress();
		try {
			if (filterDiffs) {
				getFilteredDiffDetails(p1Address);
			}
			else {
				getDiffDetails(p1Address);
			}
		}
		catch (ConcurrentModificationException e) {
			setDocumentToErrorMessage(
				"Failed to determine Diff Details due to concurrent program changes.\n" +
					"This may be caused by background analysis activity.\n" +
					" *** Press the Refresh button to update *** ");

			// The program is being modified while this is trying to get the details.
			// If we want to automatically try again, this would need to re-issue the update
			// by calling updateManager.updateLater() here.
		}
	}
Refreshes the displayed Diff Details for the indicated program location address.
@param p1Location This should be a program1 location.
Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/DiffDetailsProvider.java