Class Operators
java.lang.Object
org.apache.commons.jexl3.internal.Operators
Helper class to deal with operator overloading and specifics.
- Since:
- 3.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final InterpreterBaseThe owner.protected final JexlArithmetic.UberspectThe overloaded arithmetic operators. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedOperators(InterpreterBase owner) Constructs a new instance. -
Method Summary
Modifier and TypeMethodDescriptionprivate Object[]arguments(JexlOperator operator, Object... args) Tidy arguments based on operator arity.protected booleanThe 'match'/'in' operator implementation.protected voidcontrolNullOperands(JexlArithmetic arithmetic, JexlOperator operator, Object... args) Throw a NPE if operator is strict and one of the arguments is null.protected ObjectCheck for emptyness of various types: Collection, Array, Map, String, and anything that has a boolean isEmpty() method.protected booleanThe 'endsWith' operator implementation.private booleanChecks whether a method is a JexlArithmetic method.private static booleanisPostfix(JexlOperator operator) Helper for postfix assignment operators.private booleanChecks whether a method returns a boolean or a Boolean.private booleanChecks whether a method returns an int or an Integer.protected ObjectCalculate thesizeof various types: Collection, Array, Map, String, and anything that has a int size() method.protected booleanstartsWith(JexlNode node, String operator, Object left, Object right) The 'startsWith' operator implementation.protected ObjecttryAssignOverload(JexlNode node, JexlOperator operator, Consumer<Object> assignFun, Object... args) Evaluates an assign operator.protected ObjecttryOverload(JexlNode node, JexlOperator operator, Object... args) Attempts to call an operator.
-
Field Details
-
interpreter
The owner. -
operators
The overloaded arithmetic operators.
-
-
Constructor Details
-
Operators
Constructs a new instance.- Parameters:
owner- the owning interpreter
-
-
Method Details
-
isPostfix
Helper for postfix assignment operators.- Parameters:
operator- the operator- Returns:
- true if operator is a postfix operator (x++, y--)
-
arguments
Tidy arguments based on operator arity.The interpreter may add a null to the arguments of operator expecting only one parameter.
- Parameters:
operator- the operatorargs- the arguements (as seen by the interpreter)- Returns:
- the tidied arguments
-
contains
The 'match'/'in' operator implementation.Note that 'x in y' or 'x matches y' means 'y contains x' ; the JEXL operator arguments order syntax is the reverse of this method call.
- Parameters:
node- the nodeop- the calling operator, =~ or !~left- the right operandright- the left operand- Returns:
- true if left matches right, false otherwise
-
controlNullOperands
protected void controlNullOperands(JexlArithmetic arithmetic, JexlOperator operator, Object... args) Throw a NPE if operator is strict and one of the arguments is null.- Parameters:
arithmetic- the JEXL arithmetic instanceoperator- the operator to checkargs- the operands- Throws:
JexlArithmetic.NullOperand- if operator is strict and an operand is null
-
empty
Check for emptyness of various types: Collection, Array, Map, String, and anything that has a boolean isEmpty() method.Note that the result may not be a boolean.
- Parameters:
node- the node holding the objectobject- the object to check the emptyness of- Returns:
- the evaluation result
-
endsWith
The 'endsWith' operator implementation.- Parameters:
node- the nodeoperator- the calling operator, ^= or ^!left- the left operandright- the right operand- Returns:
- true if left ends with right, false otherwise
-
isArithmetic
Checks whether a method is a JexlArithmetic method.- Parameters:
vm- the JexlMethod (may be null)- Returns:
- true of false
-
returnsBoolean
Checks whether a method returns a boolean or a Boolean.- Parameters:
vm- the JexlMethod (may be null)- Returns:
- true of false
-
returnsInteger
Checks whether a method returns an int or an Integer.- Parameters:
vm- the JexlMethod (may be null)- Returns:
- true of false
-
size
Calculate thesizeof various types: Collection, Array, Map, String, and anything that has a int size() method.Note that the result may not be an integer.
- Parameters:
node- the node that gave the value to sizeobject- the object to get the size of- Returns:
- the evaluation result
-
startsWith
The 'startsWith' operator implementation.- Parameters:
node- the nodeoperator- the calling operator, $= or $!left- the left operandright- the right operand- Returns:
- true if left starts with right, false otherwise
-
tryAssignOverload
protected Object tryAssignOverload(JexlNode node, JexlOperator operator, Consumer<Object> assignFun, Object... args) Evaluates an assign operator.This takes care of finding and caching the operator method when appropriate. If an overloads returns Operator.ASSIGN, it means the side-effect is complete. Otherwise, a += b <=> a = a + b
- Parameters:
node- the syntactic nodeoperator- the operatorargs- the arguments, the first one being the target of assignment- Returns:
- JexlOperator.ASSIGN if operation assignment has been performed, JexlEngine.TRY_FAILED if no operation was performed, the value to use as the side effect argument otherwise
-
tryOverload
Attempts to call an operator.This performs the null argument control against the strictness of the operator.
This takes care of finding and caching the operator method when appropriate.
- Parameters:
node- the syntactic nodeoperator- the operatorargs- the arguments- Returns:
- the result of the operator evaluation or TRY_FAILED
-