net.sf.saxon.expr
Class RangeVariableDeclaration

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

public class RangeVariableDeclaration
extends 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.


Field Summary
static int FILTERED
           
 
Constructor Summary
RangeVariableDeclaration()
           
 
Method Summary
 boolean allReferencesAreAtomized()
          Determine whether all references to this variable are using the value either (a) by atomizing it, or (b) by taking its string value.
 void fixupReferences(Binding binding)
           
 int getNameCode()
          Get the name of the variable, as a namepool name code
 int getReferenceCount(Binding binding, StaticContext env)
          Determine how often the range variable is referenced.
static int getReferenceCount(List references, Binding binding, StaticContext env, boolean removeUnbound)
          Determine how often a variable is referenced.
 List getReferenceList()
           
 SequenceType getRequiredType()
          Get the required type (declared type) of the variable
 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, StaticContext env)
           
 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(List references)
           
 void setRequiredType(SequenceType requiredType)
          Set the required type (declared type) of the variable
 void setVariableName(String variableName)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FILTERED

public static final int FILTERED
See Also:
Constant Field Values
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(String variableName)

getVariableName

public 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(List references)

getReferenceList

public List getReferenceList()

allReferencesAreAtomized

public boolean allReferencesAreAtomized()
Determine whether all references to this variable are using the value either (a) by atomizing it, or (b) by taking its string value. (This excludes usages such as testing the existence of a node or taking the effective boolean value).

Returns:
true if all references are known to atomize (or stringify) the value, false otherwise. The value false may indicate "not known".

getReferenceCount

public int getReferenceCount(Binding binding,
                             StaticContext env)
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
env -
Returns:
the number of references. The only interesting values are 0, 1, and "many" (represented by any value >1).

getReferenceCount

public static int getReferenceCount(List references,
                                    Binding binding,
                                    StaticContext env,
                                    boolean removeUnbound)
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
removeUnbound -
Returns:
the number of references. The interesting values are 0, 1, "many" (represented by any value >1), and the special value FILTERED, which indicates that there are multiple references and one or more of them is of the form $x[....] indicating that an index might be useful.

fixupReferences

public void fixupReferences(Binding binding)

refineTypeInformation

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


Copyright (C) Michael H. Kay. All rights reserved.