optimised bindings handling and handling of precompiled RenderUnit
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyCompiledScript.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyCompiledScript.java
index cf2c9ea..c0ddbaf 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyCompiledScript.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyCompiledScript.java
@@ -45,7 +45,7 @@
}
@Override
- public Object eval(ScriptContext context) throws ScriptException {
+ public Object eval(ScriptContext context) {
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
SlingBindings slingBindings = new SlingBindings();
slingBindings.putAll(bindings);
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
index 1a9fb03..8c5e9ed 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
@@ -92,22 +92,17 @@
@Override
public Object eval(Reader reader, ScriptContext scriptContext) throws ScriptException {
checkArguments(reader, scriptContext);
- Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
- SlingBindings slingBindings = new SlingBindings();
- slingBindings.putAll(bindings);
- final SlingHttpServletRequest request = slingBindings.getRequest();
- if (request == null) {
- throw new SightlyException("Missing SlingHttpServletRequest from ScriptContext.");
- }
- final Object oldValue = request.getAttribute(SlingBindings.class.getName());
try {
- request.setAttribute(SlingBindings.class.getName(), slingBindings);
- SightlyCompiledScript compiledScript = internalCompile(reader, scriptContext);
+ Object renderUnit = scriptContext.getAttribute("precompiled.unit", SlingScriptConstants.SLING_SCOPE);
+ SightlyCompiledScript compiledScript;
+ if (renderUnit instanceof RenderUnit) {
+ compiledScript = new SightlyCompiledScript(this, (RenderUnit) renderUnit);
+ } else {
+ compiledScript = internalCompile(reader, scriptContext);
+ }
return compiledScript.eval(scriptContext);
} catch (Exception e) {
throw new ScriptException(e);
- } finally {
- request.setAttribute(SlingBindings.class.getName(), oldValue);
}
}
@@ -134,34 +129,27 @@
return script;
}
};
- Object renderUnit = null;
+ JavaClassBackendCompiler javaClassBackendCompiler = new JavaClassBackendCompiler(importsAnalyser);
+ GlobalShadowCheckBackendCompiler shadowCheckBackendCompiler = null;
if (scriptContext != null) {
- renderUnit = scriptContext.getAttribute("precompiled.unit", SlingScriptConstants.SLING_SCOPE);
+ Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+ Set<String> globals = bindings.keySet();
+ shadowCheckBackendCompiler = new GlobalShadowCheckBackendCompiler(javaClassBackendCompiler, globals);
}
- if (renderUnit == null) {
- JavaClassBackendCompiler javaClassBackendCompiler = new JavaClassBackendCompiler(importsAnalyser);
- GlobalShadowCheckBackendCompiler shadowCheckBackendCompiler = null;
- if (scriptContext != null) {
- Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
- Set<String> globals = bindings.keySet();
- shadowCheckBackendCompiler = new GlobalShadowCheckBackendCompiler(javaClassBackendCompiler, globals);
+ CompilationResult result = shadowCheckBackendCompiler == null ? sightlyCompiler.compile(compilationUnit,
+ javaClassBackendCompiler) : sightlyCompiler.compile(compilationUnit, shadowCheckBackendCompiler);
+ if (result.getWarnings().size() > 0) {
+ for (CompilerMessage warning : result.getWarnings()) {
+ LOGGER.warn("Script {} {}:{}: {}", warning.getScriptName(), warning.getLine(), warning.getColumn(), warning.getMessage());
}
- CompilationResult result = shadowCheckBackendCompiler == null ? sightlyCompiler.compile(compilationUnit,
- javaClassBackendCompiler) : sightlyCompiler.compile(compilationUnit, shadowCheckBackendCompiler);
- if (result.getWarnings().size() > 0) {
- for (CompilerMessage warning : result.getWarnings()) {
- LOGGER.warn("Script {} {}:{}: {}", warning.getScriptName(), warning.getLine(), warning.getColumn(),
- warning.getMessage());
- }
- }
- if (result.getErrors().size() > 0) {
- CompilerMessage error = result.getErrors().get(0);
- throw new ScriptException(error.getMessage(), error.getScriptName(), error.getLine(), error.getColumn());
- }
- SourceIdentifier sourceIdentifier = new SourceIdentifier(configuration, scriptName);
- String javaSourceCode = javaClassBackendCompiler.build(sourceIdentifier);
- renderUnit = javaCompilerService.compileSource(sourceIdentifier, javaSourceCode);
}
+ if (result.getErrors().size() > 0) {
+ CompilerMessage error = result.getErrors().get(0);
+ throw new ScriptException(error.getMessage(), error.getScriptName(), error.getLine(), error.getColumn());
+ }
+ SourceIdentifier sourceIdentifier = new SourceIdentifier(configuration, scriptName);
+ String javaSourceCode = javaClassBackendCompiler.build(sourceIdentifier);
+ Object renderUnit = javaCompilerService.compileSource(sourceIdentifier, javaSourceCode);
if (renderUnit instanceof RenderUnit) {
return new SightlyCompiledScript(this, (RenderUnit) renderUnit);
} else {