Assignation is an abstract superclass for the kinds of expression
that declare range variables: for, some, and every.
addToPathMap
public PathMap.PathMapNodeSet addToPathMap(PathMap pathMap,
PathMap.PathMapNodeSet pathMapNodeSet)
Add a representation of this expression to a PathMap. The PathMap captures a map of the nodes visited
by an expression in a source tree.
The default implementation of this method assumes that an expression does no navigation other than
the navigation done by evaluating its subexpressions, and that the subexpressions are evaluated in the
same context as the containing expression. The method must be overridden for any expression
where these assumptions do not hold. For example, implementations exist for AxisExpression, ParentExpression,
and RootExpression (because they perform navigation), and for the doc(), document(), and collection()
functions because they create a new navigation root. Implementations also exist for PathExpression and
FilterExpression because they have subexpressions that are evaluated in a different context from the
calling expression.
- addToPathMap in interface Expression
pathMap
- the PathMap to which the expression should be addedpathMapNodeSet
- the PathMapNodeSet to which the paths embodied in this expression should be added
- the pathMapNodeSet representing the points in the source document that are both reachable by this
expression, and that represent possible results of this expression. For an expression that does
navigation, it represents the end of the arc in the path map that describes the navigation route. For other
expressions, it is the same as the input pathMapNode.
extendBindingList
protected Binding[] extendBindingList(Binding[] in)
Extend an array of variable bindings to include the binding(s) defined in this expression
in
- a set of variable bindings
- a set of variable bindings including all those supplied plus this one
getAction
public Expression getAction()
Get the action expression
- the action expression (introduced by "return" or "satisfies")
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.
- getLocalSlotNumber in interface Binding
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.
- the number of slots required
getSequence
public Expression getSequence()
Get the "sequence" expression - the one to which the variable is bound
- the expression to which the variable is bound
getVariableName
public String getVariableName()
Get the display name of the range variable, for diagnostics only
- the lexical QName of the range variable
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.
- isAssignable in interface Binding
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.
- isGlobal in interface Binding
iterateSubExpressions
public Iterator iterateSubExpressions()
Get the immediate subexpressions of this expression
- iterateSubExpressions in interface 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 ()
positionBinding
- the binding of the position variable if any
- an expression in which terms from the WHERE clause that can be extracted have been extracted
refineTypeInformation
public void refineTypeInformation(ItemType type,
int cardinality,
Value constantValue,
int properties,
ExpressionVisitor visitor,
Assignation currentExpression)
Refine the type information associated with this variable declaration. This is useful when the
type of the variable has not been explicitly declared (which is common); the variable then takes
a static type based on the type of the expression to which it is bound. The effect of this call
is to update the static expression type for all references to this variable.
type
- the inferred item type of the expression to which the variable is boundcardinality
- the inferred cardinality of the expression to which the variable is boundconstantValue
- the constant value to which the variable is bound (null if there is no constant value)properties
- other static properties of the expression to which the variable is boundvisitor
- an expression visitor to provide context informationcurrentExpression
- the expression that binds the variable
replaceSubExpression
public boolean replaceSubExpression(Expression original,
Expression replacement)
Replace one subexpression by a replacement subexpression
- replaceSubExpression in interface Expression
original
- the original subexpressionreplacement
- the replacement subexpression
- true if the original subexpression is found
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
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.
setRequiredType
public void setRequiredType(SequenceType requiredType)
Set the required type (declared type) of the variable
requiredType
- the required type
setSequence
public void setSequence(Expression sequence)
Set the "sequence" expression - the one to which the variable is bound
sequence
- the expression to which the variable is bound
setSlotNumber
public void setSlotNumber(int nr)
Set the slot number for the range variable
nr
- the slot number to be used
setVariableQName
public void setVariableQName(StructuredQName variableName)
Set the name of the variable
variableName
- the name of the variable
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.
- suppressValidation in interface Expression