Binary Expression: a numeric or boolean expression consisting of the
two operands and an operator
computeCardinality
public int computeCardinality()
Determine the static cardinality. Default implementation returns [0..1] if either operand
can be empty, or [1..1] otherwise.
- computeCardinality in interface Expression
displayOperator
protected String displayOperator()
equals
public boolean equals(Object other)
Is this expression the same as another expression?
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 Expression
getOperands
public Expression[] getOperands()
Get the operands
- the two operands of the binary expression, as an array of length 2
getOperator
public int getOperator()
Get the operator
hashCode
public int hashCode()
Get a hashCode for comparing two expressions. Note that this hashcode gives the same
result for (A op B) and for (B op A), whether or not the operator is commutative.
isAssociative
protected static boolean isAssociative(int operator)
Determine whether an operator is associative, that is, ((a^b)^c) = (a^(b^c))
- true if the operator is associative
isCommutative
protected static boolean isCommutative(int operator)
Determine whether a binary operator is commutative, that is, A op B = B op A.
- true if the operator is commutative
isInverse
protected static boolean isInverse(int op1,
int op2)
Test if one operator is the inverse of another, so that (A op1 B) is
equivalent to (B op2 A). Commutative operators are the inverse of themselves
and are therefore not listed here.
op1
- the first operatorop2
- the second operator
- true if the operators are the inverse of each other
iterateSubExpressions
public Iterator iterateSubExpressions()
Get the immediate subexpressions of this expression
- iterateSubExpressions in interface Expression
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 Expression
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)
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
setFlattened
public void setFlattened(boolean flattened)
Mark an expression as being "flattened". This is a collective term that includes extracting the
string value or typed value, or operations such as simple value construction that concatenate text
nodes before atomizing. The implication of all of these is that although the expression might
return nodes, the identity of the nodes has no significance. This is called during type checking
of the parent expression.
- setFlattened in interface Expression
flattened
- set to true if the result of the expression is atomized or otherwise turned into
an atomic value
toString
public String toString()
The toString() method for an expression attempts to give a representation of the expression
in an XPath-like form, but there is no guarantee that the syntax will actually be true XPath.
In the case of XSLT instructions, the toString() method gives an abstracted view of the syntax
- toString in interface Expression