spmallette commented on code in PR #3483:
URL: https://github.com/apache/tinkerpop/pull/3483#discussion_r3494460505


##########
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java:
##########
@@ -75,12 +77,29 @@ public GraphTraversal 
visitTraversalSourceSpawnMethod_addE(final GremlinParser.T
      */
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_addV(final 
GremlinParser.TraversalSourceSpawnMethod_addVContext ctx) {
-        if (ctx.stringArgument() != null) {
-            final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(ctx.stringArgument());
-            if (GValue.valueInstanceOf(literalOrVar, String.class)) {
-                return this.traversalSource.addV((GValue<String>) 
literalOrVar);
+        final List<GremlinParser.StringArgumentContext> stringArgs = 
ctx.stringArgument();
+        if (stringArgs != null && !stringArgs.isEmpty()) {
+            if (stringArgs.size() == 1) {
+                final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(0));
+                if (GValue.valueInstanceOf(literalOrVar, String.class)) {
+                    return this.traversalSource.addV((GValue<String>) 
literalOrVar);
+                } else {
+                    return this.traversalSource.addV((String) literalOrVar);
+                }
             } else {
-                return this.traversalSource.addV((String) literalOrVar);
+                // Multi-label: addV("a", "b", ...)
+                final Object firstLiteralOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(0));
+                final String firstLabel = firstLiteralOrVar instanceof String 
? (String) firstLiteralOrVar : ((GValue<String>) firstLiteralOrVar).get();
+                // Create vertex with first label, then add remaining labels
+                GraphTraversal t = this.traversalSource.addV(firstLabel);
+                final Object secondLiteralOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(1));
+                final String secondLabel = secondLiteralOrVar instanceof 
String ? (String) secondLiteralOrVar : ((GValue<String>) 
secondLiteralOrVar).get();
+                final String[] moreLabels = new String[stringArgs.size() - 2];
+                for (int i = 2; i < stringArgs.size(); i++) {
+                    final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(i));
+                    moreLabels[i - 2] = literalOrVar instanceof String ? 
(String) literalOrVar : ((GValue<String>) literalOrVar).get();
+                }
+                return t.addLabel(secondLabel, moreLabels);

Review Comment:
   is this the right way to do this translation? it won't represent exactly 
what the user sent, right? like, `g.addV('dog','pet')` and 
g.addV('dog').addLabel('pet')` do the same thing, but shouldn't we be trying to 
construct the traversal in the fashion the user sent it? Similar issue in 
`TraversalMethodVisitor`.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to