diff --git a/src/main/java/org/rumbledb/compiler/VisitorHelpers.java b/src/main/java/org/rumbledb/compiler/VisitorHelpers.java index ff16e45ee4..e8ae002e0d 100644 --- a/src/main/java/org/rumbledb/compiler/VisitorHelpers.java +++ b/src/main/java/org/rumbledb/compiler/VisitorHelpers.java @@ -392,6 +392,25 @@ private static LibraryModule parseLibraryModule( return parseJSONiqLibraryModule(query, uri, importingModuleContext, compilationConfiguration); } + /** + * Parses and statically analyses a standalone library module from source text. + * Unlike {@link #parseLibraryModule(String, URI, StaticContext, CompilationConfiguration)}, + * this method also populates static contexts and infers expression types. + */ + public static LibraryModule parseLibraryModuleFromQueryWithStaticContextAndInference( + String query, URI uri, RumbleConfiguration configuration) { + StaticContext importingModuleContext = new StaticContext(uri, configuration); + UserDefinedFunctionExecutionModes executionModes = new UserDefinedFunctionExecutionModes(); + executionModes.setQueryLanguage(configuration.semantics().queryLanguage()); + importingModuleContext.setUserDefinedFunctionsExecutionModes(executionModes); + + LibraryModule libraryModule = + parseLibraryModule(query, uri, importingModuleContext, new CompilationConfiguration(configuration)); + populateStaticContext(libraryModule, configuration); + inferTypes(libraryModule, configuration); + return libraryModule; + } + private static LibraryModule parseJSONiqLibraryModule( String query, URI uri,