This is an automated email from the ASF dual-hosted git repository. henrib pushed a commit to tag 2.1.1 in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
commit 3da34ebcc115f1f1611bbbb70861995138ee9e2b Author: Henri Biestro <hen...@apache.org> AuthorDate: Fri Dec 16 07:13:26 2011 +0000 Fix and test for JEXL-124 git-svn-id: https://svn-us.apache.org/repos/asf/commons/proper/jexl/branches/2.0@1215052 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/commons/jexl2/internal/MethodExecutor.java | 12 ++++++++---- src/test/java/org/apache/commons/jexl2/MethodTest.java | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java b/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java index d6487f2..f39542a 100644 --- a/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java +++ b/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java @@ -131,12 +131,16 @@ public final class MethodExecutor extends AbstractExecutor.Method { // if no values are being passed into the vararg, size == 0 if (size == 1) { // if one non-null value is being passed into the vararg, + // and that arg is not the sole argument and not an array of the expected type, // make the last arg an array of the expected type if (actual[index] != null) { - // create a 1-length array to hold and replace the last argument - Object lastActual = Array.newInstance(type, 1); - Array.set(lastActual, 0, actual[index]); - actual[index] = lastActual; + Class<?> aclazz = actual[index].getClass(); + if (!aclazz.isArray() || !aclazz.getComponentType().equals(type)) { + // create a 1-length array to hold and replace the last argument + Object lastActual = Array.newInstance(type, 1); + Array.set(lastActual, 0, actual[index]); + actual[index] = lastActual; + } } // else, the vararg is null and used as is, considered as T[] } else { diff --git a/src/test/java/org/apache/commons/jexl2/MethodTest.java b/src/test/java/org/apache/commons/jexl2/MethodTest.java index 9a0b4b8..137141f 100644 --- a/src/test/java/org/apache/commons/jexl2/MethodTest.java +++ b/src/test/java/org/apache/commons/jexl2/MethodTest.java @@ -66,6 +66,19 @@ public class MethodTest extends JexlTestCase { } return mixed + ":" + result; } + + public String concat(String... strs) { + if (strs.length > 0) { + StringBuilder strb = new StringBuilder(strs[0]); + for(int s = 1; s < strs.length; ++s) { + strb.append(", "); + strb.append(strs[s]); + } + return strb.toString(); + } else { + return ""; + } + } } public static class Functor { @@ -118,6 +131,8 @@ public class MethodTest extends JexlTestCase { asserter.assertExpression("test.callInts()", "Varargs:0"); asserter.assertExpression("test.callInts(1)", "Varargs:1"); asserter.assertExpression("test.callInts(1,2,3,4,5)", "Varargs:15"); + asserter.assertExpression("test.concat(['1', '2', '3'])", "1, 2, 3"); + asserter.assertExpression("test.concat('1', '2', '3')", "1, 2, 3"); } public void testCallMixedVarArgMethod() throws Exception {