## net.sf.saxon.style
Class XSLFunction

    java.lang.Object
      net.sf.saxon.tree.NodeImpl
          net.sf.saxon.tree.ParentNodeImpl
              net.sf.saxon.tree.ElementImpl
                  net.sf.saxon.tree.ElementWithAttributes
                      net.sf.saxon.style.StyleElement
                          net.sf.saxon.style.XSLFunction

All Implemented Interfaces:
  Container, FingerprintedNode, InstructionInfo, Item, LocationProvider, org.xml.sax.Locator, NodeInfo, SaxonLocator, javax.xml.transform.Source, javax.xml.transform.SourceLocator, StylesheetProcedure, ValueRepresentation

public class XSLFunction
extends StyleElement
implements StylesheetProcedure

Handler for xsl:function elements in stylesheet (XSLT 2.0).
Attributes:
name gives the name of the function saxon:memo-function=yes|no indicates whether it acts as a memo function.

Field Summary

Fields inherited from class net.sf.saxon.style.StyleElement
`defaultCollationName, defaultXPathNamespace, extensionNamespaces, REPORT_ALWAYS, REPORT_IF_INSTANTIATED, REPORT_UNLESS_FORWARDS_COMPATIBLE, reportingCircumstances, staticContext, validationError, version`

Fields inherited from class net.sf.saxon.tree.ElementWithAttributes
`attributeList, namespaceList`

Fields inherited from class net.sf.saxon.tree.ElementImpl
`nameCode, root, sequence`

Fields inherited from class net.sf.saxon.tree.NodeImpl
`index, NODE_LETTER, parent`

Fields inherited from interface net.sf.saxon.om.NodeInfo
`ALL_NAMESPACES, EMPTY_NAMESPACE_LIST, LOCAL_NAMESPACES, NO_NAMESPACES`

Constructor Summary
`XSLFunction()`

Method Summary
`Expression` `compile(Executable exec)` Compile the function definition to create an executable representation
`void` `fixupReferences()` Notify all references to this function of the data type.
`UserFunction` `getCompiledFunction()` Get the compiled function
`int` `getConstructType()` Get the type of construct.
`int` `getFunctionFingerprint()` Get the fingerprint of the name of this function.
`int` `getNumberOfArguments()` Get the number of arguments declared by this function (that is, its arity).
`SequenceType` `getResultType()` Get the type of value returned by this function
`SlotManager` `getSlotManager()` Get associated Procedure (for details of stack frame).
`boolean` `isOverriding()` Is override="yes"?.
`protected boolean` `isPermittedChild(StyleElement child)` Specify that xsl:param is a permitted child
`boolean` `mayContainSequenceConstructor()` Determine whether this type of element is allowed to contain a template-body.
`void` `prepareAttributes()` Set the attribute list for the element.
`void` `registerReference(UserFunctionCall ref)` Method called by UserFunctionCall to register the function call for subsequent fixup.
`void` `setParameterDefinitions(UserFunction fn)` Set the definitions of the parameters in the compiled function, as an array.
`void` `validate()` Check that the stylesheet element is valid.

Methods inherited from class net.sf.saxon.style.StyleElement

`allocateLocationId, allocateSlots, backwardsCompatibleModeIsEnabled, bindVariable, checkEmpty, checkSortComesFirst, checkTopLevel, checkUnknownAttribute, checkWithinTemplate, compileError, compileError, compileError, compileSequenceConstructor, compileWarning, definesExcludedNamespace, definesExtensionElement, fallbackProcessing, forwardsCompatibleModeIsEnabled, getAttributeSets, getAttributeValue, getCommonChildItemType, getContainingSlotManager, getContainingStylesheet, getDefaultCollationName, getDefaultXPathNamespace, getExecutable, getInstructionFingerprint, getLastChildInstruction, getLineNumber, getLineNumber, getNamespaceResolver, getObjectFingerprint, getObjectNameCode, getPrecedence, getPreparedStylesheet, getPrincipalStylesheet, getProperties, getProperty, getReturnedItemType, getSchemaType, getStaticContext, getStylesheetFunction, getSystemId, getTargetNamePool, getTypeAnnotation, getVersion, getWithParamInstructions, isExcludedNamespace, isExtensionNamespace, isInstruction, issueWarning, issueWarning, isTopLevel, makeAttributeValueTemplate, makeExpression, makeNameCode, makeNamespaceContext, makePattern, makeSequenceType, makeSortKeys, makeTraceInstruction, markTailCalls, mayContainFallback, postValidate, processAllAttributes, processAttributes, processDefaultCollationAttribute, processDefaultXPathNamespaceAttribute, processExcludedNamespaces, processExtensionElementAttribute, processVersionAttribute, reportAbsence, setLineNumber, setObjectNameCode, setValidationError, substituteFor, typeCheck, typeCheck, undeclaredNamespaceError, validateChildren, validateSubtree`

