Author: markt
Date: Sun Jul 14 21:20:43 2013
New Revision: 1503060

URL: http://svn.apache.org/r1503060
Log:
More lambda expression implementation. Handle the case of an expression without 
any formal parameters.

Modified:
    tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java
    tomcat/trunk/java/org/apache/el/parser/AstLambdaExpressionOrInvocation.java
    tomcat/trunk/test/org/apache/el/parser/TestAstLambdaExpression.java

Modified: tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java?rev=1503060&r1=1503059&r2=1503060&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java Sun Jul 14 
21:20:43 2013
@@ -40,7 +40,10 @@ public class AstLambdaExpression extends
         AstLambdaParameters formalParameters =
                 (AstLambdaParameters) children[0];
 
-        int paramCount = formalParameters.children.length;
+        int paramCount = 0;
+        if (formalParameters.children != null) {
+            paramCount = formalParameters.children.length;
+        }
         int argCount = 0;
         if (paramValues != null) {
             argCount = paramValues.length;
@@ -52,7 +55,7 @@ public class AstLambdaExpression extends
 
         // Build the argument map
         Map<String,Object> lambdaArgumnents = new HashMap<>();
-        for (int i = 0; i < formalParameters.children.length; i++) {
+        for (int i = 0; i < paramCount; i++) {
             lambdaArgumnents.put(formalParameters.children[i].getImage(),
                     paramValues[i]);
         }

Modified: 
tomcat/trunk/java/org/apache/el/parser/AstLambdaExpressionOrInvocation.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstLambdaExpressionOrInvocation.java?rev=1503060&r1=1503059&r2=1503060&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstLambdaExpressionOrInvocation.java 
(original)
+++ tomcat/trunk/java/org/apache/el/parser/AstLambdaExpressionOrInvocation.java 
Sun Jul 14 21:20:43 2013
@@ -31,19 +31,17 @@ public class AstLambdaExpressionOrInvoca
     @Override
     public Object getValue(EvaluationContext ctx) throws ELException {
 
-        if (children.length == 2) {
-            AstLambdaExpression lambdaExpression =
-                    (AstLambdaExpression) children[0];
-
-
-            Object[] args =
-                    ((AstMethodParameters) children[1]).getParameters(ctx);
+        AstLambdaExpression lambdaExpression =
+                (AstLambdaExpression) children[0];
 
-            return lambdaExpression.invoke(ctx, null, args);
+        Object[] args;
+        if (children.length == 2) {
+            args = ((AstMethodParameters) children[1]).getParameters(ctx);
+        } else {
+            // No parameters - just the expression
+            args = null;
         }
-
-        // TODO Auto-generated method stub
-        return super.getValue(ctx);
+        return lambdaExpression.invoke(ctx, null, args);
     }
 }
 /* JavaCC - OriginalChecksum=6b3dd15b31540457a41bd55974037ed9 (do not edit 
this line) */

Modified: tomcat/trunk/test/org/apache/el/parser/TestAstLambdaExpression.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/parser/TestAstLambdaExpression.java?rev=1503060&r1=1503059&r2=1503060&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/parser/TestAstLambdaExpression.java 
(original)
+++ tomcat/trunk/test/org/apache/el/parser/TestAstLambdaExpression.java Sun Jul 
14 21:20:43 2013
@@ -29,4 +29,20 @@ public class TestAstLambdaExpression {
         Object result = processor.getValue("(x->x+1)(1)", Integer.class);
         Assert.assertEquals(Integer.valueOf(2), result);
     }
+
+
+    @Test
+    public void testSpec02() {
+        ELProcessor processor = new ELProcessor();
+        Object result = processor.getValue("((x,y)->x+y)(1,2)", Integer.class);
+        Assert.assertEquals(Integer.valueOf(3), result);
+    }
+
+
+    @Test
+    public void testSpec03() {
+        ELProcessor processor = new ELProcessor();
+        Object result = processor.getValue("(()->64)", Integer.class);
+        Assert.assertEquals(Integer.valueOf(64), result);
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to