diff --git a/src/main/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java b/src/main/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java index 54dc9d7f5..ebabc8231 100644 --- a/src/main/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java +++ b/src/main/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java @@ -777,20 +777,9 @@ public NodePointer getVariablePointer(QName name) { * @return Function */ public Function getFunction(QName functionName, Object[] parameters) { - Function func = null; - int hashParameters; - if (parameters == null) { - hashParameters = 0; - } - else - { - List paramList = Arrays.asList(parameters); - List classList = paramList.stream().map(p -> p.getClass()).collect(Collectors.toList()); - hashParameters = Arrays.hashCode(classList.toArray()); - } - Integer functionHash = Integer.valueOf(Objects.hash(functionName, hashParameters)); + Integer functionHash = getFunctionHash(functionName, parameters); if (CACHE_ENABLED) { - func = functionCache.get(functionHash); + Function func = functionCache.get(functionHash); if (func != null) { return func; } @@ -803,7 +792,7 @@ public Function getFunction(QName functionName, Object[] parameters) { while (funcCtx != null) { funcs = funcCtx.getFunctions(); if (funcs != null) { - func = funcs.getFunction(namespace, name, parameters); + Function func = funcs.getFunction(namespace, name, parameters); if (func != null) { if (CACHE_ENABLED) { functionCache.put(functionHash, func); @@ -817,6 +806,27 @@ public Function getFunction(QName functionName, Object[] parameters) { "Undefined function: " + functionName.toString()); } + + private static Integer getFunctionHash(QName functionName, Object[] parameters) + { + if (!CACHE_ENABLED) { + return Integer.valueOf(-1); + } + + int hashParameters; + if (parameters == null) { + hashParameters = 0; + } + else + { + List paramList = Arrays.asList(parameters); + List classList = paramList.stream().map(p -> p.getClass()).collect(Collectors.toList()); + hashParameters = Arrays.hashCode(classList.toArray()); + } + return Integer.valueOf(Objects.hash(functionName, hashParameters)); + } + + public void registerNamespace(String prefix, String namespaceURI) { if (namespaceResolver.isSealed()) { namespaceResolver = (NamespaceResolver) namespaceResolver.clone();