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-java.git

commit 4a6ed26f84545f218133063d7f843282b613c2cb
Author: Radu Cotescu <[email protected]>
AuthorDate: Tue May 29 15:16:48 2018 +0200

    SLING-7688 - [HTL] Add support for the in relational operator
---
 .../sightly/java/compiler/impl/JavaSource.java     |  4 ++
 .../java/compiler/impl/operator/InOpGen.java       | 50 ++++++++++++++++++++++
 .../java/compiler/impl/operator/Operators.java     |  1 +
 3 files changed, 55 insertions(+)

diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/JavaSource.java
 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/JavaSource.java
index 680e340..cebb2ae 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/JavaSource.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/JavaSource.java
@@ -252,6 +252,10 @@ public class JavaSource {
         return property(className, "class").startCall("getName", 
true).endCall();
     }
 
+    public JavaSource instanceOf(String className) {
+        return append(" instanceof ").append(className);
+    }
+
     private StringBuilder indent() {
         for (int i = 0; i < indentLevel; i++) {
             builder.append(INDENT);
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/InOpGen.java
 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/InOpGen.java
new file mode 100644
index 0000000..c73c839
--- /dev/null
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/InOpGen.java
@@ -0,0 +1,50 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements.  See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership.  The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License.  You may obtain a copy of the License at
+ ~
+ ~   http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied.  See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+package org.apache.sling.scripting.sightly.java.compiler.impl.operator;
+
+import 
org.apache.sling.scripting.sightly.compiler.expression.nodes.BinaryOperator;
+import 
org.apache.sling.scripting.sightly.java.compiler.impl.ExpressionTranslator;
+import org.apache.sling.scripting.sightly.java.compiler.impl.JavaSource;
+import 
org.apache.sling.scripting.sightly.java.compiler.impl.SourceGenConstants;
+import org.apache.sling.scripting.sightly.java.compiler.impl.Type;
+
+/**
+ * Operator generator for {@link BinaryOperator#IN}.
+ */
+public class InOpGen implements BinaryOpGen {
+
+    @Override
+    public Type returnType(Type leftType, Type rightType) {
+        return Type.BOOLEAN;
+    }
+
+    @Override
+    public void generate(JavaSource source, ExpressionTranslator visitor, 
TypedNode left, TypedNode right) {
+        source.startMethodCall(BinaryOperator.class.getName(), "inOp");
+        left.getNode().accept(visitor);
+        source.separateArgument();
+        right.getNode().accept(visitor);
+        source.instanceOf("String").conditional();
+        right.getNode().accept(visitor);
+        
source.conditionalBranchSep().objectModel().startCall(SourceGenConstants.ROM_TO_COLLECTION,
 true);
+        right.getNode().accept(visitor);
+        source.endCall();
+        source.endCall();
+    }
+}
diff --git 
a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/Operators.java
 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/Operators.java
index a90e332..c445b29 100644
--- 
a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/Operators.java
+++ 
b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/operator/Operators.java
@@ -51,6 +51,7 @@ public class Operators {
         representationMap.put(BinaryOperator.GEQ, new 
ComparisonOpGen(BinaryOperator.GEQ));
         representationMap.put(BinaryOperator.STRICT_EQ, new 
StrictEqGenOp(false));
         representationMap.put(BinaryOperator.STRICT_NEQ, new 
StrictEqGenOp(true));
+        representationMap.put(BinaryOperator.IN, new InOpGen());
 
         unaryMapping.put(UnaryOperator.LENGTH, LengthOpGen.INSTANCE);
         unaryMapping.put(UnaryOperator.IS_WHITESPACE, 
IsWhiteSpaceGen.INSTANCE);

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to