Enhance SpEL compilation to cover additional expression types
This change introduces support for compilation of expressions
involving inline lists, string concatenation and method
invocations where the method being invoked is declared
with a varargs parameter. It also fixes a problem with
compiling existing method invocations where the target
method is on a non public type.
Issue: SPR-12328
@ -54,6 +59,41 @@ public class ReflectiveMethodExecutor implements MethodExecutor {
@@ -54,6 +59,41 @@ public class ReflectiveMethodExecutor implements MethodExecutor {
@ -99,18 +99,18 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -99,18 +99,18 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
*CompoundExpression
*ConstructorReference
*FunctionReference
*InlineList
*OpModulus
*
*Notyetcompiled(somemayneverneedtobe):
*Assign
*BeanReference
*Identifier
*InlineList
*OpDec
*OpBetween
*OpMatches
*OpPower
*OpInc
*OpModulus
*Projection
*QualifiedId
*Selection
@ -270,6 +270,121 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -270,6 +270,121 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -581,6 +696,14 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -581,6 +696,14 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -605,6 +728,24 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -605,6 +728,24 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -1233,6 +1374,43 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -1233,6 +1374,43 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -1549,6 +1727,176 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -1549,6 +1727,176 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -1628,7 +1976,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -1628,7 +1976,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
expression.getValue(tc);
assertEquals("bar",TestClass5._s);
tc.reset();
// non-static method, one parameter of primitive type
expression=parser.parseExpression("nine(231)");
assertCantCompile(expression);
@ -1638,7 +1986,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -1638,7 +1986,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
expression.getValue(tc);
assertEquals(231,tc.i);
tc.reset();
// static method, one parameter of primitive type
expression=parser.parseExpression("ten(111)");
assertCantCompile(expression);
@ -1649,28 +1997,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -1649,28 +1997,6 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertCantCompile(expression);// Varargs is not yet supported
expression=parser.parseExpression("twelve()");
assertCantCompile(expression);
expression.getValue(tc);
assertCantCompile(expression);// Varargs is not yet supported
// method that gets type converted parameters
// Converting from an int to a string
@ -2022,7 +2348,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2022,7 +2348,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2032,7 +2358,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2032,7 +2358,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2043,7 +2369,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2043,7 +2369,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2075,7 +2401,13 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2075,7 +2401,13 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertEquals("d e f",stringify(expression.getValue(listOfStringArrays)));
assertCanCompile(expression);
assertEquals("d e f",stringify(expression.getValue(listOfStringArrays)));
@ -2084,7 +2416,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2084,7 +2416,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2112,7 +2444,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2112,7 +2444,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2158,15 +2490,15 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2158,15 +2490,15 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
expression=parser.parseExpression("[1]");
assertEquals("d e f",stringify(expression.getValue(listOfListOfStrings)));
@ -2178,15 +2510,15 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2178,15 +2510,15 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
expression=parser.parseExpression("['foo']");
assertEquals("a b c",stringify(expression.getValue(mapToLists)));
@ -2196,9 +2528,9 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2196,9 +2528,9 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2237,7 +2569,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2237,7 +2569,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2857,6 +3189,29 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2857,6 +3189,29 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -2900,7 +3255,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2900,7 +3255,7 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
}
}
}
publicvoidtwelve(int...vargs){
if(vargs==null){
i=0;
@ -2912,6 +3267,120 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@@ -2912,6 +3267,120 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
@ -61,6 +61,144 @@ public class SpelCompilationPerformanceTests extends AbstractExpressionTests {
@@ -61,6 +61,144 @@ public class SpelCompilationPerformanceTests extends AbstractExpressionTests {