Author: cbrisson
Date: Sat May 25 15:15:59 2019
New Revision: 1859988

URL: http://svn.apache.org/viewvc?rev=1859988&view=rev
Log:
[core] Introspection: favor non-vararg methods on ambiguities as does the Java 
compiler

Modified:
    
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
    
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java

Modified: 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java?rev=1859988&r1=1859987&r2=1859988&view=diff
==============================================================================
--- 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
 (original)
+++ 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
 Sat May 25 15:15:59 2019
@@ -183,7 +183,7 @@ public class ASTMethod extends SimpleNod
                     if (i < params.length - 1)
                         plist.append(", ");
                 }
-                log.debug("Object '{}' does not contain method {}({}) at 
{}[line {}, column {}]", o.getClass().getName(), methodName, plist, 
getTemplateName(), getLine(), getColumn());
+                log.debug("Object '{}' does not contain method {}({}) (or 
several ambiguous methods) at {}[line {}, column {}]", o.getClass().getName(), 
methodName, plist, getTemplateName(), getLine(), getColumn());
             }
 
             /*

Modified: 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
URL: 
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java?rev=1859988&r1=1859987&r2=1859988&view=diff
==============================================================================
--- 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
 (original)
+++ 
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java
 Sat May 25 15:15:59 2019
@@ -284,10 +284,23 @@ public class MethodMap
                                     case MORE_SPECIFIC:
                                         it.remove();
                                         break;
-                                    case EQUIVALENT:
                                     case INCOMPARABLE:
+                                        /* Java compiler favors non-vararg 
methods. Let's do the same. */
+                                        if (match.varargs != best.varargs)
+                                        {
+                                            if (match.varargs)
+                                            {
+                                                keepMethod = false;
+                                            }
+                                            else if (best.varargs)
+                                            {
+                                                it.remove();
+                                            }
+                                        }
                                         /* otherwise it's an equivalent match 
*/
                                         break;
+                                    case EQUIVALENT:
+                                        break;
                                 }
                             }
                         }


Reply via email to