Mirek Hankus created JEXL-281:
---------------------------------
Summary: MethodExecutor incorrectly tests for empty parameters list
Key: JEXL-281
URL: https://issues.apache.org/jira/browse/JEXL-281
Project: Commons JEXL
Issue Type: Bug
Affects Versions: 3.1
Reporter: Mirek Hankus
Currently MethodExecutor constructor contains code
{code:java}
if (method != null) {
Class<?>[] formal = method.getParameterTypes();
// if the last parameter is an array, the method is considered as vararg
if (formal != null && MethodKey.isVarArgs(method)) {
vastart = formal.length - 1;
vaclass = formal[vastart].getComponentType();
}
}{code}
variable formal is never null, beacause Javadoc for getParameterTypes states
that "returns an array of length 0 if the underlying executable takes no
parameters." (implementation invokes clone - so there always be an object)
So test for empty parameter list should not test for null, but for empty array
-
{code:java}
if (formal.length > 0 && MethodKey.isVarArgs(method)) {{code}
.
Problem is that MethodKey.isVarArgs is very costly (it traverses class
hierarchy, and throws Exception for every object which does not have method by
this name) - so invocation of isVarArgs should be avoided if not required.
Currently it is always called due to wrong test condition
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)