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;
}
}
}