Methods inherited from class net.sf.saxon.tree.ElementWithAttributes
`copy, getAttributeList, getAttributeValue, getDeclaredNamespaces, getInScopeNamespaceCodes, getPrefixForURI, getURICodeForPrefix, getURIForPrefix, initialise, iteratePrefixes, sendNamespaceDeclarations, setNamespaceDeclarations`

Methods inherited from class net.sf.saxon.tree.ElementImpl
`addChild, compact, enumerateChildren, generateId, getBaseURI, getDocumentRoot, getFirstChild, getLastChild, getNameCode, getNodeKind, getNthChild, getRoot, getSequenceNumber, getStringValue, getStringValueCS, getSystemId, hasChildNodes, setNameCode, setSystemId, useChildrenArray`

Methods inherited from class net.sf.saxon.tree.NodeImpl
`compareOrder, getColumnNumber, getConfiguration, getDisplayName, getDocumentNumber, getFingerprint, getLocalPart, getNamePool, getNextInDocument, getNextSibling, getParent, getPrefix, getPreviousInDocument, getPreviousSibling, getPublicId, getTypeAnnotation, getTypedValue, getURI, isSameNodeInfo, iterateAxis, iterateAxis`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface org.xml.sax.Locator
`getColumnNumber, getPublicId, getSystemId`

Methods inherited from interface javax.xml.transform.SourceLocator
`getColumnNumber, getPublicId, getSystemId`

Methods inherited from interface net.sf.saxon.trace.InstructionInfo
`getSystemId`

Constructor Detail

### XSLFunction

    public XSLFunction()

Method Detail

### registerReference

    public void registerReference(UserFunctionCall ref)

  Method called by UserFunctionCall to register the function call for subsequent fixup.

  Parameters:
    `ref` - the UserFunctionCall to be registered

### prepareAttributes

    public void prepareAttributes()
                           throws javax.xml.transform.TransformerConfigurationException

  Description copied from class: `StyleElement`
  Set the attribute list for the element. This is called to process the attributes (note the distinction from processAttributes in the superclass). Must be supplied in a subclass

  Specified by:
    `prepareAttributes` in class `StyleElement`
  Throws:
    `javax.xml.transform.TransformerConfigurationException`

### mayContainSequenceConstructor

    public boolean mayContainSequenceConstructor()

  Determine whether this type of element is allowed to contain a template-body.

  Overrides:
    `mayContainSequenceConstructor` in class `StyleElement`
  Returns:
    true: yes, it may contain a general template-body

### isPermittedChild

    protected boolean isPermittedChild(StyleElement child)

  Specify that xsl:param is a permitted child

  Overrides:
    `isPermittedChild` in class `StyleElement`

### isOverriding

    public boolean isOverriding()

  Is override="yes"?.

  Returns:
    true if override="yes" was specified, otherwise false

### fixupReferences

    public void fixupReferences()
                         throws javax.xml.transform.TransformerConfigurationException

  Notify all references to this function of the data type.

  Overrides:
    `fixupReferences` in class `StyleElement`
  Throws:
    `javax.xml.transform.TransformerConfigurationException`

### validate

    public void validate()
                  throws javax.xml.transform.TransformerConfigurationException

  Description copied from class: `StyleElement`
  Check that the stylesheet element is valid. This is called once for each element, after the entire tree has been built. As well as validation, it can perform first-time initialisation. The default implementation does nothing; it is normally overriden in subclasses.

  Overrides:
    `validate` in class `StyleElement`
  Throws:
    `javax.xml.transform.TransformerConfigurationException`

### compile

    public Expression compile(Executable exec)
                       throws javax.xml.transform.TransformerConfigurationException

  Compile the function definition to create an executable representation

  Specified by:
    `compile` in class `StyleElement`
  Returns:
    an Instruction, or null. The instruction returned is actually rather irrelevant; the compile() method has the side-effect of binding all references to the function to the executable representation (a UserFunction object)
  Throws:
    `javax.xml.transform.TransformerConfigurationException`

### getSlotManager

    public SlotManager getSlotManager()

  Get associated Procedure (for details of stack frame).

  Specified by:
    `getSlotManager` in interface `StylesheetProcedure`
  Returns:
    the associated Procedure object

### getFunctionFingerprint

    public int getFunctionFingerprint()

  Get the fingerprint of the name of this function.

  Returns:
    the fingerprint of the name

### getResultType

    public SequenceType getResultType()

  Get the type of value returned by this function

  Returns:
    the declared result type, or the inferred result type if this is more precise

### getNumberOfArguments

    public int getNumberOfArguments()

  Get the number of arguments declared by this function (that is, its arity).

  Returns:
    the arity of the function

### setParameterDefinitions

    public void setParameterDefinitions(UserFunction fn)

  Set the definitions of the parameters in the compiled function, as an array.

### getCompiledFunction

    public UserFunction getCompiledFunction()

  Get the compiled function

### getConstructType

    public int getConstructType()

  Get the type of construct. This will be a constant in class `Location`. This method is part of the `InstructionInfo` interface

  Specified by:
    `getConstructType` in interface `InstructionInfo`
  Overrides:
    `getConstructType` in class `StyleElement`