This object represents the compiled form of a user-written function
(the source can be either an XSLT stylesheet function or an XQuery function).
It is assumed that type-checking, of both the arguments and the results,
has been handled at compile time. That is, the expression supplied as the body
of the function must be wrapped in code to check or convert the result to the
required type, and calls on the function must be wrapped at compile time to check or
convert the supplied arguments.
call
public ValueRepresentation call(ValueRepresentation[] actualArgs,
Controller controller)
throws XPathException
Call this function. This method allows an XQuery function to be called directly from a Java
application. It creates the environment needed to achieve this
actualArgs
- the arguments supplied to the function. These must have the correct
types required by the function signature (it is the caller's responsibility to check this).
It is acceptable to supply a Closure
to represent a value whose
evaluation will be delayed until it is needed. The array must be the correct size to match
the number of arguments: again, it is the caller's responsibility to check this.controller
- This provides the run-time context for evaluating the function. A Controller
may be obtained by calling XQueryExpression.newController()
. This may
be used for a series of calls on functions defined in the same module as the XQueryExpression.
- a Value representing the result of the function.
call
public ValueRepresentation call(ValueRepresentation[] actualArgs,
XPathContextMajor context)
throws XPathException
Call this function to return a value.
actualArgs
- the arguments supplied to the function. These must have the correct
types required by the function signature (it is the caller's responsibility to check this).
It is acceptable to supply a Closure
to represent a value whose
evaluation will be delayed until it is needed. The array must be the correct size to match
the number of arguments: again, it is the caller's responsibility to check this.context
- This provides the run-time context for evaluating the function. It is the caller's
responsibility to allocate a "clean" context for the function to use; the context that is provided
will be overwritten by the function.
- a Value representing the result of the function.
computeEvaluationMode
public void computeEvaluationMode()
Determine the preferred evaluation mode for this function
containsTailCalls
public boolean containsTailCalls()
Determine whether the function contains tail calls (on this or other functions)
- true if the function contains tail calls
gatherDirectContributingCallees
public void gatherDirectContributingCallees(Set result)
Gather the direct contributing callees of this function. A callee is a function that this one
calls. A contributing callee is a function whose output is added directly to the output of this
function without further processing (other than by attaching it to a parent element or document
node). A direct contributing callee is a function that is called directly, rather than indirectly.
result
- the list into which the callees are gathered.
getArgumentType
public SequenceType getArgumentType(int n)
Get the required types of an argument to this function
n
- identifies the argument in question, starting at 0
- a SequenceType object, indicating the required type of the argument
getEvaluationMode
public int getEvaluationMode()
Get the evaluation mode. The evaluation mode will be computed if this has not already been done
- the computed evaluation mode
getFunctionName
public StructuredQName getFunctionName()
Get the function name
- the function name, as a StructuredQName
getNumberOfArguments
public int getNumberOfArguments()
Get the arity of this function
getParameterDefinitions
public UserFunctionParameter[] getParameterDefinitions()
Get the definitions of the declared parameters for this function
- an array of parameter definitions
getResultType
public SequenceType getResultType(TypeHierarchy th)
Get the type of value returned by this function
th
- the type hierarchy cache
- the declared result type, or the inferred result type
if this is more precise
isMemoFunction
public boolean isMemoFunction()
Ask whether this function is a memo function
- true if this function is marked as a memo function
isTailRecursive
public boolean isTailRecursive()
Determine whether the function contains a tail call, calling itself
- true if the function contains a directly-recursive tail call
iterateEvents
public EventIterator iterateEvents(ValueRepresentation[] actualArgs,
XPathContextMajor context)
throws XPathException
Call this function in "pull" mode, returning the results as a sequence of PullEvents.
actualArgs
- the arguments supplied to the function. These must have the correct
types required by the function signature (it is the caller's responsibility to check this).
It is acceptable to supply a Closure
to represent a value whose
evaluation will be delayed until it is needed. The array must be the correct size to match
the number of arguments: again, it is the caller's responsibility to check this.context
- This provides the run-time context for evaluating the function. It is the caller's
responsibility to allocate a "clean" context for the function to use; the context that is provided
will be overwritten by the function.
- an iterator over the results of the function call
process
public void process(ValueRepresentation[] actualArgs,
XPathContextMajor context)
throws XPathException
Call this function in "push" mode, writing the results to the current output destination.
actualArgs
- the arguments supplied to the function. These must have the correct
types required by the function signature (it is the caller's responsibility to check this).
It is acceptable to supply a Closure
to represent a value whose
evaluation will be delayed until it is needed. The array must be the correct size to match
the number of arguments: again, it is the caller's responsibility to check this.context
- This provides the run-time context for evaluating the function. It is the caller's
responsibility to allocate a "clean" context for the function to use; the context that is provided
will be overwritten by the function.
setFunctionName
public void setFunctionName(StructuredQName name)
Set the function name
setMemoFunction
public void setMemoFunction(boolean isMemo)
Mark this function as a memo function (or not)
isMemo
- true if this is a memo function
setParameterDefinitions
public void setParameterDefinitions(UserFunctionParameter[] params)
Set the definitions of the declared parameters for this function
params
- an array of parameter definitions
setResultType
public void setResultType(SequenceType resultType)
Set the declared result type of the function
resultType
- the declared return type
setTailRecursive
public void setTailRecursive(boolean tailCalls,
boolean recursiveTailCalls)
Indicate whether the function contains a tail call
tailCalls
- true if the function contains a tail call (on any function)recursiveTailCalls
- true if the function contains a tail call (on itself)