in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java [97:143]
public ProviderOutcome provide(String scriptName, RenderContext renderContext, Bindings arguments) {
Bindings globalBindings = renderContext.getBindings();
Bindings bindings = BindingsUtils.merge(globalBindings, arguments);
String extension = scriptExtension(scriptName);
if (extension == null || extension.equals(SightlyScriptEngineFactory.EXTENSION)) {
return ProviderOutcome.failure();
}
URL script = bundledUnitManager.getScript(bindings, scriptName);
if (script != null) {
String scriptUrlAsString = script.toExternalForm();
bindings.remove(BundledRenderUnit.VARIABLE);
bindings.put(ScriptEngine.FILENAME, scriptUrlAsString);
try {
ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension(extension);
if (scriptEngine != null) {
if (scriptEngine instanceof Compilable) {
CompiledScript compiledScript;
CachedScript cachedScript = scriptCache.getScript(scriptUrlAsString);
if (cachedScript == null) {
Compilable compilableScriptEngine = (Compilable) scriptEngine;
ScriptNameAwareReader reader =
new ScriptNameAwareReader(new StringReader(IOUtils.toString(script, StandardCharsets.UTF_8)),
scriptUrlAsString);
compiledScript = compilableScriptEngine.compile(reader);
} else {
compiledScript = cachedScript.getCompiledScript();
}
return ProviderOutcome.notNullOrFailure(compiledScript.eval(bindings));
} else {
ScriptNameAwareReader reader =
new ScriptNameAwareReader(new StringReader(IOUtils.toString(script, StandardCharsets.UTF_8)),
scriptUrlAsString);
return ProviderOutcome
.notNullOrFailure(scriptEngine.eval(reader, bindings));
}
}
} catch (Exception e) {
return ProviderOutcome.failure(e);
}
}
Resource scriptResource = scriptDependencyResolver.resolveScript(renderContext, scriptName);
if (scriptResource == null) {
log.debug("Path does not match an existing resource: {}", scriptName);
return ProviderOutcome.failure();
}
return evalScript(scriptResource, bindings);
}