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

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

commit e67d491d7f263f7d73b28ef5c1ed0304467a41e2
Merge: 32a7fa51a1 746fd637d5
Author: Cole-Greer <[email protected]>
AuthorDate: Mon May 5 19:56:43 2025 -0700

    Merge branch '3.8-dev'

 CHANGELOG.asciidoc                                 |   1 +
 docs/src/upgrade/release-3.8.x.asciidoc            |  20 ++
 .../gremlin/language/grammar/ArgumentVisitor.java  |  94 +++-----
 .../grammar/DefaultGremlinBaseVisitor.java         |  46 ++--
 .../language/grammar/GenericLiteralVisitor.java    | 111 ++++-----
 .../grammar/ParseTreeContextCastHelper.java        |   4 +-
 .../language/grammar/StructureElementVisitor.java  |   4 +-
 .../language/grammar/TraversalMethodVisitor.java   | 135 +++++------
 .../grammar/TraversalPredicateVisitor.java         |  32 ++-
 .../grammar/TraversalSourceSelfMethodVisitor.java  |  12 +-
 .../grammar/TraversalSourceSpawnMethodVisitor.java |  14 +-
 .../language/grammar/TraversalStrategyVisitor.java |   2 +-
 .../translator/AnonymizedTranslatorVisitor.java    |   8 +-
 .../translator/DotNetTranslateVisitor.java         |  84 +++----
 .../language/translator/GoTranslateVisitor.java    |  10 +-
 .../translator/GroovyTranslateVisitor.java         |  63 ++++-
 .../language/translator/JavaTranslateVisitor.java  |  26 +--
 .../translator/JavascriptTranslateVisitor.java     |  10 +-
 .../translator/PythonTranslateVisitor.java         |  10 +-
 .../language/translator/TranslateVisitor.java      |   6 +-
 .../language/grammar/ArgumentVisitorTest.java      |   6 +-
 .../grammar/GeneralLiteralVisitorTest.java         |   4 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |   5 +
 gremlin-go/driver/cucumber/gremlin.go              |   5 +
 gremlin-language/src/main/antlr4/Gremlin.g4        | 253 ++++++++++-----------
 25 files changed, 458 insertions(+), 507 deletions(-)

diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
index 26a3d4edcd,178baf1ea8..c90b741606
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
@@@ -99,13 -96,8 +98,13 @@@ public class ArgumentVisitor extends De
      /**
       * Wrapper for visit function for {@code Map} types.
       */
-     public Map parseMap(final 
GremlinParser.GenericLiteralMapNullableArgumentContext ctx) {
-         Object literalOrVar = visitGenericLiteralMapNullableArgument(ctx);
+     public Map parseMap(final GremlinParser.GenericMapNullableArgumentContext 
ctx) {
 -        return (Map) visitGenericMapNullableArgument(ctx);
++        Object literalOrVar = visitGenericMapNullableArgument(ctx);
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) {
 +            return ((GValue<Map>) literalOrVar).get();
 +        } else {
 +            return (Map) literalOrVar;
 +        }
      }
  
      /**
@@@ -281,15 -211,18 +250,18 @@@
          }
      }
  
-     @Override
-     public Object visitGenericLiteralMapNullableArgument(final 
GremlinParser.GenericLiteralMapNullableArgumentContext ctx) {
-         if (ctx.nullLiteral() != null) {
-             return null;
-         } else if (ctx.genericLiteralMap() != null) {
-             return 
antlr.genericVisitor.visitGenericLiteralMap(ctx.genericLiteralMap());
-         } else {
-             return visitVariable(ctx.variable());
+     /**
+      * Parse a string literal varargs, and return a string array
+      */
 -    public String[] parseStringVarargs(final 
GremlinParser.StringNullableArgumentVarargsContext varargsArgumentContext) {
++    public GValue<String>[] parseStringVarargs(final 
GremlinParser.StringNullableArgumentVarargsContext varargsArgumentContext) {
+         if (varargsArgumentContext == null || 
varargsArgumentContext.stringNullableArgument() == null) {
 -            return new String[0];
++            return new GValue[0];
          }
+         return varargsArgumentContext.stringNullableArgument()
+                 .stream()
+                 .filter(Objects::nonNull)
+                 .map(antlr.argumentVisitor::parseString)
 -                .toArray(String[]::new);
++                .toArray(GValue[]::new);
      }
  
      @Override
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
index fd42b946a3,cf3946e550..87c0a328b6
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
@@@ -1302,11 -1290,7 +1298,11 @@@ public class DefaultGremlinBaseVisitor<
        /**
         * {@inheritDoc}
         */
-       @Override public T visitGenericLiteralMap(final 
GremlinParser.GenericLiteralMapContext ctx) { notImplemented(ctx); return null; 
}
+       @Override public T visitGenericMapLiteral(final 
GremlinParser.GenericMapLiteralContext ctx) { notImplemented(ctx); return null; 
}
 +      /**
 +       * {@inheritDoc}
 +       */
 +      @Override public T visitNullableGenericLiteralMap(final 
GremlinParser.NullableGenericLiteralMapContext ctx) { notImplemented(ctx); 
return null; }
        /**
         * {@inheritDoc}
         */
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
index 5b08dd36a5,91cc91b7c5..4910b7739b
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
@@@ -691,32 -680,4 +680,18 @@@ public class GenericLiteralVisitor exte
          else
              return StringEscapeUtils.unescapeJava(stripQuotes(ctx.getText()));
      }
 +
 +    @Override
