Package net.sf.saxon.expr.instruct

## Class ElementCreator

- java.lang.Object
- - net.sf.saxon.expr.Expression
  - - net.sf.saxon.expr.instruct.Instruction
    - - net.sf.saxon.expr.instruct.ParentNodeConstructor
      - - net.sf.saxon.expr.instruct.ElementCreator

- All Implemented Interfaces:
    `ExportAgent`, `InstructionWithComplexContent`, `TailCallReturner`, `ValidatingInstruction`, `Locatable`, `IdentityComparable`, `Traceable`
  Direct Known Subclasses:
    `ComputedElement`, `Copy`, `FixedElement`

      public abstract class ElementCreator
      extends ParentNodeConstructor

  An instruction that creates an element node. There are two subtypes, FixedElement for use where the name is known statically, and Element where it is computed dynamically. To allow use in both XSLT and XQuery, the class acts both as an Instruction and as an Expression.

- - ### Field Summary

    - ### Fields inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor

      `contentOp, preservingTypes`

    - ### Fields inherited from class net.sf.saxon.expr.Expression

      `EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, MAX_COST, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, UPDATE_METHOD, WATCH_METHOD`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ElementCreator()` | Construct an ElementCreator.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `checkContentSequence​(StaticContext env)` | Check statically whether the content of the element creates attributes or namespaces after creating any child nodes
    `int` | `computeSpecialProperties()` | Get the static properties of this expression (other than its type).
    `int` | `getCardinality()` | Determine the static cardinality of the expression.
    `abstract NodeName` | `getElementName​(XPathContext context, NodeInfo copiedNode)` | Determine (at run-time) the name code of the element being constructed
    `int` | `getImplementationMethod()` | An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().
    `ItemType` | `getItemType()` | Get the item type of the value returned by this instruction
    `abstract java.lang.String` | `getNewBaseURI​(XPathContext context, NodeInfo copiedNode)` | Get the base URI for the element being constructed
    `java.lang.String` | `getStreamerName()` | Get the (partial) name of a class that supports streaming of this kind of expression
    `boolean` | `isBequeathNamespacesToChildren()` | Ask whether the inherit namespaces flag is set
    `boolean` | `isInheritNamespacesFromParent()` | Ask whether this element inherits namespaces from its parent.
    `abstract void` | `outputNamespaceNodes​(Outputter receiver, NodeName nodeName, NodeInfo copiedNode)` | Callback to output namespace bindings for the new element.
    `TailCall` | `processLeavingTail​(Outputter output, XPathContext context)` | Evaluate the instruction to produce a new element node.
    `TailCall` | `processLeavingTail​(Outputter out, XPathContext context, NodeInfo copiedNode)` | Evaluate the instruction to produce a new element node.
    `void` | `setBequeathNamespacesToChildren​(boolean inherit)` | Say whether this element causes its children to inherit namespaces
    `void` | `setInheritanceFlags​(java.lang.String flags)` |
    `void` | `setInheritNamespacesFromParent​(boolean inherit)` | Say whether this element causes inherits namespaces from its parent.
    `void` | `suppressValidation​(int parentValidationMode)` | Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation.

    - ### Methods inherited from class net.sf.saxon.expr.instruct.ParentNodeConstructor

      `addToPathMap, allowExtractingCommonSubexpressions, alwaysCreatesNewNodes, computeCardinality, getContentExpression, getContentOperand, getSchemaType, getValidationAction, getValidationOptions, isLocal, isPreservingTypes, mayCreateNewNodes, optimize, setContentExpression, setNoNeedToStrip, setValidationAction, typeCheck`

    - ### Methods inherited from class net.sf.saxon.expr.instruct.Instruction

      `assembleParams, assembleTunnelParams, dynamicError, evaluateAsString, evaluateItem, getExpressionName, getInstructionNameCode, getNetCost, getSourceLocator, isInstruction, isXSLT, iterate, operands, process, someOperandCreatesNewNodes`

    - ### Methods inherited from class net.sf.saxon.expr.Expression

      `adoptChildExpression, checkedOperands, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeHashCode, computeStaticProperties, copy, dynamicError, effectiveBooleanValue, equals, evaluatePendingUpdates, explain, export, getConfiguration, getCost, getDependencies, getEvaluationMethod, getExtraProperty, getIntegerBounds, getInterpretedExpression, getIntrinsicDependencies, getLocalRetainedStaticContext, getLocation, getObjectName, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getStaticUType, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, hasVariableBinding, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isLiftable, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, markTailFunctionCalls, operandList, operandSparseList, optimizeChildren, prepareForStreaming, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setFlattened, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplify, simplifyChildren, staticTypeCheck, toPattern, toShortString, toString, typeCheckChildren, typeError, unordered, verifyParentPointers`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface net.sf.saxon.trace.Traceable

      `gatherProperties`

- - ### Constructor Detail

    - #### ElementCreator

          public ElementCreator()

      Construct an ElementCreator. Exists for the benefit of subclasses.

  - ### Method Detail

    - #### getItemType

          public ItemType getItemType()

      Get the item type of the value returned by this instruction
      Overrides:
        `getItemType` in class `Instruction`
      Returns:
        the item type

    - #### getCardinality

          public int getCardinality()

      Description copied from class: `Expression`
      Determine the static cardinality of the expression. This establishes how many items there will be in the result of the expression, at compile time (i.e., without actually evaluating the result.
      Overrides:
        `getCardinality` in class `ParentNodeConstructor`
      Returns:
        one of the values Cardinality.ONE_OR_MORE, Cardinality.ZERO_OR_MORE, Cardinality.EXACTLY_ONE, Cardinality.ZERO_OR_ONE, Cardinality.EMPTY. This default implementation returns ZERO_OR_MORE (which effectively gives no information).

    - #### setBequeathNamespacesToChildren

          public void setBequeathNamespacesToChildren​(boolean inherit)

      Say whether this element causes its children to inherit namespaces
      Parameters:
        `inherit` - true if namespaces are to be inherited by the children

    - #### isBequeathNamespacesToChildren

          public boolean isBequeathNamespacesToChildren()

      Ask whether the inherit namespaces flag is set
      Returns:
        true if namespaces constructed on this parent element are to be inherited by its children

    - #### setInheritNamespacesFromParent

          public void setInheritNamespacesFromParent​(boolean inherit)

      Say whether this element causes inherits namespaces from its parent. True except in XQuery where one direct element constructor forms the immediate content of another (see W3C bug 22334)
      Parameters:
        `inherit` - true if namespaces are to be inherited from the parent

    - #### isInheritNamespacesFromParent

          public boolean isInheritNamespacesFromParent()

      Ask whether this element inherits namespaces from its parent. True except in XQuery where one direct element constructor forms the immediate content of another (see W3C bug 22334)
      Returns:
        true if this child element inherits namespaces from its parent element

    - #### computeSpecialProperties

          public int computeSpecialProperties()

      Get the static properties of this expression (other than its type). The result is bit-signficant. These properties are used for optimizations. In general, if property bit is set, it is true, but if it is unset, the value is unknown.
      Overrides:
        `computeSpecialProperties` in class `Instruction`
      Returns:
        a set of flags indicating static properties of this expression

    - #### suppressValidation

          public void suppressValidation​(int parentValidationMode)

      Suppress validation on contained element constructors, on the grounds that the parent element is already performing validation. The default implementation does nothing.
      Overrides:
        `suppressValidation` in class `Expression`
      Parameters:
        `parentValidationMode` - the kind of validation being performed on the parent expression

    - #### checkContentSequence

          protected void checkContentSequence​(StaticContext env)
                                       throws XPathException

      Check statically whether the content of the element creates attributes or namespaces after creating any child nodes
      Specified by:
        `checkContentSequence` in class `ParentNodeConstructor`
      Parameters:
        `env` - the static context
      Throws:
        `XPathException` - if the content is found to be incorrect

    - #### getElementName

          public abstract NodeName getElementName​(XPathContext context,
                                                  NodeInfo copiedNode)
                                           throws XPathException

      Determine (at run-time) the name code of the element being constructed
      Parameters:
        `context` - the XPath dynamic evaluation context
        `copiedNode` - for the benefit of xsl:copy, the node being copied; otherwise null
      Returns:
        the integer name code representing the element name
      Throws:
        `XPathException` - if a failure occurs

    - #### getNewBaseURI

          public abstract java.lang.String getNewBaseURI​(XPathContext context,
                                                         NodeInfo copiedNode)

      Get the base URI for the element being constructed
      Parameters:
        `context` - the XPath dynamic evaluation context
        `copiedNode` - the node being copied (for xsl:copy), otherwise null
      Returns:
        the base URI of the constructed element

    - #### outputNamespaceNodes

          public abstract void outputNamespaceNodes​(Outputter receiver,
                                                    NodeName nodeName,
                                                    NodeInfo copiedNode)
                                             throws XPathException

      Callback to output namespace bindings for the new element. This method is responsible for ensuring that a namespace binding is always generated for the namespace of the element name itself.
      Parameters:
        `receiver` - the Outputter where the namespace bindings are to be written
        `nodeName` - the name of the element being created
        `copiedNode` - the node being copied (for xsl:copy) or null otherwise
      Throws:
        `XPathException` - if a dynamic error occurs

    - #### getImplementationMethod

          public int getImplementationMethod()

      An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process(). This method indicates which of these methods is prefered. For instructions this is the process() method.
      Overrides:
        `getImplementationMethod` in class `Instruction`
      Returns:
        the implementation method, for example `Expression.ITERATE_METHOD` or `Expression.EVALUATE_METHOD` or `Expression.PROCESS_METHOD`

    - #### processLeavingTail

          public TailCall processLeavingTail​(Outputter output,
                                             XPathContext context)
                                      throws XPathException

      Evaluate the instruction to produce a new element node. This method is typically used when there is a parent element or document in a result tree, to which the new element is added.
      Specified by:
        `processLeavingTail` in interface `TailCallReturner`
      Specified by:
        `processLeavingTail` in class `Instruction`
      Parameters:
        `output` - the destination for the result
        `context` - XPath dynamic evaluation context
      Returns:
        null (this instruction never returns a tail call)
      Throws:
        `XPathException` - if a dynamic error occurs

    - #### processLeavingTail

          public final TailCall processLeavingTail​(Outputter out,
                                                   XPathContext context,
                                                   NodeInfo copiedNode)
                                            throws XPathException

      Evaluate the instruction to produce a new element node. This method is typically used when there is a parent element or document in a result tree, to which the new element is added.
      Parameters:
        `out` - The destination for the result
        `context` - XPath dynamic evaluation context
        `copiedNode` - null except in the case of xsl:copy, when it is the node being copied; otherwise null
      Returns:
        null (this instruction never returns a tail call)
      Throws:
        `XPathException` - if a dynamic error occurs

    - #### setInheritanceFlags

          public void setInheritanceFlags​(java.lang.String flags)

    - #### getStreamerName

          public java.lang.String getStreamerName()

      Get the (partial) name of a class that supports streaming of this kind of expression
      Overrides:
        `getStreamerName` in class `Expression`
      Returns:
        the partial name of a class that can be instantiated to provide streaming support in Saxon-EE, or null if there is no such class