[
https://issues.apache.org/jira/browse/JEXL-281?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Henri Biestro closed JEXL-281.
------------------------------
> 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
> Assignee: Henri Biestro
> Priority: Major
> Fix For: 3.2
>
>
> 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
(v8.3.4#803005)