-     public Object[] visitStringLiteralVarargs(final 
GremlinParser.StringLiteralVarargsContext ctx) {
++    public Object[] visitStringNullableLiteralVarargs(final 
GremlinParser.StringNullableLiteralVarargsContext ctx) {
 +        if (ctx == null) {
 +            return new Object[0];
 +        }
 +        return ctx.children
 +                .stream()
 +                .filter(Objects::nonNull)
-                 .filter(p -> p instanceof 
GremlinParser.StringNullableArgumentContext)
-                 .map(p -> (GremlinParser.StringNullableArgumentContext) p)
-                 .map(antlr.argumentVisitor::visitStringNullableArgument)
++                .filter(p -> p instanceof 
GremlinParser.StringNullableLiteralContext)
++                .map(p -> (GremlinParser.StringNullableLiteralContext) p)
++                .map(antlr.genericVisitor::visitStringNullableLiteral)
 +                .toArray(Object[]::new);
 +    }
- 
-     /**
-      * Parse a string literal varargs, and return a string array
-      */
-     public String[] parseStringVarargsLiterals(final 
GremlinParser.StringLiteralVarargsLiteralsContext varargsContext) {
-         if (varargsContext == null || varargsContext.stringNullableLiteral() 
== null) {
-             return new String[0];
-         }
-         return varargsContext.stringNullableLiteral()
-                 .stream()
-                 .filter(Objects::nonNull)
-                 .map(antlr.genericVisitor::parseString)
-                 .toArray(String[]::new);
-     }
  }
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
index 30bc01f94d,6a45f660ff..552504a372
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
@@@ -104,11 -96,7 +104,11 @@@ public class TraversalMethodVisitor ext
       */
      @Override
      public GraphTraversal visitTraversalMethod_mergeV_Map(final 
GremlinParser.TraversalMethod_mergeV_MapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument());
 -        return 
