On 15 December 2011 23:10, <hen...@apache.org> wrote: > Author: henrib > Date: Thu Dec 15 23:10:21 2011 > New Revision: 1214986 > > URL: http://svn.apache.org/viewvc?rev=1214986&view=rev > Log: > Fix for JEXL-124 > > Modified: > > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java > > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/test/java/org/apache/commons/jexl2/IssuesTest.java
-1 This needs to be reverted immediately - fixes should never be applied to tags, which are supposed to be immutable The fix needs to be applied to branch-2.0 instead. > Modified: > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java > URL: > http://svn.apache.org/viewvc/commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java?rev=1214986&r1=1214985&r2=1214986&view=diff > ============================================================================== > --- > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java > (original) > +++ > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/main/java/org/apache/commons/jexl2/internal/MethodExecutor.java > Thu Dec 15 23:10:21 2011 > @@ -27,6 +27,7 @@ import org.apache.commons.jexl2.internal > public final class MethodExecutor extends AbstractExecutor.Method { > /** Whether this method handles varargs. */ > private final boolean isVarArgs; > + > /** > * Creates a new instance. > * @param is the introspector used to discover the method > @@ -49,7 +50,7 @@ public final class MethodExecutor extend > */ > @Override > public Object execute(Object o, Object[] args) > - throws IllegalAccessException, InvocationTargetException { > + throws IllegalAccessException, InvocationTargetException { > if (isVarArgs) { > Class<?>[] formal = method.getParameterTypes(); > int index = formal.length - 1; > @@ -83,7 +84,6 @@ public final class MethodExecutor extend > return TRY_FAILED; > } > > - > /** > * Discovers a method for a {@link MethodExecutor}. > * <p> > @@ -131,12 +131,16 @@ public final class MethodExecutor extend > // 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 { > @@ -158,7 +162,7 @@ public final class MethodExecutor extend > return actual; > } > > - /** > + /** > * Determines if a method can accept a variable number of arguments. > * @param m a the method to check > * @return true if method is vararg, false otherwise > @@ -175,5 +179,3 @@ public final class MethodExecutor extend > } > } > } > - > - > > Modified: > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/test/java/org/apache/commons/jexl2/IssuesTest.java > URL: > http://svn.apache.org/viewvc/commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/test/java/org/apache/commons/jexl2/IssuesTest.java?rev=1214986&r1=1214985&r2=1214986&view=diff > ============================================================================== > --- > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/test/java/org/apache/commons/jexl2/IssuesTest.java > (original) > +++ > commons/proper/jexl/tags/COMMONS_JEXL_2_1-RC3/src/test/java/org/apache/commons/jexl2/IssuesTest.java > Thu Dec 15 23:10:21 2011 > @@ -827,4 +827,27 @@ public class IssuesTest extends JexlTest > result = get1.execute(null, quux); > assertEquals(24, result); > } > + > + public static class Jeff { > + 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 void test124() throws Exception { > + JexlEngine jexl = new JexlEngine(); > + Script script = jexl.createScript("jeff.concat(['1', '2', '3'])", > "jeff"); > + Object res = script.execute(null, new Jeff()); > + assertEquals("1, 2, 3", res); > + } > } > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org