@Override
	protected void decompilerActionPerformed(DecompilerActionContext context) {
		Function func = context.getFunction();
		Program program = func.getProgram();
		PcodeOp op = getCallOp(program, context.getTokenAtCursor());
		Function calledFunc = getCalledFunction(program, op);
		boolean varargs = false;
		if (calledFunc != null) {
			varargs = calledFunc.hasVarArgs();
		}
		if ((op.getOpcode() == PcodeOp.CALL) && !varargs) {
			if (OptionDialog.showOptionDialog(context.getDecompilerPanel(),
				"Warning : Localized Override",
				"Incorrect information entered here may hide other good information.\n" +
					"For direct calls, it is usually better to alter the prototype on the function\n" +
					"itself, rather than overriding the local call. Proceed anyway?",
				"Proceed") != 1) {
				return;
			}
		}

		String name = "func"; // Default if we don't have a real name
		if (calledFunc != null) {
			name = calledFunc.getName();
		}
		String signature = generateSignature(op, name, calledFunc);

		FunctionDefinition fdef = editSignature(context, calledFunc, signature);
		if (fdef == null) {
			return;
		}
		int transaction = program.startTransaction("Override Signature");
		boolean commit = false;
		try {
			Address addr = op.getSeqnum().getTarget();
			HighFunctionDBUtil.writeOverride(func, addr, fdef);
			commit = true;
		}
		catch (Exception e) {
			Msg.showError(getClass(), context.getDecompilerPanel(), "Override Signature Failed",
				"Error overriding signature: " + e);
		}
		finally {
			program.endTransaction(transaction, commit);
		}
	}
Try to find the PcodeOp representing the call the user has selected
@param program is the Program
@param tokenAtCursor is the point in the window the user has selected
@return the PcodeOp or null
Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/OverridePrototypeAction.java