private void compareFunctions(BSimMatchesTableActionContext c) {
		FunctionComparisonService service = tool.getService(FunctionComparisonService.class);
		if (service == null) {
			Msg.error(this, "Function Comparison Service not found!");
			return;
		}
		MatchedFunctionComparisonModel model = new MatchedFunctionComparisonModel();
		List<BSimMatchResult> selectedRowObjects = matchesTable.getSelectedRowObjects();
		Set<Program> openedPrograms = new HashSet<>();
		for (BSimMatchResult row : selectedRowObjects) {
			try {
				Function originalFunction = getOriginalFunction(row);
				Function matchFunction = getMatchFunction(row, openedPrograms);
				model.addMatch(originalFunction, matchFunction);
			}
			catch (FunctionComparisonException e) {
				Msg.showError(this, null, "Unable to Compare Functions",
					"Compare Functions: " + e.getMessage());
			}
		}
		if (model.isEmpty()) {
			return;
		}
		service.createCustomComparison(model, () -> {
			for (Program remote : openedPrograms) {
				remote.release(BSimSearchResultsProvider.this);
			}
		});
	}
ComponentProvider for displaying BSim Similar Functions Search results.
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/gui/search/results/BSimSearchResultsProvider.java