This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit b9562263feb806ce8c7143630e4737ddb569efcf
Author: Andy Seaborne <[email protected]>
AuthorDate: Tue Jan 13 08:42:19 2026 +0000

    GH-3708: Get function directly from FunctionRegistry
---
 .../java/org/apache/jena/sparql/expr/E_Function.java  | 17 +++++++----------
 .../apache/jena/sparql/function/FunctionRegistry.java | 19 ++++++++++++++++++-
 .../apache/jena/sparql/function/library/FN_Apply.java |  5 +----
 .../org/apache/jena/sparql/util/TestContextUtils.java |  4 ++--
 4 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Function.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Function.java
index 7c8f95e0a5..2fda97947d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Function.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/E_Function.java
@@ -21,21 +21,20 @@
 
 package org.apache.jena.sparql.expr;
 
+import java.util.List;
+import java.util.Objects;
+
 import org.apache.jena.query.ARQ;
 import org.apache.jena.sparql.ARQInternalErrorException;
 import org.apache.jena.sparql.engine.binding.Binding;
 import org.apache.jena.sparql.function.Function;
 import org.apache.jena.sparql.function.FunctionEnv;
-import org.apache.jena.sparql.function.FunctionFactory;
 import org.apache.jena.sparql.function.FunctionRegistry;
 import org.apache.jena.sparql.function.scripting.ScriptFunction;
 import org.apache.jena.sparql.serializer.SerializationContext;
 import org.apache.jena.sparql.util.Context;
 import org.apache.jena.sparql.util.FmtUtils;
 
-import java.util.List;
-import java.util.Objects;
-
 /** SPARQL filter function */
 public class E_Function extends ExprFunctionN {
     private static final String name = "function";
@@ -87,10 +86,9 @@ public class E_Function extends ExprFunctionN {
         }
     }
 
-    private FunctionFactory functionFactory(Context cxt) {
+    private Function function(Context cxt) {
         FunctionRegistry registry = chooseRegistry(cxt);
-        FunctionFactory ff = registry.get(functionIRI);
-        return ff;
+        return registry.getFunction(functionIRI);
     }
 
     private void bindFunction(Context cxt) {
@@ -98,12 +96,11 @@ public class E_Function extends ExprFunctionN {
             return;
 
         if ( function == null ) {
-            FunctionFactory ff = functionFactory(cxt);
-            if ( ff == null ) {
+            function = function(cxt);
+            if ( function == null ) {
                 functionBound = true;
                 throw new ExprUndefFunction("URI <" + functionIRI + "> not 
found as a function", functionIRI);
             }
-            function = ff.create(functionIRI);
         }
         function.build(functionIRI, args, cxt);
         functionBound = true;
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
index 2747eef5ca..580eeee432 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/function/FunctionRegistry.java
@@ -125,8 +125,14 @@ public class FunctionRegistry
         return this;
     }
 
-    /** Lookup by URI */
+    /** @deprecated Use {@link #getFunctionFactory} */
+    @Deprecated(forRemoval = true)
     public FunctionFactory get(String uri) {
+        return getFunctionFactory(uri);
+    }
+
+    /** Lookup by URI */
+    public FunctionFactory getFunctionFactory(String uri) {
         FunctionFactory function = registry.get(uri);
         if ( function != null )
             return function;
@@ -144,6 +150,17 @@ public class FunctionRegistry
         return registry.get(uri);
     }
 
+    /**
+     * Get a ARQ expression {@link Function}.
+     * Return null if the URI does not map to a registered entry.
+     */
+    public Function getFunction(String uri) {
+        FunctionFactory ff = get(uri);
+        if ( ff == null )
+            return null;
+        return ff.create(uri);
+    }
+
     public boolean isRegistered(String uri) {
         return registry.containsKey(uri);
     }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
index 1914a273ff..03219ae78f 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
@@ -89,10 +89,7 @@ public class FN_Apply extends FunctionBase {
 
     private Function buildFunction(String functionIRI, FunctionEnv 
functionEnv) {
         FunctionRegistry registry = chooseRegistry(functionEnv.getContext());
-        FunctionFactory ff = registry.get(functionIRI);
-        if ( ff == null )
-            return null;
-        return ff.create(functionIRI);
+        return registry.getFunction(functionIRI);
     }
 
     private FunctionRegistry chooseRegistry(Context context) {
diff --git 
a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestContextUtils.java 
b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestContextUtils.java
index 8b5bd018e2..699b5632ca 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestContextUtils.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestContextUtils.java
@@ -123,12 +123,12 @@ public class TestContextUtils {
         assertNotSame(givenServiceExecutorRegistry, 
actualServiceExecutorRegistry);
 
         List<FunctionFactory> actualFunctionFactories = new ArrayList<>();
-        actualFunctionRegistry.keys().forEachRemaining(k -> 
actualFunctionFactories.add(actualFunctionRegistry.get(k)));
+        actualFunctionRegistry.keys().forEachRemaining(k -> 
actualFunctionFactories.add(actualFunctionRegistry.getFunctionFactory(k)));
         List<PropertyFunctionFactory> actualPFunctionFactories = new 
ArrayList<>();
         actualPFunctionRegistry.keys().forEachRemaining(k -> 
actualPFunctionFactories.add(actualPFunctionRegistry.get(k)));
 
         assertSame(givenPFunctionFactory, actualPFunctionRegistry.get("y"));
-        assertSame(givenFunctionFactory, actualFunctionRegistry.get("x"));
+        assertSame(givenFunctionFactory, 
actualFunctionRegistry.getFunctionFactory("x"));
         assertEquals(List.of(givenPFunctionFactory), actualPFunctionFactories);
         assertEquals(List.of(givenFunctionFactory), actualFunctionFactories);
         assertEquals(List.of(givenServiceExecutionFactory), 
actualServiceExecutorRegistry.getBulkChain());

Reply via email to