A CardinalityChecker implements the cardinality checking of "treat as": that is,
it returns the supplied sequence, checking that its cardinality is correct
computeSpecialProperties
public int computeSpecialProperties()
Get the static properties of this expression (other than its type). The result is
bit-signficant. These properties are used for optimizations. In general, if
property bit is set, it is true, but if it is unset, the value is unknown.
- computeSpecialProperties in interface UnaryExpression
copy
public Expression copy()
Copy an expression. This makes a deep copy.
- copy in interface Expression
- the copy of the original expression
depictSequenceStart
public static String depictSequenceStart(SequenceIterator seq,
int max)
Show the first couple of items in a sequence in an error message
seq
- iterator over the sequencemax
- maximum number of items to be shown
- a message display of the contents of the sequence
equals
public boolean equals(Object other)
Is this expression the same as another expression?
- equals in interface UnaryExpression
explain
public void explain(ExpressionPresenter out)
Diagnostic print of expression structure. The abstract expression tree
is written to the supplied output destination.
- explain in interface UnaryExpression
getImplementationMethod
public int getImplementationMethod()
An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().
This method indicates which of these methods is provided. This implementation provides both iterate() and
process() methods natively.
- getImplementationMethod in interface Expression
getItemType
public ItemType getItemType(TypeHierarchy th)
Determine the data type of the items returned by the expression, if possible
- getItemType in interface UnaryExpression
th
- the type hierarchy cache
- a value such as Type.STRING, Type.BOOLEAN, Type.NUMBER, Type.NODE,
or Type.ITEM (meaning not known in advance)
getRequiredCardinality
public int getRequiredCardinality()
Get the required cardinality
- the cardinality required by this checker
getRoleLocator
public RoleLocator getRoleLocator()
Get the RoleLocator, which contains diagnostic information for use if the cardinality check fails
- the diagnostic information
makeCardinalityChecker
public static Expression makeCardinalityChecker(Expression sequence,
int cardinality,
RoleLocator role)
Factory method to construct a CardinalityChecker. The method may create an expression that combines
the cardinality checking with the functionality of the underlying expression class
sequence
- the base sequence whose cardinality is to be checkedcardinality
- the required cardinalityrole
- information to be used in error reporting
- a new Expression that does the CardinalityChecking (not necessarily a CardinalityChecker)
optimize
public Expression optimize(ExpressionVisitor visitor,
ItemType contextItemType)
throws XPathException
Perform optimisation of an expression and its subexpressions.
This method is called after all references to functions and variables have been resolved
to the declaration of the function or variable, and after all type checking has been done.
- optimize in interface UnaryExpression
visitor
- an expression visitorcontextItemType
- the static type of "." at the point where this expression is invoked.
The parameter is set to null if it is known statically that the context item will be undefined.
If the type of the context item is not known statically, the argument is set to
Type.ITEM_TYPE
- the original expression, rewritten if appropriate to optimize execution
XPathException
- if an error is discovered during this phase
(typically a type error)
process
public void process(XPathContext context)
throws XPathException
Process the instruction, without returning any tail calls
- process in interface Expression
context
- The dynamic context, giving access to the current node,
the current variables, etc.
setErrorCode
public void setErrorCode(String code)
Set the error code to be returned (this is used when evaluating the functions such
as exactly-one() which have their own error codes)
code
- the error code to be used