diff options
Diffstat (limited to 'velocity-engine-core')
2 files changed, 15 insertions, 2 deletions
diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java index 3d38bcf2..7e912e6e 100644 --- a/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java +++ b/velocity-engine-core/src/main/java/org/apache/velocity/runtime/parser/node/ASTMethod.java @@ -183,7 +183,7 @@ public class ASTMethod extends SimpleNode 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()); } /* diff --git a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java index f9f1e000..51bac9bb 100644 --- a/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java +++ b/velocity-engine-core/src/main/java/org/apache/velocity/util/introspection/MethodMap.java @@ -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; } } } |