this.graphTraversal.mergeV(antlr.argumentVisitor.parseMap(ctx.genericMapNullableArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return graphTraversal.mergeV((GValue<Map<Object, Object>>) 
literalOrVar);
 +        else
 +            return graphTraversal.mergeV((Map) literalOrVar);
      }
  
      /**
@@@ -140,13 -128,7 +140,13 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_mergeE_Map(final 
GremlinParser.TraversalMethod_mergeE_MapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument());
 -        return 
this.graphTraversal.mergeE(antlr.argumentVisitor.parseMap(ctx.genericMapNullableArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return graphTraversal.mergeE((GValue<Map<Object, Object>>) 
literalOrVar);
 +        else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && 
((GValue) literalOrVar).get() == null)
 +            return graphTraversal.mergeE(GValue.ofMap(((GValue) 
literalOrVar).getName(), null));
 +        else
 +            return graphTraversal.mergeE((Map) literalOrVar);
      }
  
      /**
@@@ -483,11 -460,7 +483,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_combine_Object(final 
GremlinParser.TraversalMethod_combine_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.combine(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.combine((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.combine(literalOrVar);
      }
  
      /**
@@@ -573,19 -535,7 +573,19 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_difference_Object(final 
GremlinParser.TraversalMethod_difference_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.difference(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.difference((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.difference(literalOrVar);
 +    }
 +
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public Traversal visitTraversalMethod_discard(final 
GremlinParser.TraversalMethod_discardContext ctx) {
 +        return graphTraversal.discard();
      }
  
      /**
@@@ -593,11 -543,7 +593,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_disjunct_Object(final 
GremlinParser.TraversalMethod_disjunct_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.disjunct(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.disjunct((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.disjunct(literalOrVar);
      }
  
      /**
@@@ -802,32 -736,10 +802,32 @@@
      @Override
      public GraphTraversal visitTraversalMethod_hasLabel_String_String(final 
GremlinParser.TraversalMethod_hasLabel_String_StringContext ctx) {
          if (ctx.getChildCount() == 4) {
 -            return 
graphTraversal.hasLabel(antlr.argumentVisitor.parseString(ctx.stringNullableArgument()));
 +            final Object literalOrVar = 
antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument());
 +            if (GValue.valueInstanceOf(literalOrVar, GType.STRING))
 +                return graphTraversal.hasLabel((GValue) literalOrVar);
 +            else
 +                return graphTraversal.hasLabel((String) literalOrVar);
          } else {
 -            return 
graphTraversal.hasLabel(antlr.argumentVisitor.parseString(ctx.stringNullableArgument()),
 -                    
antlr.argumentVisitor.parseStringVarargs(ctx.stringNullableArgumentVarargs()));
 +            Object literalOrVar = 
antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument());
-             Object[] literalOrVars = 
antlr.argumentVisitor.parseStringVarargs(ctx.stringLiteralVarargsArgument());
++            Object[] literalOrVars = 
antlr.argumentVisitor.parseStringVarargs(ctx.stringNullableArgumentVarargs());
 +
 +            if (null == literalOrVar) literalOrVar = GValue.ofString(null, 
null);
 +
 +            // if any are GValue then they all need to be GValue to call 
hasLabel
 +            if (literalOrVar instanceof GValue || 
Arrays.stream(literalOrVars).anyMatch(lov -> lov instanceof GValue)) {
 +                literalOrVar = GValue.ensureGValue(literalOrVar);
 +                literalOrVars = GValue.ensureGValues(literalOrVars);
 +            }
 +
 +            // since we normalized above to gvalue or literal we can just 
test the first arg for gvalue-ness
 +            if (GValue.valueInstanceOf(literalOrVar, GType.STRING)) {
 +                final GValue[] gvalueLiteralOrVars = literalOrVars == null ? 
null : Arrays.stream(literalOrVars).map(o -> (GValue) o).toArray(GValue[]::new);
 +                return graphTraversal.hasLabel((GValue) literalOrVar, 
(GValue[]) gvalueLiteralOrVars);
 +            } else {
 +                // convert object array to string array
 +                final String[] stringLiteralOrVars = literalOrVars == null ? 
null : Arrays.stream(literalOrVars).map(o -> (String) o).toArray(String[]::new);
 +                return graphTraversal.hasLabel((String) literalOrVar, 
stringLiteralOrVars);
 +            }
          }
      }
  
@@@ -887,16 -799,9 +887,16 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_has_String_String_Object(final 
GremlinParser.TraversalMethod_has_String_String_ObjectContext ctx) {
 -        return 
graphTraversal.has(antlr.argumentVisitor.parseString(ctx.stringNullableArgument()),
 -                antlr.genericVisitor.parseString(ctx.stringNullableLiteral()),
 -                
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
 +        final Object literalOrVar = 
antlr.argumentVisitor.visitStringNullableArgument(ctx.stringNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.STRING)) {
 +            return graphTraversal.has((GValue) literalOrVar,
 +                    
antlr.genericVisitor.parseString(ctx.stringNullableLiteral()),
-                     
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()));
++                    
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
 +        } else {
 +            return graphTraversal.has((String) literalOrVar,
 +                    
antlr.genericVisitor.parseString(ctx.stringNullableLiteral()),
-                     
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()));
++                    
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
 +        }
      }
  
      /**
@@@ -973,7 -871,7 +973,7 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_in(final 
GremlinParser.TraversalMethod_inContext ctx) {
-         return 
graphTraversal.in(antlr.argumentVisitor.parseStringVarargs(ctx.stringLiteralVarargsArgument()));
 -        return 
graphTraversal.in(antlr.genericVisitor.parseStringVarargs(ctx.stringNullableLiteralVarargs()));
++        return 
graphTraversal.in(antlr.argumentVisitor.parseStringVarargs(ctx.stringNullableArgumentVarargs()));
      }
  
      /**
@@@ -981,7 -879,7 +981,7 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_inE(final 
GremlinParser.TraversalMethod_inEContext ctx) {
-         return 
graphTraversal.inE(antlr.argumentVisitor.parseStringVarargs(ctx.stringLiteralVarargsArgument()));
 -        return 
graphTraversal.inE(antlr.genericVisitor.parseStringVarargs(ctx.stringNullableLiteralVarargs()));
++        return 
graphTraversal.inE(antlr.argumentVisitor.parseStringVarargs(ctx.stringNullableArgumentVarargs()));
      }
  
      /**
@@@ -989,11 -887,7 +989,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_intersect_Object(final 
GremlinParser.TraversalMethod_intersect_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.intersect(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.intersect((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.intersect(literalOrVar);
      }
  
      /**
@@@ -1140,7 -1024,7 +1140,7 @@@
          } else if (ctx.ioOptionsValues() != null) {
              o = 
WithOptionsVisitor.instance().visitIoOptionsValues(ctx.ioOptionsValues());
          } else {
-             o = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -            o = antlr.argumentVisitor.parseObject(ctx.genericArgument());
++            o = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
          }
          return graphTraversal.with(k, o);
      }
@@@ -1204,11 -1088,7 +1204,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_merge_Object(final 
GremlinParser.TraversalMethod_merge_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.merge(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.merge((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.merge(literalOrVar);
      }
  
      /**
@@@ -1248,11 -1128,8 +1248,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_option_Object_Traversal(final 
GremlinParser.TraversalMethod_option_Object_TraversalContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.option(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()),
 -                antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue)
 +            return graphTraversal.option((GValue) literalOrVar, 
antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
 +        else
 +            return graphTraversal.option(literalOrVar, 
antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
      }
  
      /**
@@@ -1268,11 -1145,9 +1268,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_option_Merge_Map(final 
GremlinParser.TraversalMethod_option_Merge_MapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument());
 -        return graphTraversal.option(
 -                
TraversalEnumParser.parseTraversalEnumFromContext(Merge.class, 
ctx.traversalMerge()),
 -                (Map) 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return 
graphTraversal.option(TraversalEnumParser.parseTraversalEnumFromContext(Merge.class,
 ctx.traversalMerge()), (GValue<Map>) literalOrVar);
 +        else
 +            return 
graphTraversal.option(TraversalEnumParser.parseTraversalEnumFromContext(Merge.class,
 ctx.traversalMerge()), (Map) literalOrVar);
      }
  
      /**
@@@ -1406,11 -1283,7 +1408,11 @@@
       */
      @Override
      public GraphTraversal visitTraversalMethod_product_Object(final 
GremlinParser.TraversalMethod_product_ObjectContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument());
 -        return 
graphTraversal.product(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument());
 +        if (literalOrVar instanceof GValue && ((GValue) 
literalOrVar).getType().isCollection())
 +            return graphTraversal.product((GValue<Object>) literalOrVar);
 +        else
 +            return graphTraversal.product(literalOrVar);
      }
  
      /**
@@@ -1788,7 -1619,7 +1790,7 @@@
      public GraphTraversal visitTraversalMethod_toE(final 
GremlinParser.TraversalMethod_toEContext ctx) {
          return graphTraversal.toE(
                  
TraversalEnumParser.parseTraversalEnumFromContext(Direction.class, 
ctx.traversalDirection()),
-                 
antlr.argumentVisitor.parseStringVarargs(ctx.stringLiteralVarargsArgument()));
 -                
antlr.genericVisitor.parseStringVarargs(ctx.stringNullableLiteralVarargs()));
++                
antlr.argumentVisitor.parseStringVarargs(ctx.stringNullableArgumentVarargs()));
      }
  
      /**
@@@ -1907,10 -1727,10 +1910,10 @@@
      @Override
      public GraphTraversal visitTraversalMethod_valueMap_boolean_String(final 
GremlinParser.TraversalMethod_valueMap_boolean_StringContext ctx) {
          if (ctx.getChildCount() == 4) {
 -            return graphTraversal.valueMap((boolean) 
antlr.genericVisitor.visitBooleanLiteral(ctx.booleanLiteral()));
 +            return 
graphTraversal.valueMap(antlr.genericVisitor.parseBoolean(ctx.booleanLiteral()));
          } else {
-             return 
graphTraversal.valueMap(antlr.genericVisitor.parseBoolean(ctx.booleanLiteral()),
-                     
antlr.genericVisitor.parseStringVarargsLiterals(ctx.stringLiteralVarargsLiterals()));
+             return graphTraversal.valueMap((boolean) 
antlr.genericVisitor.visitBooleanLiteral(ctx.booleanLiteral()),
+                     
antlr.genericVisitor.parseStringVarargs(ctx.stringNullableLiteralVarargs()));
          }
      }
  
@@@ -1985,11 -1821,8 +1988,11 @@@
       */
      @Override
      public Traversal visitTraversalMethod_call_string_map(final 
GremlinParser.TraversalMethod_call_string_mapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapArgument(ctx.genericLiteralMapArgument());
 -        return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 -                                   
antlr.argumentVisitor.parseMap(ctx.genericMapArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapArgument(ctx.genericMapArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()), 
(GValue<Map>) literalOrVar);
 +        else
 +            return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()), 
