This is an automated email from the ASF dual-hosted git repository. henrib pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
The following commit(s) were added to refs/heads/master by this push: new 7f1336e JEXL-298: size/empty operators overloads results shall not be coerced Task #JEXL-298 - Unable to call 'empty' and 'size' member methods with parameters 7f1336e is described below commit 7f1336e81d1b84ffe53d53a408380e5cfd94d91c Author: henrib <hen...@apache.org> AuthorDate: Wed Dec 11 23:12:34 2019 +0100 JEXL-298: size/empty operators overloads results shall not be coerced Task #JEXL-298 - Unable to call 'empty' and 'size' member methods with parameters --- .../apache/commons/jexl3/internal/Operators.java | 64 +++++++++++----------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/apache/commons/jexl3/internal/Operators.java b/src/main/java/org/apache/commons/jexl3/internal/Operators.java index ae8b4ec..7698cb0 100644 --- a/src/main/java/org/apache/commons/jexl3/internal/Operators.java +++ b/src/main/java/org/apache/commons/jexl3/internal/Operators.java @@ -342,26 +342,27 @@ public class Operators { * @param object the object to check the emptyness of * @return the evaluation result */ - protected boolean empty(JexlNode node, Object object) { + protected Object empty(JexlNode node, Object object) { if (object == null) { return true; } Object result = tryOverload(node, JexlOperator.EMPTY, object); - if (result == JexlEngine.TRY_FAILED) { - final JexlArithmetic arithmetic = interpreter.arithmetic; - result = arithmetic.isEmpty(object, null); - if (result == null) { - final JexlUberspect uberspect = interpreter.uberspect; - result = false; - // check if there is an isEmpty method on the object that returns a - // boolean and if so, just use it - JexlMethod vm = uberspect.getMethod(object, "isEmpty", Interpreter.EMPTY_PARAMS); - if (returnsBoolean(vm)) { - try { - result = vm.invoke(object, Interpreter.EMPTY_PARAMS); - } catch (Exception xany) { - interpreter.operatorError(node, JexlOperator.EMPTY, xany); - } + if (result != JexlEngine.TRY_FAILED) { + return result; + } + final JexlArithmetic arithmetic = interpreter.arithmetic; + result = arithmetic.isEmpty(object, null); + if (result == null) { + final JexlUberspect uberspect = interpreter.uberspect; + result = false; + // check if there is an isEmpty method on the object that returns a + // boolean and if so, just use it + JexlMethod vm = uberspect.getMethod(object, "isEmpty", Interpreter.EMPTY_PARAMS); + if (returnsBoolean(vm)) { + try { + result = vm.invoke(object, Interpreter.EMPTY_PARAMS); + } catch (Exception xany) { + interpreter.operatorError(node, JexlOperator.EMPTY, xany); } } } @@ -377,25 +378,26 @@ public class Operators { * @param object the object to get the size of * @return the evaluation result */ - protected int size(JexlNode node, Object object) { + protected Object size(JexlNode node, Object object) { if (object == null) { return 0; } Object result = tryOverload(node, JexlOperator.SIZE, object); - if (result == JexlEngine.TRY_FAILED) { - final JexlArithmetic arithmetic = interpreter.arithmetic; - result = arithmetic.size(object, null); - if (result == null) { - final JexlUberspect uberspect = interpreter.uberspect; - // check if there is a size method on the object that returns an - // integer and if so, just use it - JexlMethod vm = uberspect.getMethod(object, "size", Interpreter.EMPTY_PARAMS); - if (returnsInteger(vm)) { - try { - result = vm.invoke(object, Interpreter.EMPTY_PARAMS); - } catch (Exception xany) { - interpreter.operatorError(node, JexlOperator.SIZE, xany); - } + if (result != JexlEngine.TRY_FAILED) { + return result; + } + final JexlArithmetic arithmetic = interpreter.arithmetic; + result = arithmetic.size(object, null); + if (result == null) { + final JexlUberspect uberspect = interpreter.uberspect; + // check if there is a size method on the object that returns an + // integer and if so, just use it + JexlMethod vm = uberspect.getMethod(object, "size", Interpreter.EMPTY_PARAMS); + if (returnsInteger(vm)) { + try { + result = vm.invoke(object, Interpreter.EMPTY_PARAMS); + } catch (Exception xany) { + interpreter.operatorError(node, JexlOperator.SIZE, xany); } } }