private void selectAndOpenProgram2() {
		if (checkStaleOverlays(currentProgram)) {
			return;
		}

		List<Program> openProgramList = getOpenProgramList();

		OpenVersionedFileDialog<Program> dialog = getOpenVersionedFileDialog(openProgramList);

		dialog.addOkActionListener(e -> {
			tool.clearStatusInfo();
			JComponent component = dialog.getComponent();

			Program dobj = dialog.getDomainObject(ProgramDiffPlugin.this, true);
			if (dobj != null) {
				if (openSecondProgram(dobj, component)) {
					dialog.close();
					launchDiffOnOpenProgram();
				}
				return;
			}
		});
		dialog.showComponent();
	}
Generate a list of programs which are currently open in the tool which are compatible
with the primaryProgram to be diff'd.  The top/primary entries correspond to this 
programs which have the same name (see {@link Program#getName()}) as the primaryProgram, 
while the remaining compatible programs will be considered secondary.  Each of these
two groups will be sorted by its domain file name then concatenated to form a single list.  
@return ordered open program list for use with the {@link OpenVersionedFileDialog}.
Ghidra/Features/ProgramDiff/src/main/java/ghidra/app/plugin/core/diff/ProgramDiffPlugin.java