From: markt Date: Thu, 17 Feb 2011 09:59:30 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50790 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=0c0afa29af93d7d585f8e1229c7e5c1b69a238c6;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50790 Improve method resolution in EL expressions Add test cases for this bug git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1071561 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/javax/el/BeanELResolver.java b/java/javax/el/BeanELResolver.java index 4f286cbcf..7ba9ce02e 100644 --- a/java/javax/el/BeanELResolver.java +++ b/java/javax/el/BeanELResolver.java @@ -413,7 +413,8 @@ public class BeanELResolver extends ELResolver { } Method[] methods = clazz.getMethods(); for (Method m : methods) { - if (m.getParameterTypes().length == paramCount) { + if (methodName.equals(m.getName()) && + m.getParameterTypes().length == paramCount) { // Same number of parameters - use the first match matchingMethod = m; break; diff --git a/java/org/apache/el/parser/AstValue.java b/java/org/apache/el/parser/AstValue.java index 02ad92f7b..92dab4634 100644 --- a/java/org/apache/el/parser/AstValue.java +++ b/java/org/apache/el/parser/AstValue.java @@ -156,8 +156,8 @@ public final class AstValue extends SimpleNode { AstMethodParameters mps = (AstMethodParameters) this.children[i+1]; // This is a method - base = resolver.invoke(ctx, base, suffix, - mps.getParameterTypes(ctx), mps.getParameters(ctx)); + base = resolver.invoke(ctx, base, suffix, null, + mps.getParameters(ctx)); i+=2; } else { // This is a property diff --git a/test/org/apache/el/TestMethodExpressionImpl.java b/test/org/apache/el/TestMethodExpressionImpl.java index fd7cb968d..772e01c29 100644 --- a/test/org/apache/el/TestMethodExpressionImpl.java +++ b/test/org/apache/el/TestMethodExpressionImpl.java @@ -349,4 +349,18 @@ public class TestMethodExpressionImpl extends TestCase { String actual = (String) me1.invoke(context, null); assertEquals("Hello Tomcat from B", actual); } + + public void testBug50790a() throws Exception { + ValueExpression ve = factory.createValueExpression(context, + "#{beanAA.name.contains(beanA.name)}", java.lang.Boolean.class); + Boolean actual = (Boolean) ve.getValue(context); + assertEquals(Boolean.TRUE, actual); + } + + public void testBug50790b() throws Exception { + ValueExpression ve = factory.createValueExpression(context, + "#{beanA.name.contains(beanAA.name)}", java.lang.Boolean.class); + Boolean actual = (Boolean) ve.getValue(context); + assertEquals(Boolean.FALSE, actual); + } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 75f1dec55..8b06f4e4b 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -107,6 +107,9 @@ not result in String constants that are too long for valid Java code. (markt) + + 50790: Improve method resolution in EL expressions. (markt) +