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

radu pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler.git


The following commit(s) were added to refs/heads/master by this push:
     new 6931b3d  SLING-8012 - Extract an HTL runtime bundle from the existing 
HTL modules
6931b3d is described below

commit 6931b3dadfaf4cb29eb09c41410bf9a7fdcbbfac
Author: Radu Cotescu <[email protected]>
AuthorDate: Thu Oct 18 15:43:15 2018 +0200

    SLING-8012 - Extract an HTL runtime bundle from the existing HTL modules
    
    * removed embedded antlr4-runtime; now depending on external dependency for 
the
    ANTLR runtime
    * delegated calls to the ObjectModel coming from the 
org.apache.sling.scripting.sightly.runtime
    module and deprecated local 
org.apache.sling.scripting.sightly.compiler.util.ObjectModel
    * deprecated org.apache.sling.scripting.sightly.compiler.RuntimeFunction
---
 pom.xml                                            |  14 +-
 .../sightly/compiler/RuntimeFunction.java          |   4 +
 .../compiler/expression/nodes/BinaryOperator.java  |   2 +-
 .../compiler/expression/nodes/RuntimeCall.java     | 147 +++++++++++++++++++++
 .../compiler/expression/nodes/UnaryOperator.java   |   2 +-
 .../compiler/expression/nodes/package-info.java    |   2 +-
 .../sightly/compiler/util/ObjectModel.java         |   4 +-
 .../impl/compiler/frontend/ExpressionParser.java   |   4 +-
 .../compiler/optimization/DeadCodeRemoval.java     |   2 +-
 .../optimization/reduce/ExpressionReducer.java     |   2 +-
 .../sightly/impl/filter/FormatFilter.java          |   6 +-
 .../scripting/sightly/impl/filter/I18nFilter.java  |   3 +-
 .../scripting/sightly/impl/filter/JoinFilter.java  |   3 +-
 .../sightly/impl/filter/URIManipulationFilter.java |   3 +-
 .../scripting/sightly/impl/filter/XSSFilter.java   |   5 +-
 .../sightly/impl/html/dom/MarkupHandler.java       |  13 +-
 .../sightly/impl/plugin/AttributePlugin.java       |   3 +-
 .../sightly/impl/plugin/ElementPlugin.java         |   3 +-
 .../sightly/impl/plugin/IncludePlugin.java         |   7 +-
 .../sightly/impl/plugin/ResourcePlugin.java        |   7 +-
 .../scripting/sightly/impl/plugin/TextPlugin.java  |   7 +-
 .../scripting/sightly/impl/plugin/UsePlugin.java   |   5 +-
 .../impl/frontend/ExpressionWrapperTest.java       |  15 +--
 23 files changed, 200 insertions(+), 63 deletions(-)

diff --git a/pom.xml b/pom.xml
index 3e1a15f..157a433 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
         The versioning scheme defined here corresponds to SLING-7406 
(<module_version>-<htl_specification_version>). Take care when
         releasing to only increase the first part, unless the module provides 
support for a newer version of the HTL specification.
     -->
-    <version>1.0.23-1.4.0-SNAPSHOT</version>
+    <version>1.1.0-1.4.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
     <name>Apache Sling Scripting HTL Compiler</name>
@@ -55,7 +55,7 @@
   </scm>
 
     <properties>
-        <antlr.version>4.1</antlr.version>
+        <antlr.version>4.7.1</antlr.version>
         <jacoco.maven.plugin.version>0.7.9</jacoco.maven.plugin.version>
     </properties>
 
@@ -79,7 +79,6 @@
                 <configuration>
                     <exportScr>true</exportScr>
                     <instructions>
-                        
<Embed-Dependency>antlr4-runtime,org.abego.treelayout.core</Embed-Dependency>
                         <Provide-Capability>
                             io.sightly.compiler; version:Version=1.0,
                             io.sightly.compiler; version:Version=1.1,
