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)

Reply via email to