Class Assignation

All Implemented Interfaces:
Serializable, SourceLocator, Binding, Container, Expression, InstructionInfoProvider
Direct Known Subclasses:
ForExpression, LetExpression, QuantifiedExpression

public abstract class Assignation extends ComputedExpression implements Binding
Assignation is an abstract superclass for the kinds of expression that declare range variables: for, some, and every.
See Also:
  • Field Details

    • slotNumber

      protected int slotNumber
    • sequence

      protected Expression sequence
    • action

      protected Expression action
    • variableName

      protected String variableName
    • nameCode

      protected int nameCode
    • declaration

      protected transient RangeVariableDeclaration declaration
  • Constructor Details

    • Assignation

      public Assignation()
  • Method Details

    • setVariableDeclaration

      public void setVariableDeclaration(RangeVariableDeclaration decl)
      Set the reference to the variable declaration
    • getVariableDeclaration

      public RangeVariableDeclaration getVariableDeclaration()
      Get the variable declaration
    • setAction

      public void setAction(Expression action)
      Add the "return" or "satisfies" expression, and fix up all references to the range variable that occur within that expression
      Parameters:
      action - the expression that occurs after the "return" keyword of a "for" expression, the "satisfies" keyword of "some/every", or the ":=" operator of a "let" expression.

      This method must be called after calling setVariableDeclaration()

    • isGlobal

      public final boolean isGlobal()
      Indicate whether the binding is local or global. A global binding is one that has a fixed value for the life of a query or transformation; any other binding is local.
      Specified by:
      isGlobal in interface Binding
    • isAssignable

      public final boolean isAssignable()
      Test whether it is permitted to assign to the variable using the saxon:assign extension element. This will only be for an XSLT global variable where the extra attribute saxon:assignable="yes" is present.
      Specified by:
      isAssignable in interface Binding
    • getLocalSlotNumber

      public int getLocalSlotNumber()
      If this is a local variable held on the local stack frame, return the corresponding slot number. In other cases, return -1.
      Specified by:
      getLocalSlotNumber in interface Binding
    • getAction

      public Expression getAction()
      Get the action expression
    • setSequence

      public void setSequence(Expression sequence)
      Set the "sequence" expression - the one to which the variable is bound
    • getSequence

      public Expression getSequence()
      Get the "sequence" expression - the one to which the variable is bound
    • setSlotNumber

      public void setSlotNumber(int nr)
      Set the slot number for the range variable
    • getRequiredSlots

      public int getRequiredSlots()
      Get the number of slots required. Normally 1, except for a FOR expression with an AT clause, where it is 2.
    • simplify

      public Expression simplify(StaticContext env) throws XPathException
      Simplify the expression
      Specified by:
      simplify in interface Expression
      Overrides:
      simplify in class ComputedExpression
      Parameters:
      env - the static context
      Returns:
      the simplified expression
      Throws:
      XPathException - if an error is discovered during expression rewriting
    • promote

      public Expression promote(PromotionOffer offer) throws XPathException
      Promote this expression if possible
      Specified by:
      promote in interface Expression
      Overrides:
      promote in class ComputedExpression
      Parameters:
      offer - details of the offer, for example the offer to move expressions that don't depend on the context to an outer level in the containing expression
      Returns:
      if the offer is not accepted, return this expression unchanged. Otherwise return the result of rewriting the expression to promote this subexpression
      Throws:
      XPathException - if any error is detected
    • suppressValidation

      public void suppressValidation(int validationMode)
      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 ComputedExpression
    • extendBindingList

      protected Binding[] extendBindingList(Binding[] in)
      Extend an array of variable bindings to include the binding(s) defined in this expression
    • promoteWhereClause

      protected Expression promoteWhereClause(Binding positionBinding)
      Promote a WHERE clause whose condition doesn't depend on the variable being bound. This rewrites an expression of the form

      let $i := SEQ return if (C) then R else ()

      to the form:

      if (C) then (let $i := SEQ return R) else ()

    • iterateSubExpressions

      public Iterator iterateSubExpressions()
      Get the immediate subexpressions of this expression
      Specified by:
      iterateSubExpressions in interface Expression
      Overrides:
      iterateSubExpressions in class ComputedExpression
      Returns:
      an iterator containing the sub-expressions of this expression
    • replaceSubExpression

      public boolean replaceSubExpression(Expression original, Expression replacement)
      Replace one subexpression by a replacement subexpression
      Specified by:
      replaceSubExpression in interface Container
      Overrides:
      replaceSubExpression in class ComputedExpression
      Parameters:
      original - the original subexpression
      replacement - the replacement subexpression
      Returns:
      true if the original subexpression is found
    • getVariableNameCode

      public int getVariableNameCode()
    • getVariableFingerprint

      public int getVariableFingerprint()
    • getVariableName

      public String getVariableName(NamePool pool)
      Get the display name of the range variable, for diagnostics only
    • evaluateVariable

      public ValueRepresentation evaluateVariable(XPathContext context) throws XPathException
      Get the value of the range variable
      Specified by:
      evaluateVariable in interface Binding
      Throws:
      XPathException