You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/07/14 23:15:29 UTC
svn commit: r676740 - in /velocity/engine/trunk/src:
java/org/apache/velocity/util/introspection/MethodMap.java
test/org/apache/velocity/test/VarargMethodsTestCase.java
Author: nbubna
Date: Mon Jul 14 14:15:29 2008
New Revision: 676740
URL: http://svn.apache.org/viewvc?rev=676740&view=rev
Log:
fix for VELOCITY-605, prefer foo(Object) to foo(Object[])
Modified:
velocity/engine/trunk/src/java/org/apache/velocity/util/introspection/MethodMap.java
velocity/engine/trunk/src/test/org/apache/velocity/test/VarargMethodsTestCase.java
Modified: velocity/engine/trunk/src/java/org/apache/velocity/util/introspection/MethodMap.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/util/introspection/MethodMap.java?rev=676740&r1=676739&r2=676740&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/util/introspection/MethodMap.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/util/introspection/MethodMap.java Mon Jul 14 14:15:29 2008
@@ -272,10 +272,24 @@
if(c2MoreSpecific)
{
/*
+ * If one method accepts varargs and the other does not,
+ * call the non-vararg one more specific.
+ */
+ boolean last1Array = c1[c1.length - 1].isArray();
+ boolean last2Array = c2[c2.length - 1].isArray();
+ if (last1Array && !last2Array)
+ {
+ return LESS_SPECIFIC;
+ }
+ if (!last1Array && last2Array)
+ {
+ return MORE_SPECIFIC;
+ }
+
+ /*
* Incomparable due to cross-assignable arguments (i.e.
* foo(String, Object) vs. foo(Object, String))
*/
-
return INCOMPARABLE;
}
Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/VarargMethodsTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/VarargMethodsTestCase.java?rev=676740&r1=676739&r2=676740&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/VarargMethodsTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/VarargMethodsTestCase.java Mon Jul 14 14:15:29 2008
@@ -132,6 +132,12 @@
assertEvalEquals("object,string", "$nasty.test($nice,'foo')");
}
+ public void testObjectVarArgVsObjectVelocity605()
+ {
+ assertEvalEquals("string", "$nasty.test('joe')");
+ assertEvalEquals("object", "$nasty.test($nice)");
+ }
+
public void testNoArgs()
{
assertEvalEquals("noargs", "$nasty.test()");
@@ -221,6 +227,16 @@
return "noargs";
}
+ public Object test(Object arg)
+ {
+ return "object";
+ }
+
+ public Object test(String arg)
+ {
+ return "string";
+ }
+
public String test(Object[] array)
{
return "object[]";