@@ -205,10 +204,13 @@
             <artifactId>antlr4-runtime</artifactId>
             <version>${antlr.version}</version>
         </dependency>
+
+        <!-- Needed for the ObjectModel -->
         <dependency>
-            <groupId>org.abego.treelayout</groupId>
-            <artifactId>org.abego.treelayout.core</artifactId>
-            <version>1.0.1</version>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.scripting.sightly.runtime</artifactId>
+            <version>1.0.0-1.4.0-SNAPSHOT</version>
+            <scope>provided</scope>
         </dependency>
 
         <!-- Logging -->
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/RuntimeFunction.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/RuntimeFunction.java
index d04458f..19d2a61 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/RuntimeFunction.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/RuntimeFunction.java
@@ -27,7 +27,11 @@ package org.apache.sling.scripting.sightly.compiler;
  *     that can transpile {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall}s to 
specific runtime function
  *     implementations.
  * </p>
+ *
+ * @deprecated constants are available in {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall}
+ * starting with version 1.2.0 of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes} API.
  */
+@Deprecated
 public final class RuntimeFunction {
 
     /**
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/BinaryOperator.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/BinaryOperator.java
index ff6bb9a..635eb6e 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/BinaryOperator.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/BinaryOperator.java
@@ -21,7 +21,7 @@ package 
org.apache.sling.scripting.sightly.compiler.expression.nodes;
 import java.util.Collection;
 
 import org.apache.sling.scripting.sightly.compiler.SightlyCompilerException;
-import org.apache.sling.scripting.sightly.compiler.util.ObjectModel;
+import org.apache.sling.scripting.sightly.render.ObjectModel;
 
 /**
  * Binary operators used in expressions.
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/RuntimeCall.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/RuntimeCall.java
index f5fb158..76c6ec6 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/RuntimeCall.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/RuntimeCall.java
@@ -21,8 +21,11 @@ package 
org.apache.sling.scripting.sightly.compiler.expression.nodes;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
+import org.apache.sling.scripting.sightly.compiler.SightlyCompilerException;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.NodeVisitor;
 
@@ -31,9 +34,149 @@ import 
org.apache.sling.scripting.sightly.compiler.expression.NodeVisitor;
  */
 public final class RuntimeCall implements ExpressionNode {
 
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will process string
+     *     formatting. The function will receive the following parameters:
+     * </p>
+     * <ol>
+     *     <li>the format String (e.g. 'Hello {0}, welcome to {1}')</li>
+     *     <li>an array of objects that will replace the format 
placeholders</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#122-format.
+     * </p>
+     */
+    public static final String FORMAT = "format";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will process
+     *     i18n. The function will receive the following parameters:
+     * </p>
+     * <ol>
+     *     <li>the String to translate</li>
+     *     <li>optional: locale information</li>
+     *     <li>optional: hint information</li>
+     *     <li>optional (not part of the specification): basename information; 
for more details see
+     *     {@link java.util.ResourceBundle#getBundle(String, 
java.util.Locale)}</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#123-i18n.
+     * </p>
+     */
+    public static final String I18N = "i18n";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will process
+     *     join operations on arrays. The function will receive the following 
parameters:
+     * </p>
+     * <ol>
+     *     <li>the array of objects to join (e.g. [1, 2, 3])</li>
+     *     <li>the join string (e.g. ';')</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#124-array-join.
+     * </p>
+     */
+    public static final String JOIN = "join";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will provide
+     *     URI manipulation support. The function will receive the following 
parameters:
+     * </p>
+     * <ol>
+     *     <li>optional: a URI string to process</li>
+     *     <li>optional: a Map containing URI manipulation options</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#125-uri-manipulation.
+     * </p>
+     */
+    public static final String URI_MANIPULATION = "uriManipulation";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will provide
+     *     XSS escaping and filtering support. The function will receive the 
following parameters:
+     * </p>
+     * <ol>
+     *     <li>the original string to escape / filter</li>
+     *     <li>the context to be applied - see {@link 
org.apache.sling.scripting.sightly.compiler.expression.MarkupContext}</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#121-display-context.
+     * </p>
+     */
+    public static final String XSS = "xss";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will perform
+     *     script execution delegation. The function will receive the 
following parameters:
+     * </p>
+     * <ol>
+     *     <li>optional: the relative or absolute path of the script to 
execute</li>
+     *     <li>optional: a Map of options to perform script include 
processing</li>
+     * </ol>
+     * <p>
+     *     For more details about the supported options check
+     *     
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#228-include.
+     * </p>
+     */
+    public static final String INCLUDE = "include";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will perform
+     *     resource inclusion in the rendering process. The function will 
receive the following parameters:
+     * </p>
+     * <ol>
+     *     <li>optional: a relative or absolute path of the resource to be 
included</li>
+     *     <li>optional: a Map containing the resource processing options</li>
+     * </ol>
+     * <p>
+     *     For more details about the supported options check
+     *     
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#229-resource.
+     * </p>
+     */
+    public static final String RESOURCE = "includeResource";
+
+    /**
+     * <p>
+     *     The name of the {@link 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall} 
function that will provide
+     *     the support for loading Use-API objects. The function will receive 
the following parameters:
+     * </p>
+     * <ol>
+     *     <li>an identifier that allows to discover the Use-API object that 
needs to be loaded</li>
+     *     <li>optional: a Map of the arguments that are passed to the Use-API 
object for initialisation or to provide context</li>
+     * </ol>
+     * <p>
+     *     For more details check 
https://github.com/Adobe-Marketing-Cloud/htl-spec/blob/1.2/SPECIFICATION.md#221-use.
+     * </p>
+     */
+    public static final String USE = "use";
+
+    private static final Set<String> RUNTIME_FUNCTIONS;
+
+    static {
+        RUNTIME_FUNCTIONS = new HashSet<>();
+        RUNTIME_FUNCTIONS.add(USE);
+        RUNTIME_FUNCTIONS.add(RESOURCE);
+        RUNTIME_FUNCTIONS.add(INCLUDE);
+        RUNTIME_FUNCTIONS.add(I18N);
+        RUNTIME_FUNCTIONS.add(XSS);
+        RUNTIME_FUNCTIONS.add(URI_MANIPULATION);
+        RUNTIME_FUNCTIONS.add(JOIN);
+        RUNTIME_FUNCTIONS.add(FORMAT);
+    }
+
     private final String functionName;
     private final List<ExpressionNode> arguments;
 
+
     /**
      * Creates a {@code RuntimeCall} based on a {@code functionName} and an 
array of {@code arguments}.
      *
@@ -51,6 +194,10 @@ public final class RuntimeCall implements ExpressionNode {
      * @param arguments    the arguments passed to the runtime call
      */
     public RuntimeCall(String functionName, List<ExpressionNode> arguments) {
+        if (!RUNTIME_FUNCTIONS.contains(functionName)) {
+            throw new SightlyCompilerException(
+                    String.format("Function %s is not a recognised runtime 
function - %s.", functionName, RUNTIME_FUNCTIONS));
+        }
         this.functionName = functionName;
         this.arguments = new ArrayList<>(arguments);
     }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/UnaryOperator.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/UnaryOperator.java
index 61ea5b4..1b944d6 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/UnaryOperator.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/UnaryOperator.java
@@ -19,7 +19,7 @@
 package org.apache.sling.scripting.sightly.compiler.expression.nodes;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.scripting.sightly.compiler.util.ObjectModel;
+import org.apache.sling.scripting.sightly.render.ObjectModel;
 
 /**
  * Unary operators used in expressions.
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/package-info.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/package-info.java
index 104dfe7..e2c21a3 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/package-info.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/expression/nodes/package-info.java
@@ -19,7 +19,7 @@
  * The {@code org.apache.sling.scripting.sightly.compiler.expression.nodes} 
package exposes the various
  * {@link 
org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode} types.
  */
-@Version("1.1.0")
+@Version("1.2.0")
 package org.apache.sling.scripting.sightly.compiler.expression.nodes;
 
 import org.osgi.annotation.versioning.Version;
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java
 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java
index f852f03..aa7bd8f 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/compiler/util/ObjectModel.java
@@ -38,7 +38,10 @@ import org.slf4j.LoggerFactory;
 
 /**
  * The {@code ObjectModel} class provides various static models for object 
conversion and object property resolution.
+ *
+ * @deprecated This class has been moved to {@link 
org.apache.sling.scripting.sightly.render.ObjectModel}.
  */
+@Deprecated
 public final class ObjectModel {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ObjectModel.class);
@@ -52,7 +55,6 @@ public final class ObjectModel {
     static {
         Set<Class<?>> primitivesBuilder = new HashSet<>();
         primitivesBuilder.add(Boolean.class);
-        primitivesBuilder.add(Boolean.class);
         primitivesBuilder.add(Character.class);
         primitivesBuilder.add(Byte.class);
         primitivesBuilder.add(Short.class);
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java
index a3f24b4..2a6dd4e 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/ExpressionParser.java
@@ -18,7 +18,7 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.compiler.frontend;
 
-import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CharStreams;
 import org.antlr.v4.runtime.CommonTokenStream;
 import org.antlr.v4.runtime.RecognitionException;
 import org.apache.sling.scripting.sightly.compiler.SightlyCompilerException;
@@ -47,7 +47,7 @@ public class ExpressionParser {
     }
 
     private SightlyParser createParser(String string) {
-        SightlyLexer lexer = new SightlyLexer(new ANTLRInputStream(string));
+        SightlyLexer lexer = new SightlyLexer(CharStreams.fromString(string));
         lexer.removeErrorListeners();
         lexer.addErrorListener(new SightlyParserErrorListener());
         CommonTokenStream tokenStream = new CommonTokenStream(lexer);
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/DeadCodeRemoval.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/DeadCodeRemoval.java
index f4601df..0ddbc70 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/DeadCodeRemoval.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/DeadCodeRemoval.java
@@ -35,7 +35,7 @@ import 
org.apache.sling.scripting.sightly.impl.compiler.util.stream.EmitterVisit
 import org.apache.sling.scripting.sightly.impl.compiler.util.stream.Streams;
 import 
org.apache.sling.scripting.sightly.impl.compiler.visitor.StatefulRangeIgnore;
 import 
org.apache.sling.scripting.sightly.impl.compiler.visitor.TrackingVisitor;
-import org.apache.sling.scripting.sightly.compiler.util.ObjectModel;
+import org.apache.sling.scripting.sightly.render.ObjectModel;
 
 /**
  * Removes code under conditionals which are proven to fail. It is probably a 
good idea to run this optimization after running
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/reduce/ExpressionReducer.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/reduce/ExpressionReducer.java
index a721aef..da317fa 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/reduce/ExpressionReducer.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/optimization/reduce/ExpressionReducer.java
@@ -40,7 +40,7 @@ import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.StringConsta
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.TernaryOperator;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.UnaryOperation;
 import org.apache.sling.scripting.sightly.compiler.util.VariableTracker;
-import org.apache.sling.scripting.sightly.compiler.util.ObjectModel;
+import org.apache.sling.scripting.sightly.render.ObjectModel;
 
 /**
  * Try to evaluate constant parts in expressions
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
index 52e00f0..1962dc1 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
@@ -18,7 +18,6 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
@@ -39,9 +38,6 @@ public class FormatFilter extends AbstractFilter {
     }
 
     private FormatFilter() {
-        if (FormatFilterLoader.INSTANCE != null) {
-            throw new IllegalStateException("INSTANCE was already defined.");
-        }
     }
 
     public static FormatFilter getInstance() {
@@ -57,7 +53,7 @@ public class FormatFilter extends AbstractFilter {
             return expression;
         }
         ExpressionNode translation =
-                new RuntimeCall(RuntimeFunction.FORMAT, expression.getRoot(),
+                new RuntimeCall(RuntimeCall.FORMAT, expression.getRoot(),
                         new MapLiteral(getFilterOptions(expression,
                                 FORMAT_OPTION,
                                 TYPE_OPTION,
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
index fdb07cd..5275b13 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
@@ -20,7 +20,6 @@ package org.apache.sling.scripting.sightly.impl.filter;
 
 import java.util.Map;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
@@ -58,7 +57,7 @@ public final class I18nFilter extends AbstractFilter {
             return expression;
         }
         Map <String, ExpressionNode> options = getFilterOptions(expression, 
HINT_OPTION, LOCALE_OPTION, BASENAME_OPTION);
-        ExpressionNode translation = new RuntimeCall(RuntimeFunction.I18N, 
expression.getRoot(), new MapLiteral
+        ExpressionNode translation = new RuntimeCall(RuntimeCall.I18N, 
expression.getRoot(), new MapLiteral
                 (options));
         expression.removeOption(I18N_OPTION);
         expression.getOptions().put(FormatFilter.FORMAT_LOCALE_OPTION, 
options.get(LOCALE_OPTION));
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/JoinFilter.java 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/JoinFilter.java
index 2c7db74..113b3f5 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/JoinFilter.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/JoinFilter.java
@@ -18,7 +18,6 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
@@ -51,7 +50,7 @@ public class JoinFilter extends AbstractFilter {
             return expression;
         }
         ExpressionNode translation =
-                new RuntimeCall(RuntimeFunction.JOIN, expression.getRoot(), 
expression.removeOption(JOIN_OPTION));
+                new RuntimeCall(RuntimeCall.JOIN, expression.getRoot(), 
expression.removeOption(JOIN_OPTION));
         return expression.withNode(translation);
     }
 }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
index 21ae1e0..8ba4b22 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/URIManipulationFilter.java
@@ -20,7 +20,6 @@ package org.apache.sling.scripting.sightly.impl.filter;
 
 import java.util.Map;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
@@ -80,7 +79,7 @@ public class URIManipulationFilter extends AbstractFilter {
                     ADD_QUERY, REMOVE_QUERY);
             if (uriOptions.size() > 0) {
                 ExpressionNode translation =
-                        new RuntimeCall(RuntimeFunction.URI_MANIPULATION, 
expression.getRoot(), new MapLiteral(uriOptions));
+                        new RuntimeCall(RuntimeCall.URI_MANIPULATION, 
expression.getRoot(), new MapLiteral(uriOptions));
                 return expression.withNode(translation);
             }
         }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/XSSFilter.java 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/XSSFilter.java
index 30ac5b2..f693102 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/XSSFilter.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/XSSFilter.java
@@ -18,11 +18,10 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
-import org.apache.sling.scripting.sightly.impl.compiler.Syntax;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.impl.compiler.Syntax;
 
 /**
  * XSS filter implementation.
@@ -52,7 +51,7 @@ public class XSSFilter extends AbstractFilter {
         }
         ExpressionNode context = 
expression.removeOption(Syntax.CONTEXT_OPTION);
         if (context != null) {
-            return expression.withNode(new RuntimeCall(RuntimeFunction.XSS, 
expression.getRoot(), context));
+            return expression.withNode(new RuntimeCall(RuntimeCall.XSS, 
expression.getRoot(), context));
         }
         return expression;
     }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/MarkupHandler.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/MarkupHandler.java
index 8c964a0..c8c4966 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/MarkupHandler.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/html/dom/MarkupHandler.java
@@ -28,7 +28,6 @@ import java.util.Set;
 import java.util.Stack;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.SightlyCompilerException;
 import org.apache.sling.scripting.sightly.compiler.commands.Conditional;
 import org.apache.sling.scripting.sightly.compiler.commands.OutText;
@@ -222,7 +221,7 @@ public class MarkupHandler {
         boolean alreadyEscaped = false;
         if (valueExpression.getRoot() instanceof RuntimeCall) {
             RuntimeCall rc = (RuntimeCall) valueExpression.getRoot();
-            if (RuntimeFunction.XSS.equals(rc.getFunctionName())) {
+            if (RuntimeCall.XSS.equals(rc.getFunctionName())) {
                 alreadyEscaped = true;
             }
         }
@@ -230,8 +229,7 @@ public class MarkupHandler {
         stream.write(new VariableBinding.Start(attrValue, node)); 
//attrContent = <expr>
         if (!alreadyEscaped) {
             Expression contentExpression = valueExpression.withNode(new 
Identifier(attrValue));
-            stream.write(new VariableBinding.Start(attrContent, 
adjustContext(compilerContext, contentExpression, markupContext,
-                    ExpressionContext.ATTRIBUTE).getRoot()));
+            stream.write(new VariableBinding.Start(attrContent, 
adjustContext(compilerContext, contentExpression, markupContext).getRoot()));
             stream.write(
                     new VariableBinding.Start(
                             shouldDisplayAttr,
@@ -473,15 +471,14 @@ public class MarkupHandler {
                 ("script".equals(parentElementName) || 
"style".equals(parentElementName));
     }
 
-    private Expression adjustContext(CompilerContext compilerContext, 
Expression expression, MarkupContext markupContext,
-                                     ExpressionContext expressionContext) {
+    private Expression adjustContext(CompilerContext compilerContext, 
Expression expression, MarkupContext markupContext) {
         ExpressionNode root = expression.getRoot();
         if (root instanceof RuntimeCall) {
             RuntimeCall runtimeCall = (RuntimeCall) root;
-            if (runtimeCall.getFunctionName().equals(RuntimeFunction.XSS)) {
+            if (runtimeCall.getFunctionName().equals(RuntimeCall.XSS)) {
                 return expression;
             }
         }
-        return compilerContext.adjustToContext(expression, markupContext, 
expressionContext);
+        return compilerContext.adjustToContext(expression, markupContext, 
ExpressionContext.ATTRIBUTE);
     }
 }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AttributePlugin.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AttributePlugin.java
index f239571..469f590 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AttributePlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/AttributePlugin.java
@@ -23,7 +23,6 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.Conditional;
 import org.apache.sling.scripting.sightly.compiler.commands.Loop;
 import org.apache.sling.scripting.sightly.compiler.commands.OutText;
@@ -345,7 +344,7 @@ public class AttributePlugin extends AbstractPlugin {
                                                      ExpressionNode hint) {
         if (hint != null) {
             //todo: this is not the indicated way to escape via XSS. Correct 
after modifying the compiler context API
-            return new RuntimeCall(RuntimeFunction.XSS, node, new 
StringConstant(markupContext.getName()), hint);
+            return new RuntimeCall(RuntimeCall.XSS, node, new 
StringConstant(markupContext.getName()), hint);
         }
         return compilerContext.adjustToContext(new Expression(node), 
markupContext, ExpressionContext.ATTRIBUTE).getRoot();
     }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
index 89de6a2..29439b1 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ElementPlugin.java
@@ -18,7 +18,6 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.plugin;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.Conditional;
 import org.apache.sling.scripting.sightly.compiler.commands.OutText;
 import org.apache.sling.scripting.sightly.compiler.commands.OutputVariable;
@@ -95,7 +94,7 @@ public class ElementPlugin extends AbstractPlugin {
         ExpressionNode root = expression.getRoot();
         if (root instanceof RuntimeCall) {
             RuntimeCall runtimeCall = (RuntimeCall) root;
-            if (runtimeCall.getFunctionName().equals(RuntimeFunction.XSS)) {
+            if (runtimeCall.getFunctionName().equals(RuntimeCall.XSS)) {
                 return expression;
             }
         }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/IncludePlugin.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/IncludePlugin.java
index 0a4e331..b5df5bf 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/IncludePlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/IncludePlugin.java
@@ -18,15 +18,14 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.plugin;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.OutputVariable;
-import org.apache.sling.scripting.sightly.impl.compiler.Patterns;
 import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
-import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.Identifier;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.impl.compiler.Patterns;
+import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import 
org.apache.sling.scripting.sightly.impl.compiler.frontend.CompilerContext;
 
 /**
@@ -48,7 +47,7 @@ public class IncludePlugin extends AbstractPlugin {
                 String pathVar = 
compilerContext.generateVariable("includePath");
                 stream.write(new VariableBinding.Start(pathVar, 
expression.getRoot()));
                 stream.write(new VariableBinding.Start(includedContentVar,
-                        new RuntimeCall(RuntimeFunction.INCLUDE, new 
Identifier(pathVar), new MapLiteral(expression.getOptions()))));
+                        new RuntimeCall(RuntimeCall.INCLUDE, new 
Identifier(pathVar), new MapLiteral(expression.getOptions()))));
                 stream.write(new OutputVariable(includedContentVar));
                 stream.write(VariableBinding.END); //end includedContentVar
                 stream.write(VariableBinding.END); //end pathVar
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ResourcePlugin.java
 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ResourcePlugin.java
index aac78bc..f6e7917 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ResourcePlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/ResourcePlugin.java
@@ -21,15 +21,14 @@ package org.apache.sling.scripting.sightly.impl.plugin;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.OutputVariable;
-import org.apache.sling.scripting.sightly.impl.compiler.Patterns;
 import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
-import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.impl.compiler.Patterns;
+import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import 
org.apache.sling.scripting.sightly.impl.compiler.frontend.CompilerContext;
 
 /**
@@ -52,7 +51,7 @@ public class ResourcePlugin extends AbstractPlugin {
             public void beforeChildren(PushStream stream) {
                 String resourceVar = 
compilerContext.generateVariable("resourceContent");
                 stream.write(new VariableBinding.Start(resourceVar,
-                        new RuntimeCall(RuntimeFunction.RESOURCE, 
expression.getRoot(), new MapLiteral(expressionOptions))));
+                        new RuntimeCall(RuntimeCall.RESOURCE, 
expression.getRoot(), new MapLiteral(expressionOptions))));
                 stream.write(new OutputVariable(resourceVar));
                 stream.write(VariableBinding.END);
                 Patterns.beginStreamIgnore(stream);
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TextPlugin.java 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TextPlugin.java
index f7dda86..7fefb4d 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TextPlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/TextPlugin.java
@@ -18,15 +18,14 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.plugin;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.OutputVariable;
+import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
+import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.MarkupContext;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
 import org.apache.sling.scripting.sightly.impl.compiler.Patterns;
-import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
 import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
-import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import 
org.apache.sling.scripting.sightly.impl.compiler.frontend.CompilerContext;
 import org.apache.sling.scripting.sightly.impl.filter.ExpressionContext;
 
@@ -66,7 +65,7 @@ public class TextPlugin extends AbstractPlugin {
         ExpressionNode root = expression.getRoot();
         if (root instanceof RuntimeCall) {
             RuntimeCall runtimeCall = (RuntimeCall) root;
-            if (runtimeCall.getFunctionName().equals(RuntimeFunction.XSS)) {
+            if (runtimeCall.getFunctionName().equals(RuntimeCall.XSS)) {
                 return expression;
             }
         }
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UsePlugin.java 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UsePlugin.java
index ea5bee4..6391db7 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UsePlugin.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/impl/plugin/UsePlugin.java
@@ -18,12 +18,11 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.plugin;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.commands.VariableBinding;
-import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
 import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.RuntimeCall;
+import org.apache.sling.scripting.sightly.impl.compiler.PushStream;
 import 
org.apache.sling.scripting.sightly.impl.compiler.frontend.CompilerContext;
 
 public class UsePlugin extends AbstractPlugin {
@@ -45,7 +44,7 @@ public class UsePlugin extends AbstractPlugin {
             public void beforeElement(PushStream stream, String tagName) {
                 String variableName = decodeVariableName();
                 stream.write(new VariableBinding.Global(variableName,
-                        new RuntimeCall(RuntimeFunction.USE, 
expression.getRoot(), new MapLiteral(expression.getOptions()))));
+                        new RuntimeCall(RuntimeCall.USE, expression.getRoot(), 
new MapLiteral(expression.getOptions()))));
             }
 
             private String decodeVariableName() {
diff --git 
a/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
 
b/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
index 5fffd65..4eea958 100644
--- 
a/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
+++ 
b/src/test/java/org/apache/sling/scripting/sightly/impl/frontend/ExpressionWrapperTest.java
@@ -18,15 +18,12 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.frontend;
 
-import static org.junit.Assert.assertEquals;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.sling.scripting.sightly.compiler.RuntimeFunction;
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.MarkupContext;
@@ -48,6 +45,8 @@ import 
org.apache.sling.scripting.sightly.impl.filter.XSSFilter;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 public class ExpressionWrapperTest {
 
     private static List<Filter> filters;
@@ -75,7 +74,7 @@ public class ExpressionWrapperTest {
         Expression result = wrapper.transform(interpolation, 
MarkupContext.TEXT, ExpressionContext.TEXT);
         List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 
1);
         RuntimeCall i18n = (RuntimeCall) xssArguments.get(0);
-        assertEquals("Expected to I18n runtime function call.", 
RuntimeFunction.I18N, i18n.getFunctionName());
+        assertEquals("Expected to I18n runtime function call.", 
RuntimeCall.I18N, i18n.getFunctionName());
     }
 
     @Test
@@ -91,7 +90,7 @@ public class ExpressionWrapperTest {
         Expression result = wrapper.transform(interpolation, 
MarkupContext.TEXT, ExpressionContext.TEXT);
         List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 
0);
         RuntimeCall format = (RuntimeCall) xssArguments.get(0);
-        assertEquals(RuntimeFunction.FORMAT, format.getFunctionName());
+        assertEquals(RuntimeCall.FORMAT, format.getFunctionName());
     }
 
     @Test
@@ -107,7 +106,7 @@ public class ExpressionWrapperTest {
         Expression result = wrapper.transform(interpolation, 
MarkupContext.TEXT, ExpressionContext.TEXT);
         List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 
0);
         RuntimeCall join = (RuntimeCall) xssArguments.get(0);
-        assertEquals(RuntimeFunction.JOIN, join.getFunctionName());
+        assertEquals(RuntimeCall.JOIN, join.getFunctionName());
     }
 
     @Test
@@ -143,13 +142,13 @@ public class ExpressionWrapperTest {
         Expression result = wrapper.transform(interpolation, 
MarkupContext.TEXT, ExpressionContext.TEXT);
         List<ExpressionNode> xssArguments = runOptionsAndXSSAssertions(result, 
0);
         RuntimeCall join = (RuntimeCall) xssArguments.get(0);
-        assertEquals(RuntimeFunction.URI_MANIPULATION, join.getFunctionName());
+        assertEquals(RuntimeCall.URI_MANIPULATION, join.getFunctionName());
     }
 
     private List<ExpressionNode> runOptionsAndXSSAssertions(Expression result, 
int expectedOptions) {
         assertEquals("Options map size for expression after processing is 
different from expected.", expectedOptions, result.getOptions().size());
         RuntimeCall xss = (RuntimeCall) result.getRoot();
-        assertEquals("Expected XSS escaping applied to expression.", 
RuntimeFunction.XSS, xss.getFunctionName());
+        assertEquals("Expected XSS escaping applied to expression.", 
RuntimeCall.XSS, xss.getFunctionName());
         return xss.getArguments();
     }
 

Reply via email to