@Override
	public void actionPerformed(ActionContext context) {
		if (!(context instanceof DualDecompilerActionContext compareContext)) {
			return;
		}

		DecompilerCodeComparisonPanel decompPanel = compareContext.getCodeComparisonPanel();

		TokenPair currentPair = getCurrentTokenPair(decompPanel);
		if (currentPair == null || currentPair.leftToken() == null ||
			currentPair.rightToken() == null) {
			return;
		}

		ClangFuncNameToken leftFuncToken = (ClangFuncNameToken) currentPair.leftToken();
		ClangFuncNameToken rightFuncToken = (ClangFuncNameToken) currentPair.rightToken();

		Function leftFunction = getFuncFromToken(leftFuncToken, decompPanel.getProgram(LEFT));
		Function rightFunction = getFuncFromToken(rightFuncToken, decompPanel.getProgram(RIGHT));
		if (leftFunction == null || rightFunction == null) {
			return;
		}

		FunctionComparisonService service = tool.getService(FunctionComparisonService.class);
		if (service == null) {
			Msg.error(this, "Function Comparison Service not found!");
			return;
		}
		service.createComparison(leftFunction, rightFunction);
	}
Constructor
@param diffPanel diff Panel
@param tool tool
Ghidra/Features/CodeCompare/src/main/java/ghidra/features/codecompare/decompile/CompareFuncsFromMatchedTokensAction.java