@Override
	public boolean createData(DataType dataType, ListingActionContext context,
			boolean stackPointers, boolean promptForConflictRemoval) {
		ProgramLocation location = context.getLocation();
		Program program = context.getProgram();
		if (!(location instanceof FunctionLocation)) {
			tool.setStatusInfo("Unsupported function location for data-type");
			return false;
		}

		if (dataType != DataType.DEFAULT && dataType != DataType.VOID) {
			dtmService.setRecentlyUsed(dataType);
		}

		Function function = getFunction(context);
		if (function == null) {
			tool.setStatusInfo("Unsupported function location for data-type");
			return false;
		}

		// TODO: this will not allow setting a return value as a function pointer
		if ((location instanceof FunctionSignatureFieldLocation) &&
			(dataType instanceof FunctionSignature)) {
			return tool.execute(new ApplyFunctionSignatureCmd(function.getEntryPoint(),
				(FunctionSignature) dataType, SourceType.USER_DEFINED), program);
		}

		DataType existingDT = getCurrentDataType(context);
		dataType = DataUtilities.reconcileAppliedDataType(existingDT, dataType, stackPointers);

		if (dataType.getLength() < 0) {
			tool.setStatusInfo("Only fixed-length data-type permitted");
			return false;
		}

		// this check must come before the signature check, since this is a FunctionSignatureFieldLocation
		if (location instanceof FunctionParameterFieldLocation) {
			FunctionParameterFieldLocation parameterLocation =
				(FunctionParameterFieldLocation) location;
			Parameter parameter = parameterLocation.getParameter();

			return setVariableDataType(parameter, dataType, promptForConflictRemoval);
		}
		else if (location instanceof FunctionSignatureFieldLocation) {
			SourceType source =
				(dataType == DataType.DEFAULT) ? SourceType.DEFAULT : SourceType.USER_DEFINED;
			return tool.execute(
				new SetReturnDataTypeCmd(function.getEntryPoint(), dataType, source), program);
		}
		else if (location instanceof VariableLocation) {
			Variable variable = ((VariableLocation) location).getVariable();
			return setVariableDataType(variable, dataType, promptForConflictRemoval);
		}
		tool.setStatusInfo("Unsupported function location for data-type");
		return false;
	}
Get an iterator over all functions overlapping the current selection.
If there is no selection any functions overlapping the current location.

@param context the context 
@return Iterator over functions
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/FunctionPlugin.java