net.sf.saxon.expr.flwor

## Class LocalVariableBinding

- java.lang.Object
- - net.sf.saxon.expr.flwor.LocalVariableBinding

- All Implemented Interfaces:
    Binding

      public class LocalVariableBinding
      extends Object
      implements Binding

  Represents the defining occurrence of a variable declared within a FLWOR expression, for example the $p in "for $x at $p in ...". Also used for the variables bound by the bind-group and bind-grouping-key attributes in xsl:for-each-group

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `LocalVariableBinding(StructuredQName name, SequenceType type)` Create a LocalVariableBinding

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addReference(boolean isLoopingReference)` Register a variable reference that refers to the variable bound in this expression
    `LocalVariableBinding` | `copy()` Make a copy of this LocalVariableBinding (except for the slot number)
    `Sequence` | `evaluateVariable(XPathContext context)` Get the value of the range variable
    `IntegerValue[]` | `getIntegerBoundsForVariable()` If the variable is bound to an integer, get the minimum and maximum possible values.
    `int` | `getLocalSlotNumber()` If this is a local variable held on the local stack frame, return the corresponding slot number.
    `int` | `getNominalReferenceCount()` Get the (nominal) count of the number of references to this variable
    `SequenceType` | `getRequiredType()` Get the required type (declared type) of the variable
    `StructuredQName` | `getVariableQName()` Get the name of the variable
    `boolean` | `isAssignable()` Test whether it is permitted to assign to the variable using the saxon:assign extension element.
    `boolean` | `isGlobal()` Indicate whether the binding is local or global.
    `void` | `setIndexedVariable()` Indicate that the variable bound by this let expression should be indexable (because it is used in an appropriate filter expression)
    `void` | `setRequiredType(SequenceType type)` Set the required or inferred type of the variable
    `void` | `setSlotNumber(int nr)` Set the slot number for the range variable
    `void` | `setVariableQName(StructuredQName variableName)` Set the name of the variable

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### LocalVariableBinding

          public LocalVariableBinding(StructuredQName name,
                              SequenceType type)

      Create a LocalVariableBinding
      Parameters:
        `name` - the name of the variable
        `type` - the static type of the variable

  - ### Method Detail

    - #### copy

          public LocalVariableBinding copy()

      Make a copy of this LocalVariableBinding (except for the slot number)
      Returns:
        a copy of the binding

    - #### getVariableQName

          public StructuredQName getVariableQName()

      Get the name of the variable
      Specified by:
        `getVariableQName` in interface `Binding`
      Returns:
        the name of the variable

    - #### setRequiredType

          public void setRequiredType(SequenceType type)

      Set the required or inferred type of the variable
      Parameters:
        `type` - the required or inferred type

    - #### getRequiredType

          public SequenceType getRequiredType()

      Get the required type (declared type) of the 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

    - #### getNominalReferenceCount

          public int getNominalReferenceCount()

      Get the (nominal) count of the number of references to this variable
      Returns:
        zero if there are no references, one if there is a single reference that is not in a loop, some higher number if there are multiple references (or a single reference in a loop), or the special value @link RangeVariable#FILTERED} if there are any references in filter expressions that require searching.

    - #### addReference

          public void addReference(boolean isLoopingReference)

      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

    - #### setIndexedVariable

          public void setIndexedVariable()

      Indicate that the variable bound by this let expression should be indexable (because it is used in an appropriate filter expression)

    - #### setVariableQName

          public void setVariableQName(StructuredQName variableName)

      Set the name of the variable
      Parameters:
        `variableName` - the name of the variable

    - #### setSlotNumber

          public void setSlotNumber(int nr)

      Set the slot number for the range variable
      Parameters:
        `nr` - the slot number to be used

    - #### 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

    - #### evaluateVariable

          public Sequence evaluateVariable(XPathContext context)
                                    throws XPathException

      Get the value of the range variable
      Specified by:
        `evaluateVariable` in interface `Binding`
      Parameters:
        `context` - the XPath dynamic evaluation context
      Returns:
        the result of evaluating the variable
      Throws:
        `XPathException` - if an error occurs while evaluating the variable

    - #### isAssignable

          public 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`
      Returns:
        true if the binding is assignable

    - #### isGlobal

          public 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`
      Returns:
        true if the binding is global

Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.