@Override
	public boolean applyTo(Program program, TaskMonitor monitor) {

		monitor.setMessage("Capturing Function Data Types");
		boolean success = false;
		int transactionID = dtm.startTransaction("Capture function data types");
		CategoryPath category =
			new CategoryPath(CategoryPath.ROOT, "_CAPTURED_FROM_" + program.getName());
		try {
			FunctionManager functionManager = program.getFunctionManager();
			FunctionIterator functions = functionManager.getFunctions(set, true);
			while (functions.hasNext()) {
				monitor.checkCancelled();
				Function function = functions.next();
				FunctionSignature signature = function.getSignature(true);
				FunctionDefinitionDataType functionDef =
					new FunctionDefinitionDataType(category, signature.getName(), signature);
				dtm.resolve(functionDef, null);
			}
			success = true;
		}
		catch (CancelledException e) {
			// success flag will be false
		}
		finally {
			dtm.endTransaction(transactionID, success);
		}
		return success;
	}
Constructs a new command to create function definition data types
in the given data type manager from the function's whose entry points are in the
address set.
@param dtm data type manager containing the function signature data types
@param set set of addresses containing the entry points of the functions whose signatures
are to be turned into data types.
@param listener
Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/CaptureFunctionDataTypesCmd.java