[ https://issues.apache.org/jira/browse/JEXL-281?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Biestro updated JEXL-281: ------------------------------- Assignee: Henri Biestro > 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 > > 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)