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());