(Map) literalOrVar);
      }
  
      /**
@@@ -2006,11 -1839,9 +2009,11 @@@
       */
      @Override
      public Traversal visitTraversalMethod_call_string_map_traversal(final 
GremlinParser.TraversalMethod_call_string_map_traversalContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapArgument(ctx.genericLiteralMapArgument());
 -        return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 -                antlr.argumentVisitor.parseMap(ctx.genericMapArgument()),
 -                antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapArgument(ctx.genericMapArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()), 
(GValue<Map>) literalOrVar, 
antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
 +        else
 +            return 
graphTraversal.call(antlr.genericVisitor.parseString(ctx.stringLiteral()), 
(Map) literalOrVar, antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
      }
  
      /**
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSelfMethodVisitor.java
index 63c87aa6f9,96cb97258d..f3a1f10e6f
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSelfMethodVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSelfMethodVisitor.java
@@@ -89,11 -89,11 +89,11 @@@ public class TraversalSourceSelfMethodV
      public GraphTraversalSource 
visitTraversalSourceSelfMethod_withSideEffect(final 
GremlinParser.TraversalSourceSelfMethod_withSideEffectContext ctx) {
          if (ctx.getChildCount() < 8) {
              // with 4 children withSideEffect() was called without a reducer 
specified.
 -            return 
source.withSideEffect(antlr.argumentVisitor.parseString(ctx.stringArgument()),
 +            return 
source.withSideEffect(antlr.genericVisitor.parseString(ctx.stringLiteral()),
-                     
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()));
+                     
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
          } else {
 -            return 
source.withSideEffect(antlr.argumentVisitor.parseString(ctx.stringArgument()),
 +            return 
source.withSideEffect(antlr.genericVisitor.parseString(ctx.stringLiteral()),
-                     
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()),
+                     
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()),
                      
TraversalEnumParser.parseTraversalEnumFromContext(Operator.class, 
ctx.traversalBiFunction().traversalOperator()));
          }
      }
@@@ -138,10 -138,10 +138,10 @@@
      @Override
      public GraphTraversalSource visitTraversalSourceSelfMethod_with(final 
GremlinParser.TraversalSourceSelfMethod_withContext ctx) {
          if (ctx.getChildCount() == 4) {
 -            return 
source.with(antlr.argumentVisitor.parseString(ctx.stringArgument()));
 +            return 
source.with(antlr.genericVisitor.parseString(ctx.stringLiteral()));
          } else {
 -            return 
source.with(antlr.argumentVisitor.parseString(ctx.stringArgument()),
 +            return 
source.with(antlr.genericVisitor.parseString(ctx.stringLiteral()),
-                     
antlr.argumentVisitor.visitGenericLiteralArgument(ctx.genericLiteralArgument()));
+                     
antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
          }
      }
  }
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java
index 4c57cd4a67,e75685ee24..89f4ba910d
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java
@@@ -131,13 -119,7 +131,13 @@@ public class TraversalSourceSpawnMethod
       */
      @Override
      public GraphTraversal visitTraversalSourceSpawnMethod_mergeV_Map(final 
GremlinParser.TraversalSourceSpawnMethod_mergeV_MapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument());
 -        return 
this.traversalSource.mergeV(antlr.argumentVisitor.parseMap(ctx.genericMapNullableArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return this.traversalSource.mergeV((GValue) literalOrVar);
 +        else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && 
((GValue) literalOrVar).get() == null)
 +            return this.traversalSource.mergeV((GValue) 
GValue.ofMap(((GValue) literalOrVar).getName(), null));
 +        else
 +            return this.traversalSource.mergeV((Map) literalOrVar);
      }
  
      /**
@@@ -161,13 -143,7 +161,13 @@@
       */
      @Override
      public GraphTraversal visitTraversalSourceSpawnMethod_mergeE_Map(final 
GremlinParser.TraversalSourceSpawnMethod_mergeE_MapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument());
 -        return 
this.traversalSource.mergeE(antlr.argumentVisitor.parseMap(ctx.genericMapNullableArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapNullableArgument(ctx.genericMapNullableArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return this.traversalSource.mergeE((GValue) literalOrVar);
 +        else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && 
((GValue) literalOrVar).get() == null)
 +            return this.traversalSource.mergeE((GValue) 
GValue.ofMap(((GValue) literalOrVar).getName(), null));
 +        else
 +            return this.traversalSource.mergeE((Map) literalOrVar);
      }
  
      /**
@@@ -191,11 -167,8 +191,11 @@@
       */
      @Override
      public GraphTraversal 
visitTraversalSourceSpawnMethod_call_string_map(final 
GremlinParser.TraversalSourceSpawnMethod_call_string_mapContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapArgument(ctx.genericLiteralMapArgument());
 -        return 
this.traversalSource.call(antlr.argumentVisitor.parseString(ctx.stringArgument()),
 -                antlr.argumentVisitor.parseMap(ctx.genericMapArgument()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapArgument(ctx.genericMapArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return 
this.traversalSource.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 (GValue<Map>) literalOrVar);
 +        else
 +            return 
this.traversalSource.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 (Map) literalOrVar);
      }
  
      /**
@@@ -212,11 -185,9 +212,11 @@@
       */
      @Override
      public GraphTraversal 
visitTraversalSourceSpawnMethod_call_string_map_traversal(final 
GremlinParser.TraversalSourceSpawnMethod_call_string_map_traversalContext ctx) {
-         final Object literalOrVar = 
antlr.argumentVisitor.visitGenericLiteralMapArgument(ctx.genericLiteralMapArgument());
 -        return 
this.traversalSource.call(antlr.argumentVisitor.parseString(ctx.stringArgument()),
 -                antlr.argumentVisitor.parseMap(ctx.genericMapArgument()),
 -                anonymousVisitor.visitNestedTraversal(ctx.nestedTraversal()));
++        final Object literalOrVar = 
antlr.argumentVisitor.visitGenericMapArgument(ctx.genericMapArgument());
 +        if (GValue.valueInstanceOf(literalOrVar, GType.MAP))
 +            return 
this.traversalSource.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 (GValue<Map>) literalOrVar, 
anonymousVisitor.visitNestedTraversal(ctx.nestedTraversal()));
 +        else
 +            return 
this.traversalSource.call(antlr.genericVisitor.parseString(ctx.stringLiteral()),
 (Map) literalOrVar, 
anonymousVisitor.visitNestedTraversal(ctx.nestedTraversal()));
      }
  
      /**
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
index cfec1ba268,23fe336e43..575af5cd8f
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java
@@@ -327,10 -313,10 +313,10 @@@ public class DotNetTranslateVisitor ext
          final String step = ctx.getChild(0).getText();
          sb.append(convertToPascalCase(step));
          sb.append("<object>").append("(");
 -        visit(ctx.stringArgument());
 +        visit(ctx.stringLiteral());
          sb.append(", ");
          sb.append("(IDictionary<object, object>) ");
-         visit(ctx.genericLiteralMapArgument());
+         visit(ctx.genericMapArgument());
          sb.append(")");
          return null;
      }
@@@ -353,10 -339,10 +339,10 @@@
          final String step = ctx.getChild(0).getText();
          sb.append(convertToPascalCase(step));
          sb.append("<object>").append("(");
 -        visit(ctx.stringArgument());
 +        visit(ctx.stringLiteral());
          sb.append(", ");
          sb.append("(IDictionary<object, object>) ");
-         visit(ctx.genericLiteralMapArgument());
+         visit(ctx.genericMapArgument());
          sb.append(", ");
          sb.append("(ITraversal) ");
          visit(ctx.nestedTraversal());
@@@ -738,41 -724,10 +724,41 @@@
              sb.append(")");
              return null;
          } else {
 -            return super.visitTraversalMethod_hasLabel_String_String(ctx);
 +            final String step = ctx.getChild(0).getText();
 +            sb.append(convertToPascalCase(step));
 +            sb.append("(");
 +            tryAppendCastToString(ctx.stringNullableArgument());
 +            visit(ctx.stringNullableArgument());
 +
 +            // more arguments to come
-             if 
(!ctx.stringLiteralVarargsArgument().stringNullableArgument().isEmpty()) {
-                 
ctx.stringLiteralVarargsArgument().stringNullableArgument().forEach(sna -> {
++            if 
(!ctx.stringNullableArgumentVarargs().stringNullableArgument().isEmpty()) {
++                
ctx.stringNullableArgumentVarargs().stringNullableArgument().forEach(sna -> {
 +                    sb.append(", ");
 +                    tryAppendCastToString(sna);
 +                    visit(sna);
 +                });
 +            }
 +
 +            sb.append(")");
 +            return null;
          }
      }
  
 +    @Override
-     public Void visitStringLiteralVarargs(final 
GremlinParser.StringLiteralVarargsContext ctx) {
++    public Void visitStringNullableLiteralVarargs(final 
GremlinParser.StringNullableLiteralVarargsContext ctx) {
 +        for (int ix = 0; ix < ctx.getChildCount(); ix++) {
 +            final ParseTree pt = ctx.getChild(ix);
 +            if (pt instanceof GremlinParser.StringNullableArgumentContext) {
 +                GremlinParser.StringNullableArgumentContext sna = 
(GremlinParser.StringNullableArgumentContext) pt;
 +                tryAppendCastToString(sna);
 +                visit(sna);
 +            } else {
 +                visit(pt);
 +            }
 +        };
 +        return null;
 +    }
 +
      @Override
      public Void visitTraversalMethod_index(final 
GremlinParser.TraversalMethod_indexContext ctx) {
          return handleGenerics(ctx);
@@@ -900,24 -855,9 +886,24 @@@
          return null;
      }
  
 +    @Override
 +    public Void visitTraversalMethod_option_Object_Traversal(final 
GremlinParser.TraversalMethod_option_Object_TraversalContext ctx) {
-         if (ctx.genericLiteralArgument().genericLiteral() != null && 
ctx.genericLiteralArgument().genericLiteral().traversalMerge() != null) {
++        if (ctx.genericArgument().genericLiteral() != null && 
ctx.genericArgument().genericLiteral().traversalMerge() != null) {
 +            visit(ctx.getChild(0));
 +            sb.append("(");
-             visit(ctx.genericLiteralArgument());
++            visit(ctx.genericArgument());
 +            sb.append(", ");
 +            sb.append("(ITraversal) ");
 +            visit(ctx.nestedTraversal());
 +            sb.append(")");
 +            return null;
 +        } else {
 +            return super.visitTraversalMethod_option_Object_Traversal(ctx);
 +        }
 +    }
 +
      @Override
      public Void visitTraversalMethod_option_Merge_Traversal(final 
GremlinParser.TraversalMethod_option_Merge_TraversalContext ctx) {
 -        // call is ambiguous without an explicit cast
          visit(ctx.getChild(0));
          sb.append("(");
          visit(ctx.traversalMerge());
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
index 3430537ad1,ccf1402706..a6a7901fb9
--- 
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
@@@ -188,40 -184,13 +188,40 @@@ public class GroovyTranslateVisitor ext
          return handleInject(ctx);
      }
  
 -    /*
 -    * very special handling for inject with second `null` argument like 
g.inject(1, null)
 +    @Override
 +    public Void visitTraversalMethod_hasLabel_String_String(final 
GremlinParser.TraversalMethod_hasLabel_String_StringContext ctx) {
 +        // special handling for resolving ambiguous invocations of the 
hasLabel() step. coerces to the string form
 +        if (ctx.getChildCount() > 4 && 
ctx.getChild(2).getText().equals("null")) {
-             final GremlinParser.StringLiteralVarargsArgumentContext varArgs = 
ctx.stringLiteralVarargsArgument();
++            final GremlinParser.StringNullableArgumentVarargsContext varArgs 
= ctx.stringNullableArgumentVarargs();
 +            sb.append(ctx.getChild(0).getText());
 +            sb.append("((String) null, ");
 +
 +            for (int i = 0; i < varArgs.getChildCount(); i += 2) {
 +                if (varArgs.getChild(i).getText().equals("null")) {
 +                    sb.append("(String) null");
 +                } else {
 +                    visit(varArgs.getChild(i));
 +                }
 +
 +                if (i < varArgs.getChildCount() - 1) {
 +                    sb.append(", ");
 +                }
 +            }
 +
 +            sb.append(")");
 +            return null;
 +        }
 +
 +        return visitChildren(ctx);
 +    }
 +
 +    /**
 +    * Special handling for inject with second `null` argument like 
g.inject(1, null)
      * inject() ends up being ambiguous with groovy's jdk extension of 
inject(Object initialValue, Closure closure)
      */
      private Void handleInject(final ParserRuleContext ctx) {
-         if (ctx.getChildCount() > 3 && ctx.getChild(2) instanceof 
GenericLiteralVarargsContext) {
-             final GenericLiteralVarargsContext varArgs = 
(GenericLiteralVarargsContext) ctx.getChild(2);
 -        if (ctx.getChildCount() > 3 && ctx.getChild(2) instanceof 
GremlinParser.GenericLiteralVarargsContext) {
 -            final GremlinParser.GenericLiteralVarargsContext varArgs = 
(GremlinParser.GenericLiteralVarargsContext) ctx.getChild(2);
++        if (ctx.getChildCount() > 3 && ctx.getChild(2) instanceof 
GremlinParser.GenericArgumentVarargsContext) {
++            final GremlinParser.GenericArgumentVarargsContext varArgs = 
(GremlinParser.GenericArgumentVarargsContext) ctx.getChild(2);
              if (varArgs.getChildCount() > 2 && 
"null".equals(varArgs.getChild(2).getText())) {
                  sb.append(ctx.getChild(0).getText());
                  sb.append("(");
@@@ -244,4 -213,4 +244,55 @@@
  
          return visitChildren(ctx);
      }
++
++    @Override
++    public Void visitTraversalMethod_option_Merge_Map(final 
GremlinParser.TraversalMethod_option_Merge_MapContext ctx){
++        sb.append("option(");
++        visit(ctx.traversalMerge());
++        sb.append(", ");
++        tryCastMapNullableArgument(ctx.genericMapNullableArgument());
++        sb.append(")");
++        return null;
++    }
++
++    @Override
++    public Void visitTraversalMethod_mergeV_Map(final 
GremlinParser.TraversalMethod_mergeV_MapContext ctx){
++        sb.append("mergeV(");
++        tryCastMapNullableArgument(ctx.genericMapNullableArgument());
++        sb.append(")");
++        return null;
++    }
++
++    @Override
++    public Void visitTraversalSourceSpawnMethod_mergeV_Map(final 
GremlinParser.TraversalSourceSpawnMethod_mergeV_MapContext ctx){
++        sb.append("mergeV(");
++        tryCastMapNullableArgument(ctx.genericMapNullableArgument());
++        sb.append(")");
++        return null;
++    }
++
++    @Override
++    public Void visitTraversalMethod_mergeE_Map(final 
GremlinParser.TraversalMethod_mergeE_MapContext ctx){
++        sb.append("mergeE(");
++        tryCastMapNullableArgument(ctx.genericMapNullableArgument());
++        sb.append(")");
++        return null;
++    }
++
++    @Override
++    public Void visitTraversalSourceSpawnMethod_mergeE_Map(final 
GremlinParser.TraversalSourceSpawnMethod_mergeE_MapContext ctx){
++        sb.append("mergeE(");
++        tryCastMapNullableArgument(ctx.genericMapNullableArgument());
++        sb.append(")");
++        return null;
++    }
++
++    private void 
tryCastMapNullableArgument(GremlinParser.GenericMapNullableArgumentContext ctx) 
{
++        if (ctx.genericMapNullableLiteral() != null
++                && ctx.genericMapNullableLiteral().nullLiteral() != null) {
++            sb.append("(Map) null");
++        } else {
++            visit(ctx);
++        }
++    }
  }
diff --cc 
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
index 372f9c1ef8,8211b16121..eaf830d094
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/PythonTranslateVisitor.java
@@@ -103,8 -103,30 +103,8 @@@ public class PythonTranslateVisitor ext
          return null;
      }
  
 -    @Override
 -    public Void visitTraversalSourceSelfMethod_withoutStrategies(final 
GremlinParser.TraversalSourceSelfMethod_withoutStrategiesContext ctx) {
 -        
sb.append(SymbolHelper.toPython(ctx.getChild(0).getText())).append("(*[");
 -        visit(ctx.classType());
 -
 -        if (ctx.classTypeList() != null && 
ctx.classTypeList().getChildCount() > 0) {
 -            sb.append(", ");
 -            visit(ctx.classTypeList());
 -        }
 -
 -        sb.append("])");
 -        return null;
 -    }
 -
 -    @Override
 -    public Void visitClassType(final GremlinParser.ClassTypeContext ctx) {
 -        final Optional<? extends Class<? extends TraversalStrategy>> strategy 
= TraversalStrategies.GlobalCache.getRegisteredStrategyClass(ctx.getText());
 -        final String fqcn = 
strategy.map(Class::getName).orElse(ctx.getText());
 -        sb.append("GremlinType('").append(fqcn).append("')");
 -        return null;
 -    }
 -
      @Override
-     public Void visitGenericLiteralMap(final 
GremlinParser.GenericLiteralMapContext ctx) {
+     public Void visitGenericMapLiteral(final 
GremlinParser.GenericMapLiteralContext ctx) {
          sb.append("{ ");
          for (int i = 0; i < ctx.mapEntry().size(); i++) {
              final GremlinParser.MapEntryContext mapEntryContext = 
ctx.mapEntry(i);
diff --cc gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 690f2750fc,bf205d5068..7e908ef14f
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@@ -1703,8 -1686,8 +1703,13 @@@ namespace Gremlin.Net.IntegrationTest.G
                 {"g_VX1X_out_out_out_tree", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out().Out().Out().Tree<object>()}}, 
                 {"g_VX1X_outE_inV_bothE_otherV_tree", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree<object>()}}, 
                 {"g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree<object>().By("name").By(T.Label)}},
 
++<<<<<<< HEAD
 +               {"g_injectXUUIDX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>(Guid.Parse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
++>>>>>>> 3.8-dev
++=======
+                {"g_injectXUUIDX47af10b_58cc_4372_a567_0f02b2f3d479XX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.Inject<object>(Guid.Parse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
+                {"g_injectXUUIDXXX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>(Guid.NewGuid())}}, 
 +>>>>>>> 3.8-dev
              };
  
          public static ITraversal UseTraversal(string scenarioName, 
GraphTraversalSource g, IDictionary<string, object> parameters)
diff --cc gremlin-go/driver/cucumber/gremlin.go
index 934010d1da,8d6dc28d90..9d4fe35f8b
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@@ -1677,8 -1656,8 +1677,13 @@@ var translationMap = map[string][]func(
      "g_VX1X_out_out_out_tree": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Out().Out().Out().Tree()}}, 
      "g_VX1X_outE_inV_bothE_otherV_tree": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree()}}, 
      "g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree().By("name").By(gremlingo.T.Label)}},
 
++<<<<<<< HEAD
 +    "g_injectXUUIDX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(uuid.MustParse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
 +>>>>>>> 3.8-dev
++=======
+     "g_injectXUUIDX47af10b_58cc_4372_a567_0f02b2f3d479XX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.Inject(uuid.MustParse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
+     "g_injectXUUIDXXX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(uuid.New())}}, 
++>>>>>>> 3.8-dev
  }
  
     func GetTraversal(scenarioName string, g *gremlingo.GraphTraversalSource, 
parameters map[string]interface{}) (*gremlingo.GraphTraversal, error) {
diff --cc gremlin-language/src/main/antlr4/Gremlin.g4
index 9d71e117c7,3d5be8a698..030a2b7402
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@@ -80,8 -80,8 +80,8 @@@ traversalSourceSelfMethod_withSac
      ;
  
  traversalSourceSelfMethod_withSideEffect
-     : K_WITHSIDEEFFECT LPAREN stringLiteral COMMA genericLiteralArgument 
RPAREN
-     | K_WITHSIDEEFFECT LPAREN stringLiteral COMMA genericLiteralArgument 
COMMA traversalBiFunction RPAREN
 -    : K_WITHSIDEEFFECT LPAREN stringArgument COMMA genericArgument RPAREN
 -    | K_WITHSIDEEFFECT LPAREN stringArgument COMMA genericArgument COMMA 
traversalBiFunction RPAREN
++    : K_WITHSIDEEFFECT LPAREN stringLiteral COMMA genericArgument RPAREN
++    | K_WITHSIDEEFFECT LPAREN stringLiteral COMMA genericArgument COMMA 
traversalBiFunction RPAREN
      ;
  
  traversalSourceSelfMethod_withStrategies
@@@ -93,8 -93,8 +93,8 @@@ traversalSourceSelfMethod_withoutStrate
      ;
  
  traversalSourceSelfMethod_with
 -    : K_WITH LPAREN stringArgument RPAREN
 -    | K_WITH LPAREN stringArgument COMMA genericArgument RPAREN
 +    : K_WITH LPAREN stringLiteral RPAREN
-     | K_WITH LPAREN stringLiteral COMMA genericLiteralArgument RPAREN
++    | K_WITH LPAREN stringLiteral COMMA genericArgument RPAREN
      ;
  
  traversalSourceSpawnMethod
@@@ -149,10 -149,10 +149,10 @@@ traversalSourceSpawnMethod_merge
  
  traversalSourceSpawnMethod_call
      : K_CALL LPAREN RPAREN #traversalSourceSpawnMethod_call_empty
 -    | K_CALL LPAREN stringArgument RPAREN 
#traversalSourceSpawnMethod_call_string
 -    | K_CALL LPAREN stringArgument COMMA genericMapArgument RPAREN 
#traversalSourceSpawnMethod_call_string_map
 -    | K_CALL LPAREN stringArgument COMMA nestedTraversal RPAREN 
#traversalSourceSpawnMethod_call_string_traversal
 -    | K_CALL LPAREN stringArgument COMMA genericMapArgument COMMA 
nestedTraversal RPAREN #traversalSourceSpawnMethod_call_string_map_traversal
 +    | K_CALL LPAREN stringLiteral RPAREN 
#traversalSourceSpawnMethod_call_string
-     | K_CALL LPAREN stringLiteral COMMA genericLiteralMapArgument RPAREN 
#traversalSourceSpawnMethod_call_string_map
++    | K_CALL LPAREN stringLiteral COMMA genericMapArgument RPAREN 
#traversalSourceSpawnMethod_call_string_map
 +    | K_CALL LPAREN stringLiteral COMMA nestedTraversal RPAREN 
#traversalSourceSpawnMethod_call_string_traversal
-     | K_CALL LPAREN stringLiteral COMMA genericLiteralMapArgument COMMA 
nestedTraversal RPAREN #traversalSourceSpawnMethod_call_string_map_traversal
++    | K_CALL LPAREN stringLiteral COMMA genericMapArgument COMMA 
nestedTraversal RPAREN #traversalSourceSpawnMethod_call_string_map_traversal
      ;
  
  traversalSourceSpawnMethod_union
@@@ -467,15 -466,11 +467,15 @@@ traversalMethod_dedu
      ;
  
  traversalMethod_difference
-     : K_DIFFERENCE LPAREN genericLiteralArgument RPAREN 
#traversalMethod_difference_Object
+     : K_DIFFERENCE LPAREN genericArgument RPAREN 
#traversalMethod_difference_Object
      ;
  
 +traversalMethod_discard
 +    : 'discard' LPAREN RPAREN
 +    ;
 +
  traversalMethod_disjunct
-     : K_DISJUNCT LPAREN genericLiteralArgument RPAREN 
#traversalMethod_disjunct_Object
+     : K_DISJUNCT LPAREN genericArgument RPAREN 
#traversalMethod_disjunct_Object
      ;
  
  traversalMethod_drop
@@@ -580,11 -575,11 +580,11 @@@ traversalMethod_identit
      ;
  
  traversalMethod_in
-     : K_IN LPAREN stringLiteralVarargsArgument RPAREN
 -    : K_IN LPAREN stringNullableLiteralVarargs RPAREN
++    : K_IN LPAREN stringNullableArgumentVarargs RPAREN
      ;
  
  traversalMethod_inE
-     : K_INE LPAREN stringLiteralVarargsArgument RPAREN
 -    : K_INE LPAREN stringNullableLiteralVarargs RPAREN
++    : K_INE LPAREN stringNullableArgumentVarargs RPAREN
      ;
  
  traversalMethod_intersect
@@@ -884,7 -878,7 +883,7 @@@ traversalMethod_t
      ;
  
  traversalMethod_toE
-     : K_TOE LPAREN traversalDirection (COMMA stringLiteralVarargsArgument)? 
RPAREN
 -    : K_TOE LPAREN traversalDirection (COMMA stringNullableLiteralVarargs)? 
RPAREN
++    : K_TOE LPAREN traversalDirection (COMMA stringNullableArgumentVarargs)? 
RPAREN
      ;
  
  traversalMethod_toLower
@@@ -1506,13 -1497,8 +1502,13 @@@ genericMapNullableArgumen
      | variable
      ;
  
 +nullableGenericLiteralMap
-     : genericLiteralMap
++    : genericMapLiteral
 +    | nullLiteral
 +    ;
 +
  structureVertexArgument
-     : structureVertex
+     : structureVertexLiteral
      | variable
      ;
  

Reply via email to