From 1cf6e9b35a9474f697a4ae98bdfaf60ac4110f9a Mon Sep 17 00:00:00 2001 From: Mike Brock Date: Sun, 17 Apr 2011 19:01:05 -0400 Subject: [PATCH] fix to varargs resolution --- .classpath | 15 +- .project | 34 ++-- META-INF/MANIFEST.MF | 154 +++++++++--------- src/main/java/org/mvel2/MVEL.java | 2 +- .../org/mvel2/compiler/AbstractParser.java | 1 + src/main/java/org/mvel2/util/ParseTools.java | 4 +- .../org/mvel2/tests/core/SamplesTests.java | 6 +- 7 files changed, 111 insertions(+), 105 deletions(-) diff --git a/.classpath b/.classpath index f57972e6c..a1624501a 100644 --- a/.classpath +++ b/.classpath @@ -1,15 +1,8 @@ - - - - - - - - - - - + + + + diff --git a/.project b/.project index b46558854..a458d385a 100644 --- a/.project +++ b/.project @@ -1,13 +1,23 @@ + - mvel - - - - - org.eclipse.jdt.core.javabuilder - - - - org.eclipse.jdt.core.javanature - - \ No newline at end of file + mvel + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 08018420e..a7a5795eb 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -1,77 +1,77 @@ -Manifest-Version: 1.0 -Export-Package: org.mvel2;uses:="org.mvel2.util,org.mvel2.conversion,o - rg.mvel2.integration.impl,org.mvel2.optimizers.impl.refl.nodes,org.mv - el2.integration,org.mvel2.compiler,org.mvel2.ast,org.mvel2.debug";ver - sion="2.1.0.SNAPSHOT",org.mvel2.asm;version="2.1.0.SNAPSHOT",org.mvel - 2.asm.signature;version="2.1.0.SNAPSHOT",org.mvel2.asm.util;uses:="or - g.mvel2.asm,org.mvel2.asm.signature";version="2.1.0.SNAPSHOT",org.mve - l2.ast;uses:="org.mvel2.integration,org.mvel2.optimizers,org.mvel2,or - g.mvel2.debug,org.mvel2.compiler,org.mvel2.util,org.mvel2.math,org.mv - el2.integration.impl";version="2.1.0.SNAPSHOT",org.mvel2.compiler;use - s:="org.mvel2.integration,org.mvel2,org.mvel2.util,org.mvel2.ast,org. - mvel2.optimizers,org.mvel2.integration.impl,org.mvel2.optimizers.impl - .refl.nodes";version="2.1.0.SNAPSHOT",org.mvel2.conversion;uses:="org - .mvel2,org.mvel2.compiler";version="2.1.0.SNAPSHOT",org.mvel2.debug;u - ses:="org.mvel2.integration,org.mvel2.util,org.mvel2.ast,org.mvel2.co - mpiler,org.mvel2";version="2.1.0.SNAPSHOT",org.mvel2.integration;uses - :="org.mvel2.ast";version="2.1.0.SNAPSHOT",org.mvel2.integration.impl - ;uses:="org.mvel2.integration,org.mvel2,org.mvel2.ast,org.mvel2.util" - ;version="2.1.0.SNAPSHOT",org.mvel2.math;uses:="org.mvel2,org.mvel2.d - ebug,org.mvel2.util";version="2.1.0.SNAPSHOT",org.mvel2.optimizers;us - es:="org.mvel2,org.mvel2.util,org.mvel2.compiler,org.mvel2.integratio - n,org.mvel2.optimizers.dynamic,org.mvel2.optimizers.impl.asm,org.mvel - 2.optimizers.impl.refl";version="2.1.0.SNAPSHOT",org.mvel2.optimizers - .dynamic;uses:="org.mvel2.compiler,org.mvel2.util,org.mvel2.integrati - on,org.mvel2.optimizers,org.mvel2,org.mvel2.optimizers.impl.asm";vers - ion="2.1.0.SNAPSHOT",org.mvel2.optimizers.impl.asm;uses:="org.mvel2.i - ntegration,org.mvel2.optimizers.impl.refl.nodes,org.mvel2.util,org.mv - el2.asm,org.mvel2.optimizers,org.mvel2,org.mvel2.compiler,org.mvel2.a - st";version="2.1.0.SNAPSHOT",org.mvel2.optimizers.impl.refl;uses:="or - g.mvel2.optimizers.impl.refl.nodes,org.mvel2.integration,org.mvel2.ut - il,org.mvel2.optimizers.impl.refl.collection,org.mvel2.optimizers,org - .mvel2,org.mvel2.compiler,org.mvel2.ast";version="2.1.0.SNAPSHOT",org - .mvel2.optimizers.impl.refl.collection;uses:="org.mvel2.integration,o - rg.mvel2.compiler,org.mvel2,org.mvel2.util";version="2.1.0.SNAPSHOT", - org.mvel2.optimizers.impl.refl.nodes;uses:="org.mvel2.integration,org - .mvel2.compiler,org.mvel2,org.mvel2.util,org.mvel2.ast,org.mvel2.opti - mizers";version="2.1.0.SNAPSHOT",org.mvel2.sh;uses:="org.mvel2,org.mv - el2.templates,org.mvel2.integration.impl,org.mvel2.integration,org.mv - el2.util,org.mvel2.sh.command.basic,org.mvel2.sh.command.file";versio - n="2.1.0.SNAPSHOT",org.mvel2.sh.command.basic;uses:="org.mvel2.sh,org - .mvel2.sh.text,org.mvel2.util,org.mvel2";version="2.1.0.SNAPSHOT",org - .mvel2.sh.command.file;uses:="org.mvel2.sh";version="2.1.0.SNAPSHOT", - org.mvel2.sh.text;version="2.1.0.SNAPSHOT",org.mvel2.templates;uses:= - "org.mvel2.templates.res,org.mvel2.templates.util,org.mvel2,org.mvel2 - .util,org.mvel2.integration.impl,org.mvel2.integration,org.mvel2.temp - lates.util.io";version="2.1.0.SNAPSHOT",org.mvel2.templates.res;uses: - ="org.mvel2.templates,org.mvel2.integration,org.mvel2.templates.util, - org.mvel2,org.mvel2.integration.impl,org.mvel2.util";version="2.1.0.S - NAPSHOT",org.mvel2.templates.util;uses:="org.mvel2.templates.res,org. - mvel2.templates,org.mvel2.util";version="2.1.0.SNAPSHOT",org.mvel2.te - mplates.util.io;uses:="org.mvel2.templates.util,org.mvel2.util";versi - on="2.1.0.SNAPSHOT",org.mvel2.util;uses:="org.mvel2.ast,org.mvel2.int - egration,org.mvel2,org.mvel2.compiler,org.mvel2.integration.impl,org. - mvel2.math,sun.misc";version="2.1.0.SNAPSHOT" -Bundle-Version: 2.1.0.SNAPSHOT -Tool: Bnd-0.0.357 -Bundle-Name: mvel2 -Bnd-LastModified: 1301345255629 -Created-By: 1.6.0_21 (Apple Inc.) -Bundle-ManifestVersion: 2 -Bundle-SymbolicName: org.mvel2 -Import-Package: org.mvel2;version="2.1",org.mvel2.asm;version="2.1",or - g.mvel2.asm.signature;version="2.1",org.mvel2.asm.util;version="2.1", - org.mvel2.ast;version="2.1",org.mvel2.compiler;version="2.1",org.mvel - 2.conversion;version="2.1",org.mvel2.debug;version="2.1",org.mvel2.in - tegration;version="2.1",org.mvel2.integration.impl;version="2.1",org. - mvel2.math;version="2.1",org.mvel2.optimizers;version="2.1",org.mvel2 - .optimizers.dynamic;version="2.1",org.mvel2.optimizers.impl.asm;versi - on="2.1",org.mvel2.optimizers.impl.refl;version="2.1",org.mvel2.optim - izers.impl.refl.collection;version="2.1",org.mvel2.optimizers.impl.re - fl.nodes;version="2.1",org.mvel2.sh;version="2.1",org.mvel2.sh.comman - d.basic;version="2.1",org.mvel2.sh.command.file;version="2.1",org.mve - l2.sh.text;version="2.1",org.mvel2.templates;version="2.1",org.mvel2. - templates.res;version="2.1",org.mvel2.templates.util;version="2.1",or - g.mvel2.templates.util.io;version="2.1",org.mvel2.util;version="2.1", - sun.misc;resolution:=optional - +Manifest-Version: 1.0 +Export-Package: org.mvel2;uses:="org.mvel2.util,org.mvel2.conversion,o + rg.mvel2.integration.impl,org.mvel2.optimizers.impl.refl.nodes,org.mv + el2.integration,org.mvel2.compiler,org.mvel2.ast,org.mvel2.debug";ver + sion="2.1.0.SNAPSHOT",org.mvel2.asm;version="2.1.0.SNAPSHOT",org.mvel + 2.asm.signature;version="2.1.0.SNAPSHOT",org.mvel2.asm.util;uses:="or + g.mvel2.asm,org.mvel2.asm.signature";version="2.1.0.SNAPSHOT",org.mve + l2.ast;uses:="org.mvel2.integration,org.mvel2.optimizers,org.mvel2,or + g.mvel2.debug,org.mvel2.compiler,org.mvel2.util,org.mvel2.math,org.mv + el2.integration.impl";version="2.1.0.SNAPSHOT",org.mvel2.compiler;use + s:="org.mvel2.integration,org.mvel2,org.mvel2.util,org.mvel2.ast,org. + mvel2.optimizers,org.mvel2.integration.impl,org.mvel2.optimizers.impl + .refl.nodes";version="2.1.0.SNAPSHOT",org.mvel2.conversion;uses:="org + .mvel2,org.mvel2.compiler";version="2.1.0.SNAPSHOT",org.mvel2.debug;u + ses:="org.mvel2.integration,org.mvel2.compiler,org.mvel2.ast,org.mvel + 2.util,org.mvel2";version="2.1.0.SNAPSHOT",org.mvel2.integration;uses + :="org.mvel2.ast";version="2.1.0.SNAPSHOT",org.mvel2.integration.impl + ;uses:="org.mvel2.integration,org.mvel2,org.mvel2.ast,org.mvel2.util" + ;version="2.1.0.SNAPSHOT",org.mvel2.math;uses:="org.mvel2,org.mvel2.d + ebug,org.mvel2.util";version="2.1.0.SNAPSHOT",org.mvel2.optimizers;us + es:="org.mvel2,org.mvel2.util,org.mvel2.compiler,org.mvel2.integratio + n,org.mvel2.optimizers.dynamic,org.mvel2.optimizers.impl.asm,org.mvel + 2.optimizers.impl.refl";version="2.1.0.SNAPSHOT",org.mvel2.optimizers + .dynamic;uses:="org.mvel2.compiler,org.mvel2.util,org.mvel2.integrati + on,org.mvel2.optimizers,org.mvel2,org.mvel2.optimizers.impl.asm";vers + ion="2.1.0.SNAPSHOT",org.mvel2.optimizers.impl.asm;uses:="org.mvel2.i + ntegration,org.mvel2.optimizers.impl.refl.nodes,org.mvel2.util,org.mv + el2.asm,org.mvel2.optimizers,org.mvel2,org.mvel2.compiler,org.mvel2.a + st";version="2.1.0.SNAPSHOT",org.mvel2.optimizers.impl.refl;uses:="or + g.mvel2.optimizers.impl.refl.nodes,org.mvel2.integration,org.mvel2.ut + il,org.mvel2.optimizers.impl.refl.collection,org.mvel2.optimizers,org + .mvel2,org.mvel2.compiler,org.mvel2.ast";version="2.1.0.SNAPSHOT",org + .mvel2.optimizers.impl.refl.collection;uses:="org.mvel2.integration,o + rg.mvel2.compiler,org.mvel2,org.mvel2.util";version="2.1.0.SNAPSHOT", + org.mvel2.optimizers.impl.refl.nodes;uses:="org.mvel2.integration,org + .mvel2.compiler,org.mvel2,org.mvel2.util,org.mvel2.ast,org.mvel2.opti + mizers";version="2.1.0.SNAPSHOT",org.mvel2.sh;uses:="org.mvel2,org.mv + el2.templates,org.mvel2.integration.impl,org.mvel2.integration,org.mv + el2.util,org.mvel2.sh.command.basic,org.mvel2.sh.command.file";versio + n="2.1.0.SNAPSHOT",org.mvel2.sh.command.basic;uses:="org.mvel2.sh,org + .mvel2.sh.text,org.mvel2.util,org.mvel2";version="2.1.0.SNAPSHOT",org + .mvel2.sh.command.file;uses:="org.mvel2.sh";version="2.1.0.SNAPSHOT", + org.mvel2.sh.text;version="2.1.0.SNAPSHOT",org.mvel2.templates;uses:= + "org.mvel2.templates.res,org.mvel2.templates.util,org.mvel2,org.mvel2 + .util,org.mvel2.integration.impl,org.mvel2.integration,org.mvel2.temp + lates.util.io";version="2.1.0.SNAPSHOT",org.mvel2.templates.res;uses: + ="org.mvel2.templates,org.mvel2.integration,org.mvel2.templates.util, + org.mvel2,org.mvel2.integration.impl,org.mvel2.util";version="2.1.0.S + NAPSHOT",org.mvel2.templates.util;uses:="org.mvel2.templates.res,org. + mvel2.templates,org.mvel2.util";version="2.1.0.SNAPSHOT",org.mvel2.te + mplates.util.io;uses:="org.mvel2.templates.util,org.mvel2.util";versi + on="2.1.0.SNAPSHOT",org.mvel2.util;uses:="org.mvel2.ast,org.mvel2.int + egration,org.mvel2,org.mvel2.compiler,org.mvel2.integration.impl,org. + mvel2.math,sun.misc";version="2.1.0.SNAPSHOT" +Bundle-Version: 2.1.0.SNAPSHOT +Tool: Bnd-0.0.357 +Bundle-Name: mvel2 +Bnd-LastModified: 1303065575631 +Created-By: 1.6.0_24 (Apple Inc.) +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: org.mvel2 +Import-Package: org.mvel2;version="2.1",org.mvel2.asm;version="2.1",or + g.mvel2.asm.signature;version="2.1",org.mvel2.asm.util;version="2.1", + org.mvel2.ast;version="2.1",org.mvel2.compiler;version="2.1",org.mvel + 2.conversion;version="2.1",org.mvel2.debug;version="2.1",org.mvel2.in + tegration;version="2.1",org.mvel2.integration.impl;version="2.1",org. + mvel2.math;version="2.1",org.mvel2.optimizers;version="2.1",org.mvel2 + .optimizers.dynamic;version="2.1",org.mvel2.optimizers.impl.asm;versi + on="2.1",org.mvel2.optimizers.impl.refl;version="2.1",org.mvel2.optim + izers.impl.refl.collection;version="2.1",org.mvel2.optimizers.impl.re + fl.nodes;version="2.1",org.mvel2.sh;version="2.1",org.mvel2.sh.comman + d.basic;version="2.1",org.mvel2.sh.command.file;version="2.1",org.mve + l2.sh.text;version="2.1",org.mvel2.templates;version="2.1",org.mvel2. + templates.res;version="2.1",org.mvel2.templates.util;version="2.1",or + g.mvel2.templates.util.io;version="2.1",org.mvel2.util;version="2.1", + sun.misc;resolution:=optional + diff --git a/src/main/java/org/mvel2/MVEL.java b/src/main/java/org/mvel2/MVEL.java index 345f22084..c632e5982 100644 --- a/src/main/java/org/mvel2/MVEL.java +++ b/src/main/java/org/mvel2/MVEL.java @@ -951,7 +951,7 @@ public static Object executeExpression(final Object compiledExpression, final Ob } public static Object executeExpression(final Object compiledExpression, final Object ctx, final VariableResolverFactory resolverFactory) { - return ((ExecutableStatement) compiledExpression).getValue(ctx, resolverFactory); + return ((ExecutableStatement) compiledExpression).getValue(ctx, resolverFactory); } /** diff --git a/src/main/java/org/mvel2/compiler/AbstractParser.java b/src/main/java/org/mvel2/compiler/AbstractParser.java index 1c27292de..6f3506b4c 100644 --- a/src/main/java/org/mvel2/compiler/AbstractParser.java +++ b/src/main/java/org/mvel2/compiler/AbstractParser.java @@ -340,6 +340,7 @@ else if (cursor >= end) { } } + cursor = balancedCaptureWithLineAccounting(expr, st, end, expr[cursor], pCtx) + 1; if (tokenContinues()) { lastNode = new InlineCollectionNode(expr, st, cursor - st, fields, diff --git a/src/main/java/org/mvel2/util/ParseTools.java b/src/main/java/org/mvel2/util/ParseTools.java index 7ea1e358a..f7d98870a 100644 --- a/src/main/java/org/mvel2/util/ParseTools.java +++ b/src/main/java/org/mvel2/util/ParseTools.java @@ -252,7 +252,7 @@ public static Method getBestCandidate(Class[] arguments, String method, Class de if (classTarget && (meth.getModifiers() & Modifier.STATIC) == 0) continue; if (method.equals(meth.getName())) { - if ((parmTypes = meth.getParameterTypes()).length != arguments.length) { + if ((parmTypes = meth.getParameterTypes()).length != arguments.length && !meth.isVarArgs()) { continue; } else if (arguments.length == 0 && parmTypes.length == 0) { @@ -444,7 +444,7 @@ public static Constructor getBestConstructorCandidate(Class[] arguments, Class c } for (Constructor construct : getConstructors(cls)) { - if ((parmTypes = getConstructors(construct)).length != arguments.length) { + if ((parmTypes = getConstructors(construct)).length != arguments.length && !construct.isVarArgs()) { continue; } else if (arguments.length == 0 && parmTypes.length == 0) { diff --git a/src/test/java/org/mvel2/tests/core/SamplesTests.java b/src/test/java/org/mvel2/tests/core/SamplesTests.java index c6d849a5b..77efe338c 100644 --- a/src/test/java/org/mvel2/tests/core/SamplesTests.java +++ b/src/test/java/org/mvel2/tests/core/SamplesTests.java @@ -1,12 +1,15 @@ package org.mvel2.tests.core; import org.mvel2.MVEL; + import static org.mvel2.MVEL.compileExpression; import static org.mvel2.MVEL.executeExpression; +import static org.mvel2.util.ParseTools.containsCheck; import static org.mvel2.util.ParseTools.loadFromFile; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -21,7 +24,7 @@ public void testQuickSortScript1() throws IOException { } public void testQuickSortScriptFunctional() throws IOException { - MVEL.evalFile(new File("samples/scripts/fquicksort.mvel")); + MVEL.evalFile(new File("samples/scripts/fquicksort.mvel")); } @@ -84,5 +87,4 @@ public void testQuickSortScript5() throws IOException { public void testMultiLineString() throws IOException { MVEL.evalFile(new File("samples/scripts/multilinestring.mvel")); } - }