Author: markt
Date: Fri Jan 13 20:29:13 2012
New Revision: 1231285

URL: http://svn.apache.org/viewvc?rev=1231285&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52445
Do not assume method expressions have exactly three elements
Includes a test case

Modified:
    tomcat/trunk/java/org/apache/el/parser/AstValue.java
    tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java

Modified: tomcat/trunk/java/org/apache/el/parser/AstValue.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstValue.java?rev=1231285&r1=1231284&r2=1231285&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/parser/AstValue.java (original)
+++ tomcat/trunk/java/org/apache/el/parser/AstValue.java Fri Jan 13 20:29:13 
2012
@@ -245,8 +245,8 @@ public final class AstValue extends Simp
         Method m = null;
         Object[] values = null;
         if (isParametersProvided()) {
-            values = ((AstMethodParameters)
-                    this.jjtGetChild(2)).getParameters(ctx);
+            values = ((AstMethodParameters) this.jjtGetChild(
+                    this.jjtGetNumChildren() - 1)).getParameters(ctx);
             Class<?>[] types = getTypesFromValues(values);
             m = ReflectionUtil.getMethod(t.base, t.property, types);
         } else {
@@ -329,9 +329,13 @@ public final class AstValue extends Simp
      */
     @Override
     public boolean isParametersProvided() {
-        if (this.children.length > 2
-                && this.jjtGetChild(2) instanceof AstMethodParameters) {
-            return true;
+        // Assumption is that method parameters, if present, will be the last
+        // child
+        int len = children.length;
+        if (len > 2) {
+            if (this.jjtGetChild(len - 1) instanceof AstMethodParameters) {
+                return true;
+            }
         }
         return false;
     }

Modified: tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java?rev=1231285&r1=1231284&r2=1231285&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java (original)
+++ tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java Fri Jan 13 
20:29:13 2012
@@ -399,4 +399,18 @@ public class TestMethodExpressionImpl {
         Boolean actual = (Boolean) ve.getValue(context);
         assertEquals(Boolean.FALSE, actual);
     }
+
+    @Test
+    public void testBug52445a() {
+        MethodExpression me = factory.createMethodExpression(context,
+                "${beanA.setBean(beanBB)}", null ,
+                new Class<?>[] { TesterBeanB.class });
+        me.invoke(context, null);
+
+        MethodExpression me1 = factory.createMethodExpression(context,
+                "${beanA.bean.sayHello()}", null, null);
+        String actual = (String) me1.invoke(context, null);
+        assertEquals("Hello from BB", actual);
+    }
+
 }



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

Reply via email to