@Override
	public String getPrototypeString(boolean includeCallingConvention) {
		StringBuffer buf = new StringBuffer();
		if (includeCallingConvention && hasNoReturn) {
			buf.append(NORETURN_DISPLAY_STRING);
			buf.append(" ");
		}
		buf.append((returnType != null ? returnType.getDisplayName() : "void"));
		buf.append(" ");
		if (includeCallingConvention &&
			!Function.UNKNOWN_CALLING_CONVENTION_STRING.equals(callingConventionName)) {
			buf.append(callingConventionName);
			buf.append(" ");
		}
		buf.append(name);
		buf.append("(");
		int n = params.length;
		for (int i = 0; i < n; i++) {
			ParameterDefinition param = params[i];
			buf.append(param.getDataType().getDisplayName());
			buf.append(" ");
			buf.append(param.getName());
			if ((i < (n - 1)) || hasVarArgs) {
				buf.append(", ");
			}
		}
		if (hasVarArgs) {
			buf.append(VAR_ARGS_DISPLAY_STRING);
		}
		else if (params.length == 0) {
			buf.append(VOID_PARAM_DISPLAY_STRING);
		}
		buf.append(")");

		return buf.toString();
	}
Create a Function Definition based on a Function
@param function the function to use to create a Function Signature.
@param formalSignature if true only original formal types will be retained and 
auto-params discarded (e.g., this, __return_storage_ptr__, etc.).  If false,
the effective signature will be used where forced indirect and auto-params
are reflected in the signature.  This option has no affect if the specified 
function has custom storage enabled.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/FunctionDefinitionDataType.java