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

valentyn pushed a commit to branch master-http
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/master-http by this push:
     new b974c9bd01 Added Set handling to GremlinLang (#2705)
b974c9bd01 is described below

commit b974c9bd0189a00f809f921b13445f2a5bfff1e7
Author: Valentyn Kahamlyk <[email protected]>
AuthorDate: Fri Aug 2 15:04:52 2024 -0700

    Added Set handling to GremlinLang (#2705)
---
 .../language/translator/GroovyTranslateVisitor.java     | 13 +++++++++++++
 .../gremlin/process/traversal/GremlinLang.java          | 17 +++++++++++++++--
 .../language/translator/GremlinTranslatorTest.java      |  2 +-
 .../gremlin/process/traversal/GremlinLangTest.java      |  2 +-
 4 files changed, 30 insertions(+), 4 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
index 31891041de..7e5d82f638 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
@@ -140,6 +140,19 @@ public class GroovyTranslateVisitor extends 
TranslateVisitor {
         return null;
     }
 
+    @Override
+    public Void visitGenericLiteralSet(GremlinParser.GenericLiteralSetContext 
ctx) {
+        sb.append("[");
+        for (int i = 0; i < ctx.genericLiteral().size(); i++) {
+            final GremlinParser.GenericLiteralContext genericLiteralContext = 
ctx.genericLiteral(i);
+            visit(genericLiteralContext);
+            if (i < ctx.genericLiteral().size() - 1)
+                sb.append(", ");
+        }
+        sb.append("] as Set");
+        return null;
+    }
+
     @Override
     public Void visitTraversalSourceSpawnMethod_inject(final 
GremlinParser.TraversalSourceSpawnMethod_injectContext ctx) {
         return handleInject(ctx);
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
index b98fe2fa97..1b50dee8c7 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
@@ -192,9 +192,8 @@ public class GremlinLang implements Cloneable, Serializable 
{
             return asString((Map) arg);
         }
 
-        // todo: add set handling here when will be implemented in Grammar
         if (arg instanceof Set) {
-            return asParameter(arg);
+            return asString((Set) arg);
         }
 
         // handle all iterables in similar way
@@ -228,6 +227,20 @@ public class GremlinLang implements Cloneable, 
Serializable {
         return sb.append("]").toString();
     }
 
+    private String asString(final Set<?> set) {
+        final StringBuilder sb = new StringBuilder().append("{");
+
+        final Iterator itty = asIterator(set);
+
+        while (itty.hasNext()) {
+            sb.append(argAsString(itty.next()));
+            if (itty.hasNext())
+                sb.append(",");
+        }
+
+        return sb.append("}").toString();
+    }
+
     // borrowed from Groovy translator
     private String asString(final P<?> p) {
         final StringBuilder sb = new StringBuilder();
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
index f3518f1bc9..b16fbf057d 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
@@ -516,7 +516,7 @@ public class GremlinTranslatorTest {
                             "g.with(string0, set0)",
                             "g.With(\"x\", new HashSet<object> { 1, \"x\" })",
                             "g.With(\"x\", gremlingo.NewSimpleSet(1, \"x\"))",
-                            null,
+                            "g.with('x', [1, 'x'] as Set)",
                             "g.with(\"x\", new HashSet<Object>() {{ add(1); 
add(\"x\"); }})",
                             "g.with_(\"x\", new Set([1, \"x\"]))",
                             "g.with_('x', {1, 'x'})"},
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
index a16051bdc9..47318fafc3 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
@@ -122,7 +122,7 @@ public class GremlinLangTest {
                         "g.withStrategies(new 
SubgraphStrategy(checkAdjacentVertices:true,vertices:__.has(\"name\",P.within([\"josh\",\"lop\",\"ripple\"])))).V()"},
                 {g.inject(Parameter.var("x", "x")).V(Parameter.var("ids", new 
int[]{1, 2, 3})), "g.inject(x).V(ids)"},
                 {newG().inject(Parameter.value("test1"), 
Parameter.value("test2")), "g.inject(_0,_1)"},
-                {newG().inject(new HashSet<>(Arrays.asList(1, 2))), 
"g.inject(_0)"},
+                {newG().inject(new HashSet<>(Arrays.asList(1, 2))), 
"g.inject({1,2})"},
         });
     }
 

Reply via email to