Class GeneralVariable

java.lang.Object
net.sf.saxon.expr.instruct.GeneralVariable
All Implemented Interfaces:
SourceLocator, Binding
Direct Known Subclasses:
GlobalVariable, LocalParam, LocalVariable, WithParam

public abstract class GeneralVariable extends Object implements Binding, SourceLocator
This class defines common behaviour across xsl:variable, xsl:param, and xsl:with-param; also saxon:assign
  • Field Details

    • select

      Expression select
    • variableQName

      protected StructuredQName variableQName
    • requiredType

      SequenceType requiredType
    • slotNumber

      protected int slotNumber
    • referenceCount

      protected int referenceCount
    • evaluationMode

      protected int evaluationMode
  • Constructor Details

    • GeneralVariable

      public GeneralVariable()
      Create a general variable
  • Method Details

    • init

      public void init(Expression select, StructuredQName qName)
      Initialize the properties of the variable
      Parameters:
      select - the expression to which the variable is bound
      qName - the name of the variable
    • setContainer

      public void setContainer(Container container)
      Mark a variable as being in a given Container. This link is used primarily for diagnostics: the container links to the location map held in the executable.

      This affects the expression and all its subexpressions. Any subexpressions that are not in the same container are marked with the new container, and this proceeds recursively. However, any subexpression that is already in the correct container is not modified.

      Parameters:
      container - The container of this expression.
    • getContainer

      public Container getContainer()
      Get the container in which this expression is located. This will usually be a top-level construct such as a function or global variable, and XSLT template, or an XQueryExpression. In the case of free-standing XPath expressions it will be the StaticContext object
      Returns:
      the expression's container
    • setLocationId

      public void setLocationId(int id)
      Set the location ID on an expression.
      Parameters:
      id - the location id
    • getLocationId

      public final int getLocationId()
      Get the location ID of the expression
      Returns:
      a location identifier, which can be turned into real location information by reference to a location provider
    • getLineNumber

      public int getLineNumber()
      Get the line number of the expression
      Specified by:
      getLineNumber in interface SourceLocator
    • getColumnNumber

      public int getColumnNumber()
      Get the column number of the expression
      Specified by:
      getColumnNumber in interface SourceLocator
    • getSystemId

      public String getSystemId()
      Get the systemId of the module containing the expression
      Specified by:
      getSystemId in interface SourceLocator
    • getPublicId

      public final String getPublicId()
      Get the publicId of the module containing the expression (to satisfy the SourceLocator interface)
      Specified by:
      getPublicId in interface SourceLocator
    • getExecutable

      public Executable getExecutable()
      Get the executable containing this expression
      Returns:
      the containing Executable
    • getLocationProvider

      public LocationProvider getLocationProvider()
      Get the LocationProvider allowing location identifiers to be resolved.
      Returns:
      the LocationProvider used to turn the location id into real location information
    • getSystemId

      public String getSystemId(long locationId)
    • setSelectExpression

      public void setSelectExpression(Expression select)
      Set the expression to which this variable is bound
      Parameters:
      select - the initializing expression
    • getSelectExpression

      public Expression getSelectExpression()
      Get the expression to which this variable is bound
      Returns:
      the initializing expression
    • setRequiredType

      public void setRequiredType(SequenceType required)
      Set the required type of this variable
      Parameters:
      required - the required type
    • getRequiredType

      public SequenceType getRequiredType()
      Get the required type of this variable
      Specified by:
      getRequiredType in interface Binding
      Returns:
      the required type
    • getIntegerBoundsForVariable

      public IntegerValue[] getIntegerBoundsForVariable()
      If the variable is bound to an integer, get the minimum and maximum possible values. Return null if unknown or not applicable
      Specified by:
      getIntegerBoundsForVariable in interface Binding
      Returns:
      a pair of integers containing the minimum and maximum values for the integer value; or null if the value is not an integer or the range is unknown
    • setAssignable

      public void setAssignable(boolean assignable)
      Indicate whether this variable is assignable using saxon:assign
      Parameters:
      assignable - true if this variable is assignable
    • setRequiredParam

      public void setRequiredParam(boolean requiredParam)
      Indicate that this variable represents a required parameter
      Parameters:
      requiredParam - true if this is a required parameter
    • setImplicitlyRequiredParam

      public void setImplicitlyRequiredParam(boolean requiredParam)
      Indicate that this variable represents a parameter that is implicitly required (because there is no usable default value)
      Parameters:
      requiredParam - true if this is an implicitly required parameter
    • setTunnel

      public void setTunnel(boolean tunnel)
      Indicate whether this variable represents a tunnel parameter
      Parameters:
      tunnel - true if this is a tunnel parameter
    • setReferenceCount

      public void setReferenceCount(int refCount)
      Set the nominal number of references to this variable
      Parameters:
      refCount - the nominal number of references
    • getEvaluationMode

      public int getEvaluationMode()
      Get the evaluation mode of the variable
      Returns:
      the evaluation mode (a constant in ExpressionTool
    • 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 true if the extra attribute saxon:assignable="yes" is present.
      Specified by:
      isAssignable in interface Binding
      Returns:
      true if the binding is assignable
    • getCardinality

      public int getCardinality()
      Get the cardinality of the result of this instruction. An xsl:variable instruction returns nothing, so the type is empty.
      Returns:
      the empty cardinality.
    • isGlobal

      public boolean isGlobal()
      Description copied from interface: Binding
      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
      Returns:
      true if the binding is global
    • 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
      Returns:
      the slot number on the local stack frame
    • isRequiredParam

      public final boolean isRequiredParam()
      Ask whether this variable represents a required parameter
      Returns:
      true if this is a required parameter
    • isImplicitlyRequiredParam

      public final boolean isImplicitlyRequiredParam()
      Ask whether this variable represents a parameter that is implicitly required, because there is no usable default value
      Returns:
      true if this variable is an implicitly required parameter
    • isTunnelParam

      public final boolean isTunnelParam()
      Ask whether this variable represents a tunnel parameter
      Returns:
      true if this is a tunnel parameter
    • getInstructionNameCode

      public int getInstructionNameCode()
      Get the name of this instruction (that is xsl:variable, xsl:param etc) for diagnostics
      Returns:
      the name of this instruction, as a name pool name code
    • simplify

      public void simplify(ExpressionVisitor visitor) throws XPathException
      Simplify this variable
      Parameters:
      visitor - an expression
      Throws:
      XPathException - if a failure occurs
    • typeCheck

      public void typeCheck(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) throws XPathException
      Throws:
      XPathException
    • optimize

      public void optimize(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) throws XPathException
      Throws:
      XPathException
    • computeEvaluationMode

      public void computeEvaluationMode()
    • copy

      public Expression copy()
      Copy an expression. This makes a deep copy.
      Returns:
      the copy of the original expression
    • addReference

      public void addReference(boolean isLoopingReference)
      Description copied from interface: Binding
      Register a variable reference that refers to the variable bound in this expression
      Specified by:
      addReference in interface Binding
      Parameters:
      isLoopingReference - - true if the reference occurs within a loop, such as the predicate of a filter expression
    • checkAgainstRequiredType

      public void checkAgainstRequiredType(ExpressionVisitor visitor) throws XPathException
      Check the select expression against the required type.
      Parameters:
      visitor - an expression visitor
      Throws:
      XPathException - if the check fails
    • getSelectValue

      public ValueRepresentation getSelectValue(XPathContext context) throws XPathException
      Evaluate the variable. That is, get the value of the select expression if present or the content of the element otherwise, either as a tree or as a sequence
      Parameters:
      context - the XPath dynamic context
      Returns:
      the result of evaluating the variable
      Throws:
      XPathException - if evaluation of the select expression fails with a dynamic error
    • iterateSubExpressions

      public Iterator<Expression> iterateSubExpressions()
      Get all the XPath expressions associated with this instruction (in XSLT terms, the expression present on attributes of the instruction, as distinct from the child instructions in a sequence construction)
      Returns:
      an iterator over all the contained expressions (in practice, the select expression)
    • replaceSubExpression

      public boolean replaceSubExpression(Expression original, Expression replacement)
      Replace one subexpression by a replacement subexpression
      Parameters:
      original - the original subexpression
      replacement - the replacement subexpression
      Returns:
      true if the original subexpression is found
    • explain

      public void explain(ExpressionPresenter out)
      Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.
      Parameters:
      out - the object used to present the output
    • getSlotNumber

      public int getSlotNumber()
      Get the slot number allocated to this variable
      Returns:
      the slot number, that is the position allocated to the variable on its stack frame
    • setSlotNumber

      public void setSlotNumber(int s)
      Set the slot number of this variable
      Parameters:
      s - the slot number, that is, the position allocated to this variable on its stack frame
    • setVariableQName

      public void setVariableQName(StructuredQName s)
      Set the name of the variable
      Parameters:
      s - the name of the variable (a QName)
    • getVariableQName

      public StructuredQName getVariableQName()
      Get the name of this variable
      Specified by:
      getVariableQName in interface Binding
      Returns:
      the name of this variable (a QName)