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 InterpreterBase
The owner.protected final JexlArithmetic.Uberspect
The overloaded arithmetic operators. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
Operators
(InterpreterBase owner) Constructs a new instance. -
Method Summary
Modifier and TypeMethodDescriptionprivate Object[]
arguments
(JexlOperator operator, Object... args) Tidy arguments based on operator arity.protected boolean
The 'match'/'in' operator implementation.protected void
controlNullOperands
(JexlArithmetic arithmetic, JexlOperator operator, Object... args) Throw a NPE if operator is strict and one of the arguments is null.protected Object
Check for emptyness of various types: Collection, Array, Map, String, and anything that has a boolean isEmpty() method.protected boolean
The 'endsWith' operator implementation.private boolean
Checks whether a method is a JexlArithmetic method.private static boolean
isPostfix
(JexlOperator operator) Helper for postfix assignment operators.private boolean
Checks whether a method returns a boolean or a Boolean.private boolean
Checks whether a method returns an int or an Integer.protected Object
Calculate thesize
of various types: Collection, Array, Map, String, and anything that has a int size() method.protected boolean
startsWith
(JexlNode node, String operator, Object left, Object right) The 'startsWith' operator implementation.protected Object
tryAssignOverload
(JexlNode node, JexlOperator operator, Consumer<Object> assignFun, Object... args) Evaluates an assign operator.protected Object
tryOverload
(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 thesize
of 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
-