net.sf.saxon.expr
Class RangeVariableDeclaration

java.lang.Object
  extended bynet.sf.saxon.expr.RangeVariableDeclaration
All Implemented Interfaces:
VariableDeclaration

public class RangeVariableDeclaration
extends java.lang.Object
implements VariableDeclaration

Represents the defining occurrence of a variable declared for local use within an expression, for example the $x in "for $x in ...". This object is used only at compile-time. In XQuery (but not in XSLT) this class is also used to represent the formal arguments of a function.


Constructor Summary
RangeVariableDeclaration()
           
 
Method Summary
 void fixupReferences(Binding binding)
           
 int getNameCode()
          Get the name of the variable, as a namepool name code
 int getReferenceCount(Binding binding)
          Determine how often the range variable is referenced.
static int getReferenceCount(java.util.List references, Binding binding)
          Determine how often a variable is referenced.
 java.util.List getReferenceList()
           
 SequenceType getRequiredType()
          Get the required type (declared type) of the variable
 java.lang.String getVariableName()
          Get the name of the variable for use in diagnostics - a lexical QName
 void refineTypeInformation(ItemType type, int cardinality, Value constantValue, int properties)
           
 void registerReference(BindingReference ref)
          Method called by a BindingReference to register the variable reference for subsequent fixup.
 void setNameCode(int nameCode)
          Set the name of the variable, as a namepool name code
 void setReferenceList(java.util.List references)
           
 void setRequiredType(SequenceType requiredType)
          Set the required type (declared type) of the variable
 void setVariableName(java.lang.String variableName)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RangeVariableDeclaration

public RangeVariableDeclaration()
Method Detail

setNameCode

public void setNameCode(int nameCode)
Set the name of the variable, as a namepool name code

Parameters:
nameCode -

getNameCode

public int getNameCode()
Get the name of the variable, as a namepool name code

Specified by:
getNameCode in interface VariableDeclaration
Returns:
the nameCode

getRequiredType

public SequenceType getRequiredType()
Get the required type (declared type) of the variable

Returns:
the required type

setRequiredType

public void setRequiredType(SequenceType requiredType)
Set the required type (declared type) of the variable

Parameters:
requiredType - the required type

setVariableName

public void setVariableName(java.lang.String variableName)

getVariableName

public java.lang.String getVariableName()
Description copied from interface: VariableDeclaration
Get the name of the variable for use in diagnostics - a lexical QName

Specified by:
getVariableName in interface VariableDeclaration

registerReference

public void registerReference(BindingReference ref)
Description copied from interface: VariableDeclaration
Method called by a BindingReference to register the variable reference for subsequent fixup. This method is called by the XPath parser when each reference to the variable is encountered. At some time after parsing and before execution of the expression, the VariableDeclaration is responsible for calling the two methods setStaticType() and fixup() on each BindingReference that has been registered with it.

Specified by:
registerReference in interface VariableDeclaration

setReferenceList

public void setReferenceList(java.util.List references)

getReferenceList

public java.util.List getReferenceList()

getReferenceCount

public int getReferenceCount(Binding binding)
Determine how often the range variable is referenced. This is the number of times it is referenced at run-time: so a reference in a loop counts as "many".

Parameters:
binding - the variable binding
Returns:
the number of references. The only interesting values are 0, 1, and "many" (represented by any value >1).

getReferenceCount

public static int getReferenceCount(java.util.List references,
                                    Binding binding)
Determine how often a variable is referenced. This is the number of times it is referenced at run-time: so a reference in a loop counts as "many". This code currently handles local variables (Let expressions) and function parameters. It is not currently used for XSLT template parameters. It's not the end of the world if the answer is wrong (unless it's wrongly given as zero), but if wrongly returned as 1 then the variable will be repeatedly evaluated.

Parameters:
references - a list of references to a variable binding: each item in this list must be a VariableReference object
binding - the variable binding
Returns:
the number of references. The only interesting values are 0, 1, and "many" (represented by any value >1).

fixupReferences

public void fixupReferences(Binding binding)

refineTypeInformation

public void refineTypeInformation(ItemType type,
                                  int cardinality,
                                  Value constantValue,
                                  int properties)