You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2021/12/18 19:05:55 UTC

[tinkerpop] branch vars created (now e964e04)

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

spmallette pushed a change to branch vars
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


      at e964e04  wip

This branch includes the following new commits:

     new 72134e7  Refactored grammar parser to better keep context of GremlinAntlrToJava
     new e964e04  wip

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[tinkerpop] 02/02: wip

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e964e04362a9543526a6c17b074a5f1058f97ce2
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Sat Dec 18 14:05:35 2021 -0500

    wip
---
 .../language/grammar/GenericLiteralVisitor.java    |  18 +
 .../language/grammar/GremlinAntlrToJava.java       |  21 +-
 .../language/grammar/GremlinBaseVisitor.java       |   6 +
 .../language/grammar/GremlinQueryParser.java       |   6 +
 .../language/grammar/TraversalMethodVisitor.java   |   2 +-
 .../grammar/UnboundIdentifierException.java        |  35 ++
 .../grammar/TraversalMethodVisitorTest.java        |  10 +-
 .../language/grammar/VariableVisitorTest.java      |  69 +++
 gremlin-language/src/main/antlr4/Gremlin.g4        | 657 ++++++++++++++++++++-
 9 files changed, 813 insertions(+), 11 deletions(-)

diff --git 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
index 66ff774..f7fe412 100644
--- 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
@@ -54,6 +54,17 @@ public class GenericLiteralVisitor extends GremlinBaseVisitor<Object> {
      * Parse a string literal context and return the string literal
      */
     public String getStringLiteral(final GremlinParser.StringLiteralContext stringLiteral) {
+        return getStringLiteral(stringLiteral, null);
+    }
+
+    /**
+     * Parse a string literal context and return the string literal.
+     */
+    public String getStringLiteral(final GremlinParser.StringLiteralContext stringLiteral, final GremlinAntlrToJava antlr) {
+        if (antlr != null && stringLiteral.variable() != null) {
+            final String varName = stringLiteral.variable().getText();
+            return tryBindings(antlr, varName);
+        }
         return (String) visitStringLiteral(stringLiteral);
     }
 
@@ -501,4 +512,11 @@ public class GenericLiteralVisitor extends GremlinBaseVisitor<Object> {
         return result;
     }
 
+    private static <T> T tryBindings(final GremlinAntlrToJava antlr, final String varName) {
+        if (!antlr.bindings.containsKey(varName)) {
+            throw new UnboundIdentifierException(varName);
+        }
+
+        return (T) antlr.bindings.get(varName);
+    }
 }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
index 02a6772..cd9473a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
@@ -29,6 +29,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 
+import java.util.Collections;
+import java.util.Map;
 import java.util.function.Supplier;
 
 /**
@@ -74,6 +76,8 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
      */
     final Supplier<GraphTraversal<?,?>> createAnonymous;
 
+    final Map<String, Object> bindings;
+
     /**
      * Constructs a new instance and is bound to an {@link EmptyGraph}. This form of construction is helpful for
      * generating {@link Bytecode} or for various forms of testing. {@link Traversal} instances constructed from this
@@ -84,6 +88,16 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
     }
 
     /**
+     * Constructs a new instance and is bound to an {@link EmptyGraph} and a set of bindings. This form of construction
+     * is helpful for generating {@link Bytecode} or for various forms of testing. {@link Traversal} instances
+     * constructed from this form will not be capable of iterating. Assumes that "g" is the name of the
+     * {@link GraphTraversalSource}.
+     */
+    public GremlinAntlrToJava(final Map<String, Object> bindings) {
+        this(GraphTraversalSourceVisitor.TRAVERSAL_ROOT, EmptyGraph.instance(), __::start, EmptyGraph.instance().traversal(), bindings);
+    }
+
+    /**
      * Constructs a new instance that is bound to the specified {@link Graph} instance. Assumes that "g" is the name
      * of the {@link GraphTraversalSource}.
      */
@@ -113,7 +127,7 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
      * {@link Traversal} from this "g" rather than from a fresh one constructed from the {@link Graph} instance.
      */
     protected GremlinAntlrToJava(final GraphTraversalSource g, final Supplier<GraphTraversal<?,?>> createAnonymous) {
-        this(GraphTraversalSourceVisitor.TRAVERSAL_ROOT, g.getGraph(), createAnonymous, g);
+        this(GraphTraversalSourceVisitor.TRAVERSAL_ROOT, g.getGraph(), createAnonymous, g, null);
     }
 
     /**
@@ -124,7 +138,7 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
      */
     protected GremlinAntlrToJava(final String traversalSourceName, final Graph graph,
                                  final Supplier<GraphTraversal<?,?>> createAnonymous) {
-        this(traversalSourceName, graph, createAnonymous, null);
+        this(traversalSourceName, graph, createAnonymous, null, null);
     }
 
     /**
@@ -136,7 +150,7 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
      */
     protected GremlinAntlrToJava(final String traversalSourceName, final Graph graph,
                                  final Supplier<GraphTraversal<?,?>> createAnonymous,
-                                 final GraphTraversalSource g) {
+                                 final GraphTraversalSource g, final Map<String, Object> bindings) {
         this.g = g;
         this.graph = graph;
         this.gvisitor = new GraphTraversalSourceVisitor(
@@ -146,6 +160,7 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
         this.genericLiteralVisitor = new GenericLiteralVisitor(this);
         this.traversalStrategyVisitor = new TraversalStrategyVisitor(this);
         this.createAnonymous = createAnonymous;
+        this.bindings = null == bindings ? Collections.emptyMap() : bindings;
     }
 
     /**
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
index faef075..96587d9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
@@ -1503,4 +1503,10 @@ public class GremlinBaseVisitor<T> extends AbstractParseTreeVisitor<T> implement
 	public T visitIoOptionsStringConstant(final GremlinParser.IoOptionsStringConstantContext ctx) {
 		notImplemented(ctx); return null;
 	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public T visitVariable(final GremlinParser.VariableContext ctx) { notImplemented(ctx); return null; }
 }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinQueryParser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinQueryParser.java
index 49a3469..c369200 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinQueryParser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinQueryParser.java
@@ -25,10 +25,16 @@ import org.antlr.v4.runtime.atn.PredictionMode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Map;
+
 public class GremlinQueryParser {
     private static final Logger log = LoggerFactory.getLogger(GremlinQueryParser.class);
     private static final GremlinErrorListener errorListener = new GremlinErrorListener();
 
+    public static Object parse(final String query, final Map<String, Object> bindings) throws Exception {
+        return parse(query, new GremlinAntlrToJava(bindings));
+    }
+
     public static Object parse(final String query) throws Exception {
         return parse(query, new GremlinAntlrToJava());
     }
diff --git 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
index 3744ed6..4803254 100644
--- 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
@@ -100,7 +100,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
         final int childIndexOfParameterEdgeLabel = 2;
         final GremlinParser.StringLiteralContext stringLiteralContext =
                 (GremlinParser.StringLiteralContext) (ctx.getChild(childIndexOfParameterEdgeLabel));
-        return this.graphTraversal.addE(antlr.genericLiteralVisitor.getStringLiteral(stringLiteralContext));
+        return this.graphTraversal.addE(antlr.genericLiteralVisitor.getStringLiteral(stringLiteralContext, antlr));
     }
 
     /**
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/UnboundIdentifierException.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/UnboundIdentifierException.java
new file mode 100644
index 0000000..36911ad
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/UnboundIdentifierException.java
@@ -0,0 +1,35 @@
+/*
+ * 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.tinkerpop.gremlin.language.grammar;
+
+/**
+ * Thrown when a variable is identified during parsing that cannot be found among bindings.
+ */
+public class UnboundIdentifierException extends GremlinParserException {
+    private final String variableName;
+
+    public UnboundIdentifierException(final String variableName) {
+        super(String.format("Could not find variable [%s] in bindings", variableName));
+        this.variableName = variableName;
+    }
+
+    public String getVariableName() {
+        return variableName;
+    }
+}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java
index 6bad0e9..17841ab 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitorTest.java
@@ -52,20 +52,20 @@ import static org.junit.Assert.assertEquals;
 public class TraversalMethodVisitorTest {
 
     private final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
-    private GremlinAntlrToJava antlrToLaunguage;
+    private GremlinAntlrToJava antlrToLanguage;
 
-    private Object eval(String query) {
+    private Object eval(final String query) {
         final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(query));
         final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
-        return antlrToLaunguage.visit(parser.queryList());
+        return antlrToLanguage.visit(parser.queryList());
     }
 
     @Before
     public void setup() throws Exception {
-        antlrToLaunguage = new GremlinAntlrToJava();
+        antlrToLanguage = new GremlinAntlrToJava();
     }
     
-    private void compare(Object expected, Object actual) {
+    private void compare(final Object expected, final Object actual) {
         assertEquals(((DefaultGraphTraversal) expected).asAdmin().getBytecode(),
                 ((DefaultGraphTraversal) actual).asAdmin().getBytecode());
     }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/VariableVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/VariableVisitorTest.java
new file mode 100644
index 0000000..46789f9
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/VariableVisitorTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.tinkerpop.gremlin.language.grammar;
+
+import org.antlr.v4.runtime.CharStreams;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class VariableVisitorTest {
+
+    private final GraphTraversalSource g = traversal().withEmbedded(EmptyGraph.instance());
+
+    private Object eval(final String query, final GremlinAntlrToJava antlrToLanguage) {
+        final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(query));
+        final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
+        return antlrToLanguage.visit(parser.queryList());
+    }
+
+    private void compare(final Object expected, final Object actual) {
+        assertEquals(((DefaultGraphTraversal) expected).asAdmin().getBytecode(),
+                ((DefaultGraphTraversal) actual).asAdmin().getBytecode());
+    }
+
+    @Test
+    public void shouldReplaceVariable() {
+        final Map<String,Object> bindings = new HashMap<>();
+        bindings.put("xxx", "knows");
+        final GremlinAntlrToJava antlr = new GremlinAntlrToJava(bindings);
+        compare(g.V().addE("knows"), eval("g.V().addE(xxx)", antlr));
+    }
+
+    @Test
+    public void shouldFailToReplaceVariable() {
+        final GremlinAntlrToJava antlr = new GremlinAntlrToJava();
+        try {
+            eval("g.V().addE(xxx)", antlr);
+            fail("Should have failed to parse without bindings for 'xxx'");
+        } catch (UnboundIdentifierException uie) {
+            assertEquals("xxx", uie.getVariableName());
+        }
+    }
+
+}
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4 b/gremlin-language/src/main/antlr4/Gremlin.g4
index 4cbc8a4..0a0ecfd 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -1280,6 +1280,7 @@ genericLiteralCollection
 stringLiteralList
     : stringLiteralExpr?
     | LBRACK stringLiteralExpr? RBRACK
+	| variable
     ;
 
 stringLiteralExpr
@@ -1303,22 +1304,27 @@ genericLiteral
 	| nestedTraversal
 	| terminatedTraversal
 	| genericLiteralMap
+	| variable
 	;
 
 genericLiteralMap
-  : LBRACK (genericLiteral)? COLON (genericLiteral)? (COMMA (genericLiteral)? COLON (genericLiteral)?)* RBRACK
-  ;
+    : LBRACK (genericLiteral)? COLON (genericLiteral)? (COMMA (genericLiteral)? COLON (genericLiteral)?)* RBRACK
+    | variable
+    ;
 
 integerLiteral
     : IntegerLiteral
+    | variable
     ;
 
 floatLiteral
     : FloatingPointLiteral
+    | variable
     ;
 
 booleanLiteral
     : BooleanLiteral
+    | variable
     ;
 
 stringLiteral
@@ -1326,16 +1332,22 @@ stringLiteral
     | EmptyStringLiteral
     | NullLiteral
     | gremlinStringConstants
+    | variable
     ;
 
 dateLiteral
     : 'datetime' LPAREN stringLiteral RPAREN
+    | variable
     ;
 
 nullLiteral
     : NullLiteral
     ;
 
+variable
+    : Identifier
+    ;
+
 /*********************************************
     LEXER RULES
 **********************************************/
@@ -1602,6 +1614,647 @@ COLON : ':';
 TRAVERSAL_ROOT:     'g';
 ANON_TRAVERSAL_ROOT:     '__';
 
+Identifier
+	:	IdentifierStart IdentifierPart*
+	;
+
+fragment IdentifierStart
+	: [\u0024]
+	| [\u0041-\u005A]
+	| [\u005F]
+	| [\u0061-\u007A]
+	| [\u00A2-\u00A5]
+	| [\u00AA]
+	| [\u00B5]
+	| [\u00BA]
+	| [\u00C0-\u00D6]
+	| [\u00D8-\u00F6]
+	| [\u00F8-\u02C1]
+	| [\u02C6-\u02D1]
+	| [\u02E0-\u02E4]
+	| [\u02EC]
+	| [\u02EE]
+	| [\u0370-\u0374]
+	| [\u0376-\u0377]
+	| [\u037A-\u037D]
+	| [\u037F]
+	| [\u0386]
+	| [\u0388-\u038A]
+	| [\u038C]
+	| [\u038E-\u03A1]
+	| [\u03A3-\u03F5]
+	| [\u03F7-\u0481]
+	| [\u048A-\u052F]
+	| [\u0531-\u0556]
+	| [\u0559]
+	| [\u0561-\u0587]
+	| [\u058F]
+	| [\u05D0-\u05EA]
+	| [\u05F0-\u05F2]
+	| [\u060B]
+	| [\u0620-\u064A]
+	| [\u066E-\u066F]
+	| [\u0671-\u06D3]
+	| [\u06D5]
+	| [\u06E5-\u06E6]
+	| [\u06EE-\u06EF]
+	| [\u06FA-\u06FC]
+	| [\u06FF]
+	| [\u0710]
+	| [\u0712-\u072F]
+	| [\u074D-\u07A5]
+	| [\u07B1]
+	| [\u07CA-\u07EA]
+	| [\u07F4-\u07F5]
+	| [\u07FA]
+	| [\u0800-\u0815]
+	| [\u081A]
+	| [\u0824]
+	| [\u0828]
+	| [\u0840-\u0858]
+	| [\u0860-\u086A]
+	| [\u08A0-\u08B4]
+	| [\u08B6-\u08BD]
+	| [\u0904-\u0939]
+	| [\u093D]
+	| [\u0950]
+	| [\u0958-\u0961]
+	| [\u0971-\u0980]
+	| [\u0985-\u098C]
+	| [\u098F-\u0990]
+	| [\u0993-\u09A8]
+	| [\u09AA-\u09B0]
+	| [\u09B2]
+	| [\u09B6-\u09B9]
+	| [\u09BD]
+	| [\u09CE]
+	| [\u09DC-\u09DD]
+	| [\u09DF-\u09E1]
+	| [\u09F0-\u09F3]
+	| [\u09FB-\u09FC]
+	| [\u0A05-\u0A0A]
+	| [\u0A0F-\u0A10]
+	| [\u0A13-\u0A28]
+	| [\u0A2A-\u0A30]
+	| [\u0A32-\u0A33]
+	| [\u0A35-\u0A36]
+	| [\u0A38-\u0A39]
+	| [\u0A59-\u0A5C]
+	| [\u0A5E]
+	| [\u0A72-\u0A74]
+	| [\u0A85-\u0A8D]
+	| [\u0A8F-\u0A91]
+	| [\u0A93-\u0AA8]
+	| [\u0AAA-\u0AB0]
+	| [\u0AB2-\u0AB3]
+	| [\u0AB5-\u0AB9]
+	| [\u0ABD]
+	| [\u0AD0]
+	| [\u0AE0-\u0AE1]
+	| [\u0AF1]
+	| [\u0AF9]
+	| [\u0B05-\u0B0C]
+	| [\u0B0F-\u0B10]
+	| [\u0B13-\u0B28]
+	| [\u0B2A-\u0B30]
+	| [\u0B32-\u0B33]
+	| [\u0B35-\u0B39]
+	| [\u0B3D]
+	| [\u0B5C-\u0B5D]
+	| [\u0B5F-\u0B61]
+	| [\u0B71]
+	| [\u0B83]
+	| [\u0B85-\u0B8A]
+	| [\u0B8E-\u0B90]
+	| [\u0B92-\u0B95]
+	| [\u0B99-\u0B9A]
+	| [\u0B9C]
+	| [\u0B9E-\u0B9F]
+	| [\u0BA3-\u0BA4]
+	| [\u0BA8-\u0BAA]
+	| [\u0BAE-\u0BB9]
+	| [\u0BD0]
+	| [\u0BF9]
+	| [\u0C05-\u0C0C]
+	| [\u0C0E-\u0C10]
+	| [\u0C12-\u0C28]
+	| [\u0C2A-\u0C39]
+	| [\u0C3D]
+	| [\u0C58-\u0C5A]
+	| [\u0C60-\u0C61]
+	| [\u0C80]
+	| [\u0C85-\u0C8C]
+	| [\u0C8E-\u0C90]
+	| [\u0C92-\u0CA8]
+	| [\u0CAA-\u0CB3]
+	| [\u0CB5-\u0CB9]
+	| [\u0CBD]
+	| [\u0CDE]
+	| [\u0CE0-\u0CE1]
+	| [\u0CF1-\u0CF2]
+	| [\u0D05-\u0D0C]
+	| [\u0D0E-\u0D10]
+	| [\u0D12-\u0D3A]
+	| [\u0D3D]
+	| [\u0D4E]
+	| [\u0D54-\u0D56]
+	| [\u0D5F-\u0D61]
+	| [\u0D7A-\u0D7F]
+	| [\u0D85-\u0D96]
+	| [\u0D9A-\u0DB1]
+	| [\u0DB3-\u0DBB]
+	| [\u0DBD]
+	| [\u0DC0-\u0DC6]
+	| [\u0E01-\u0E30]
+	| [\u0E32-\u0E33]
+	| [\u0E3F-\u0E46]
+	| [\u0E81-\u0E82]
+	| [\u0E84]
+	| [\u0E87-\u0E88]
+	| [\u0E8A]
+	| [\u0E8D]
+	| [\u0E94-\u0E97]
+	| [\u0E99-\u0E9F]
+	| [\u0EA1-\u0EA3]
+	| [\u0EA5]
+	| [\u0EA7]
+	| [\u0EAA-\u0EAB]
+	| [\u0EAD-\u0EB0]
+	| [\u0EB2-\u0EB3]
+	| [\u0EBD]
+	| [\u0EC0-\u0EC4]
+	| [\u0EC6]
+	| [\u0EDC-\u0EDF]
+	| [\u0F00]
+	| [\u0F40-\u0F47]
+	| [\u0F49-\u0F6C]
+	| [\u0F88-\u0F8C]
+	| [\u1000-\u102A]
+	| [\u103F]
+	| [\u1050-\u1055]
+	| [\u105A-\u105D]
+	| [\u1061]
+	| [\u1065-\u1066]
+	| [\u106E-\u1070]
+	| [\u1075-\u1081]
+	| [\u108E]
+	| [\u10A0-\u10C5]
+	| [\u10C7]
+	| [\u10CD]
+	| [\u10D0-\u10FA]
+	| [\u10FC-\u1248]
+	| [\u124A-\u124D]
+	| [\u1250-\u1256]
+	| [\u1258]
+	| [\u125A-\u125D]
+	| [\u1260-\u1288]
+	| [\u128A-\u128D]
+	| [\u1290-\u12B0]
+	| [\u12B2-\u12B5]
+	| [\u12B8-\u12BE]
+	| [\u12C0]
+	| [\u12C2-\u12C5]
+	| [\u12C8-\u12D6]
+	| [\u12D8-\u1310]
+	| [\u1312-\u1315]
+	| [\u1318-\u135A]
+	| [\u1380-\u138F]
+	| [\u13A0-\u13F5]
+	| [\u13F8-\u13FD]
+	| [\u1401-\u166C]
+	| [\u166F-\u167F]
+	| [\u1681-\u169A]
+	| [\u16A0-\u16EA]
+	| [\u16EE-\u16F8]
+	| [\u1700-\u170C]
+	| [\u170E-\u1711]
+	| [\u1720-\u1731]
+	| [\u1740-\u1751]
+	| [\u1760-\u176C]
+	| [\u176E-\u1770]
+	| [\u1780-\u17B3]
+	| [\u17D7]
+	| [\u17DB-\u17DC]
+	| [\u1820-\u1877]
+	| [\u1880-\u1884]
+	| [\u1887-\u18A8]
+	| [\u18AA]
+	| [\u18B0-\u18F5]
+	| [\u1900-\u191E]
+	| [\u1950-\u196D]
+	| [\u1970-\u1974]
+	| [\u1980-\u19AB]
+	| [\u19B0-\u19C9]
+	| [\u1A00-\u1A16]
+	| [\u1A20-\u1A54]
+	| [\u1AA7]
+	| [\u1B05-\u1B33]
+	| [\u1B45-\u1B4B]
+	| [\u1B83-\u1BA0]
+	| [\u1BAE-\u1BAF]
+	| [\u1BBA-\u1BE5]
+	| [\u1C00-\u1C23]
+	| [\u1C4D-\u1C4F]
+	| [\u1C5A-\u1C7D]
+	| [\u1C80-\u1C88]
+	| [\u1CE9-\u1CEC]
+	| [\u1CEE-\u1CF1]
+	| [\u1CF5-\u1CF6]
+	| [\u1D00-\u1DBF]
+	| [\u1E00-\u1F15]
+	| [\u1F18-\u1F1D]
+	| [\u1F20-\u1F45]
+	| [\u1F48-\u1F4D]
+	| [\u1F50-\u1F57]
+	| [\u1F59]
+	| [\u1F5B]
+	| [\u1F5D]
+	| [\u1F5F-\u1F7D]
+	| [\u1F80-\u1FB4]
+	| [\u1FB6-\u1FBC]
+	| [\u1FBE]
+	| [\u1FC2-\u1FC4]
+	| [\u1FC6-\u1FCC]
+	| [\u1FD0-\u1FD3]
+	| [\u1FD6-\u1FDB]
+	| [\u1FE0-\u1FEC]
+	| [\u1FF2-\u1FF4]
+	| [\u1FF6-\u1FFC]
+	| [\u203F-\u2040]
+	| [\u2054]
+	| [\u2071]
+	| [\u207F]
+	| [\u2090-\u209C]
+	| [\u20A0-\u20BF]
+	| [\u2102]
+	| [\u2107]
+	| [\u210A-\u2113]
+	| [\u2115]
+	| [\u2119-\u211D]
+	| [\u2124]
+	| [\u2126]
+	| [\u2128]
+	| [\u212A-\u212D]
+	| [\u212F-\u2139]
+	| [\u213C-\u213F]
+	| [\u2145-\u2149]
+	| [\u214E]
+	| [\u2160-\u2188]
+	| [\u2C00-\u2C2E]
+	| [\u2C30-\u2C5E]
+	| [\u2C60-\u2CE4]
+	| [\u2CEB-\u2CEE]
+	| [\u2CF2-\u2CF3]
+	| [\u2D00-\u2D25]
+	| [\u2D27]
+	| [\u2D2D]
+	| [\u2D30-\u2D67]
+	| [\u2D6F]
+	| [\u2D80-\u2D96]
+	| [\u2DA0-\u2DA6]
+	| [\u2DA8-\u2DAE]
+	| [\u2DB0-\u2DB6]
+	| [\u2DB8-\u2DBE]
+	| [\u2DC0-\u2DC6]
+	| [\u2DC8-\u2DCE]
+	| [\u2DD0-\u2DD6]
+	| [\u2DD8-\u2DDE]
+	| [\u2E2F]
+	| [\u3005-\u3007]
+	| [\u3021-\u3029]
+	| [\u3031-\u3035]
+	| [\u3038-\u303C]
+	| [\u3041-\u3096]
+	| [\u309D-\u309F]
+	| [\u30A1-\u30FA]
+	| [\u30FC-\u30FF]
+	| [\u3105-\u312E]
+	| [\u3131-\u318E]
+	| [\u31A0-\u31BA]
+	| [\u31F0-\u31FF]
+	| [\u3400-\u4DB5]
+	| [\u4E00-\u9FEA]
+	| [\uA000-\uA48C]
+	| [\uA4D0-\uA4FD]
+	| [\uA500-\uA60C]
+	| [\uA610-\uA61F]
+	| [\uA62A-\uA62B]
+	| [\uA640-\uA66E]
+	| [\uA67F-\uA69D]
+	| [\uA6A0-\uA6EF]
+	| [\uA717-\uA71F]
+	| [\uA722-\uA788]
+	| [\uA78B-\uA7AE]
+	| [\uA7B0-\uA7B7]
+	| [\uA7F7-\uA801]
+	| [\uA803-\uA805]
+	| [\uA807-\uA80A]
+	| [\uA80C-\uA822]
+	| [\uA838]
+	| [\uA840-\uA873]
+	| [\uA882-\uA8B3]
+	| [\uA8F2-\uA8F7]
+	| [\uA8FB]
+	| [\uA8FD]
+	| [\uA90A-\uA925]
+	| [\uA930-\uA946]
+	| [\uA960-\uA97C]
+	| [\uA984-\uA9B2]
+	| [\uA9CF]
+	| [\uA9E0-\uA9E4]
+	| [\uA9E6-\uA9EF]
+	| [\uA9FA-\uA9FE]
+	| [\uAA00-\uAA28]
+	| [\uAA40-\uAA42]
+	| [\uAA44-\uAA4B]
+	| [\uAA60-\uAA76]
+	| [\uAA7A]
+	| [\uAA7E-\uAAAF]
+	| [\uAAB1]
+	| [\uAAB5-\uAAB6]
+	| [\uAAB9-\uAABD]
+	| [\uAAC0]
+	| [\uAAC2]
+	| [\uAADB-\uAADD]
+	| [\uAAE0-\uAAEA]
+	| [\uAAF2-\uAAF4]
+	| [\uAB01-\uAB06]
+	| [\uAB09-\uAB0E]
+	| [\uAB11-\uAB16]
+	| [\uAB20-\uAB26]
+	| [\uAB28-\uAB2E]
+	| [\uAB30-\uAB5A]
+	| [\uAB5C-\uAB65]
+	| [\uAB70-\uABE2]
+	| [\uAC00-\uD7A3]
+	| [\uD7B0-\uD7C6]
+	| [\uD7CB-\uD7FB]
+	| [\uF900-\uFA6D]
+	| [\uFA70-\uFAD9]
+	| [\uFB00-\uFB06]
+	| [\uFB13-\uFB17]
+	| [\uFB1D]
+	| [\uFB1F-\uFB28]
+	| [\uFB2A-\uFB36]
+	| [\uFB38-\uFB3C]
+	| [\uFB3E]
+	| [\uFB40-\uFB41]
+	| [\uFB43-\uFB44]
+	| [\uFB46-\uFBB1]
+	| [\uFBD3-\uFD3D]
+	| [\uFD50-\uFD8F]
+	| [\uFD92-\uFDC7]
+	| [\uFDF0-\uFDFC]
+	| [\uFE33-\uFE34]
+	| [\uFE4D-\uFE4F]
+	| [\uFE69]
+	| [\uFE70-\uFE74]
+	| [\uFE76-\uFEFC]
+	| [\uFF04]
+	| [\uFF21-\uFF3A]
+	| [\uFF3F]
+	| [\uFF41-\uFF5A]
+	| [\uFF66-\uFFBE]
+	| [\uFFC2-\uFFC7]
+	| [\uFFCA-\uFFCF]
+	| [\uFFD2-\uFFD7]
+	| [\uFFDA-\uFFDC]
+	| [\uFFE0-\uFFE1]
+	| [\uFFE5-\uFFE6]
+	;
+
+fragment IdentifierPart
+	: IdentifierStart
+	| [\u0030-\u0039]
+	| [\u007F-\u009F]
+	| [\u00AD]
+	| [\u0300-\u036F]
+	| [\u0483-\u0487]
+	| [\u0591-\u05BD]
+	| [\u05BF]
+	| [\u05C1-\u05C2]
+	| [\u05C4-\u05C5]
+	| [\u05C7]
+	| [\u0600-\u0605]
+	| [\u0610-\u061A]
+	| [\u061C]
+	| [\u064B-\u0669]
+	| [\u0670]
+	| [\u06D6-\u06DD]
+	| [\u06DF-\u06E4]
+	| [\u06E7-\u06E8]
+	| [\u06EA-\u06ED]
+	| [\u06F0-\u06F9]
+	| [\u070F]
+	| [\u0711]
+	| [\u0730-\u074A]
+	| [\u07A6-\u07B0]
+	| [\u07C0-\u07C9]
+	| [\u07EB-\u07F3]
+	| [\u0816-\u0819]
+	| [\u081B-\u0823]
+	| [\u0825-\u0827]
+	| [\u0829-\u082D]
+	| [\u0859-\u085B]
+	| [\u08D4-\u0903]
+	| [\u093A-\u093C]
+	| [\u093E-\u094F]
+	| [\u0951-\u0957]
+	| [\u0962-\u0963]
+	| [\u0966-\u096F]
+	| [\u0981-\u0983]
+	| [\u09BC]
+	| [\u09BE-\u09C4]
+	| [\u09C7-\u09C8]
+	| [\u09CB-\u09CD]
+	| [\u09D7]
+	| [\u09E2-\u09E3]
+	| [\u09E6-\u09EF]
+	| [\u0A01-\u0A03]
+	| [\u0A3C]
+	| [\u0A3E-\u0A42]
+	| [\u0A47-\u0A48]
+	| [\u0A4B-\u0A4D]
+	| [\u0A51]
+	| [\u0A66-\u0A71]
+	| [\u0A75]
+	| [\u0A81-\u0A83]
+	| [\u0ABC]
+	| [\u0ABE-\u0AC5]
+	| [\u0AC7-\u0AC9]
+	| [\u0ACB-\u0ACD]
+	| [\u0AE2-\u0AE3]
+	| [\u0AE6-\u0AEF]
+	| [\u0AFA-\u0AFF]
+	| [\u0B01-\u0B03]
+	| [\u0B3C]
+	| [\u0B3E-\u0B44]
+	| [\u0B47-\u0B48]
+	| [\u0B4B-\u0B4D]
+	| [\u0B56-\u0B57]
+	| [\u0B62-\u0B63]
+	| [\u0B66-\u0B6F]
+	| [\u0B82]
+	| [\u0BBE-\u0BC2]
+	| [\u0BC6-\u0BC8]
+	| [\u0BCA-\u0BCD]
+	| [\u0BD7]
+	| [\u0BE6-\u0BEF]
+	| [\u0C00-\u0C03]
+	| [\u0C3E-\u0C44]
+	| [\u0C46-\u0C48]
+	| [\u0C4A-\u0C4D]
+	| [\u0C55-\u0C56]
+	| [\u0C62-\u0C63]
+	| [\u0C66-\u0C6F]
+	| [\u0C81-\u0C83]
+	| [\u0CBC]
+	| [\u0CBE-\u0CC4]
+	| [\u0CC6-\u0CC8]
+	| [\u0CCA-\u0CCD]
+	| [\u0CD5-\u0CD6]
+	| [\u0CE2-\u0CE3]
+	| [\u0CE6-\u0CEF]
+	| [\u0D00-\u0D03]
+	| [\u0D3B-\u0D3C]
+	| [\u0D3E-\u0D44]
+	| [\u0D46-\u0D48]
+	| [\u0D4A-\u0D4D]
+	| [\u0D57]
+	| [\u0D62-\u0D63]
+	| [\u0D66-\u0D6F]
+	| [\u0D82-\u0D83]
+	| [\u0DCA]
+	| [\u0DCF-\u0DD4]
+	| [\u0DD6]
+	| [\u0DD8-\u0DDF]
+	| [\u0DE6-\u0DEF]
+	| [\u0DF2-\u0DF3]
+	| [\u0E31]
+	| [\u0E34-\u0E3A]
+	| [\u0E47-\u0E4E]
+	| [\u0E50-\u0E59]
+	| [\u0EB1]
+	| [\u0EB4-\u0EB9]
+	| [\u0EBB-\u0EBC]
+	| [\u0EC8-\u0ECD]
+	| [\u0ED0-\u0ED9]
+	| [\u0F18-\u0F19]
+	| [\u0F20-\u0F29]
+	| [\u0F35]
+	| [\u0F37]
+	| [\u0F39]
+	| [\u0F3E-\u0F3F]
+	| [\u0F71-\u0F84]
+	| [\u0F86-\u0F87]
+	| [\u0F8D-\u0F97]
+	| [\u0F99-\u0FBC]
+	| [\u0FC6]
+	| [\u102B-\u103E]
+	| [\u1040-\u1049]
+	| [\u1056-\u1059]
+	| [\u105E-\u1060]
+	| [\u1062-\u1064]
+	| [\u1067-\u106D]
+	| [\u1071-\u1074]
+	| [\u1082-\u108D]
+	| [\u108F-\u109D]
+	| [\u135D-\u135F]
+	| [\u1712-\u1714]
+	| [\u1732-\u1734]
+	| [\u1752-\u1753]
+	| [\u1772-\u1773]
+	| [\u17B4-\u17D3]
+	| [\u17DD]
+	| [\u17E0-\u17E9]
+	| [\u180B-\u180E]
+	| [\u1810-\u1819]
+	| [\u1885-\u1886]
+	| [\u18A9]
+	| [\u1920-\u192B]
+	| [\u1930-\u193B]
+	| [\u1946-\u194F]
+	| [\u19D0-\u19D9]
+	| [\u1A17-\u1A1B]
+	| [\u1A55-\u1A5E]
+	| [\u1A60-\u1A7C]
+	| [\u1A7F-\u1A89]
+	| [\u1A90-\u1A99]
+	| [\u1AB0-\u1ABD]
+	| [\u1B00-\u1B04]
+	| [\u1B34-\u1B44]
+	| [\u1B50-\u1B59]
+	| [\u1B6B-\u1B73]
+	| [\u1B80-\u1B82]
+	| [\u1BA1-\u1BAD]
+	| [\u1BB0-\u1BB9]
+	| [\u1BE6-\u1BF3]
+	| [\u1C24-\u1C37]
+	| [\u1C40-\u1C49]
+	| [\u1C50-\u1C59]
+	| [\u1CD0-\u1CD2]
+	| [\u1CD4-\u1CE8]
+	| [\u1CED]
+	| [\u1CF2-\u1CF4]
+	| [\u1CF7-\u1CF9]
+	| [\u1DC0-\u1DF9]
+	| [\u1DFB-\u1DFF]
+	| [\u200B-\u200F]
+	| [\u202A-\u202E]
+	| [\u2060-\u2064]
+	| [\u2066-\u206F]
+	| [\u20D0-\u20DC]
+	| [\u20E1]
+	| [\u20E5-\u20F0]
+	| [\u2CEF-\u2CF1]
+	| [\u2D7F]
+	| [\u2DE0-\u2DFF]
+	| [\u302A-\u302F]
+	| [\u3099-\u309A]
+	| [\uA620-\uA629]
+	| [\uA66F]
+	| [\uA674-\uA67D]
+	| [\uA69E-\uA69F]
+	| [\uA6F0-\uA6F1]
+	| [\uA802]
+	| [\uA806]
+	| [\uA80B]
+	| [\uA823-\uA827]
+	| [\uA880-\uA881]
+	| [\uA8B4-\uA8C5]
+	| [\uA8D0-\uA8D9]
+	| [\uA8E0-\uA8F1]
+	| [\uA900-\uA909]
+	| [\uA926-\uA92D]
+	| [\uA947-\uA953]
+	| [\uA980-\uA983]
+	| [\uA9B3-\uA9C0]
+	| [\uA9D0-\uA9D9]
+	| [\uA9E5]
+	| [\uA9F0-\uA9F9]
+	| [\uAA29-\uAA36]
+	| [\uAA43]
+	| [\uAA4C-\uAA4D]
+	| [\uAA50-\uAA59]
+	| [\uAA7B-\uAA7D]
+	| [\uAAB0]
+	| [\uAAB2-\uAAB4]
+	| [\uAAB7-\uAAB8]
+	| [\uAABE-\uAABF]
+	| [\uAAC1]
+	| [\uAAEB-\uAAEF]
+	| [\uAAF5-\uAAF6]
+	| [\uABE3-\uABEA]
+	| [\uABEC-\uABED]
+	| [\uABF0-\uABF9]
+	| [\uFB1E]
+	| [\uFE00-\uFE0F]
+	| [\uFE20-\uFE2F]
+	| [\uFEFF]
+	| [\uFF10-\uFF19]
+	| [\uFFF9-\uFFFB]
+	;
+
 // Trim whitespace and comments if present
 
 WS  :  [ \t\r\n\u000C]+ -> skip

[tinkerpop] 01/02: Refactored grammar parser to better keep context of GremlinAntlrToJava

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 72134e7321ffe35ce24a4d6f1795261b2338e2d1
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Sat Dec 18 14:01:51 2021 -0500

    Refactored grammar parser to better keep context of GremlinAntlrToJava
---
 .../language/grammar/GenericLiteralVisitor.java    |  40 ++---
 .../language/grammar/GremlinAntlrToJava.java       |   5 +
 .../language/grammar/TraversalMethodVisitor.java   | 179 ++++++++++-----------
 .../grammar/TraversalPredicateVisitor.java         |  22 +--
 .../language/grammar/TraversalRootVisitor.java     |   6 +-
 .../grammar/TraversalSourceSelfMethodVisitor.java  |  30 ++--
 .../grammar/TraversalSourceSpawnMethodVisitor.java |  17 +-
 .../language/grammar/TraversalStrategyVisitor.java |  37 +++--
 .../grammar/GeneralLiteralVisitorTest.java         |  24 +--
 .../grammar/TraversalStrategyVisitorTest.java      |   2 +-
 10 files changed, 174 insertions(+), 188 deletions(-)

diff --git 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
index 1d93387..66ff774 100644
--- 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
@@ -45,72 +45,57 @@ public class GenericLiteralVisitor extends GremlinBaseVisitor<Object> {
      */
     public static final int TOTAL_INTEGER_RANGE_RESULT_COUNT_LIMIT = 1_000_000;
     protected final GremlinAntlrToJava antlr;
-    protected GremlinBaseVisitor<TraversalStrategy> traversalStrategyVisitor;
-
-    private static GenericLiteralVisitor instance;
-
-    private GenericLiteralVisitor() {
-        this.antlr = null;
-    }
 
     public GenericLiteralVisitor(final GremlinAntlrToJava antlr) {
         this.antlr = antlr;
     }
 
-    public static GenericLiteralVisitor getInstance() {
-        if (instance == null) {
-            instance = new GenericLiteralVisitor();
-        }
-
-        return instance;
-    }
-
     /**
      * Parse a string literal context and return the string literal
      */
-    public static String getStringLiteral(final GremlinParser.StringLiteralContext stringLiteral) {
-        return (String) (getInstance().visitStringLiteral(stringLiteral));
+    public String getStringLiteral(final GremlinParser.StringLiteralContext stringLiteral) {
+        return (String) visitStringLiteral(stringLiteral);
     }
 
     /**
      * Parse a boolean literal context and return the boolean literal
      */
-    public static boolean getBooleanLiteral(final GremlinParser.BooleanLiteralContext booleanLiteral) {
-        return (boolean) (getInstance().visitBooleanLiteral(booleanLiteral));
+    public boolean getBooleanLiteral(final GremlinParser.BooleanLiteralContext booleanLiteral) {
+        return (boolean) visitBooleanLiteral(booleanLiteral);
     }
 
     /**
      * Parse a String literal list context and return a string array
      */
-    public static String[] getStringLiteralList(final GremlinParser.StringLiteralListContext stringLiteralList) {
+    public String[] getStringLiteralList(final GremlinParser.StringLiteralListContext stringLiteralList) {
         if (stringLiteralList == null || stringLiteralList.stringLiteralExpr() == null) {
             return new String[0];
         }
         return stringLiteralList.stringLiteralExpr().stringLiteral()
                 .stream()
                 .filter(Objects::nonNull)
-                .map(stringLiteral -> getInstance().visitStringLiteral(stringLiteral))
+                .map(this::visitStringLiteral)
                 .toArray(String[]::new);
     }
 
     /**
      * Parse a generic literal list, and return an object array
      */
-    public static Object[] getGenericLiteralList(final GremlinParser.GenericLiteralListContext objectLiteralList) {
+    public Object[] getGenericLiteralList(final GremlinParser.GenericLiteralListContext objectLiteralList) {
         if (objectLiteralList == null || objectLiteralList.genericLiteralExpr() == null) {
             return new Object[0];
         }
         return objectLiteralList.genericLiteralExpr().genericLiteral()
                 .stream()
                 .filter(Objects::nonNull)
-                .map(genericLiteral -> getInstance().visitGenericLiteral(genericLiteral))
+                .map(this::visitGenericLiteral)
                 .toArray(Object[]::new);
     }
 
     /**
      * Parse a TraversalStrategy literal list context and return a string array
      */
-    public static TraversalStrategy[] getTraversalStrategyList(final GremlinParser.TraversalStrategyListContext traversalStrategyListContext,
+    public TraversalStrategy[] getTraversalStrategyList(final GremlinParser.TraversalStrategyListContext traversalStrategyListContext,
                                                                final GremlinBaseVisitor<TraversalStrategy> traversalStrategyVisitor) {
         if (traversalStrategyListContext == null || traversalStrategyListContext.traversalStrategyExpr() == null) {
             return new TraversalStrategy[0];
@@ -405,7 +390,7 @@ public class GenericLiteralVisitor extends GremlinBaseVisitor<Object> {
      */
     @Override
     public Object visitDateLiteral(final GremlinParser.DateLiteralContext ctx) {
-        return DatetimeHelper.parse(getStringLiteral(ctx.stringLiteral()));
+        return DatetimeHelper.parse((String) visitStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -461,10 +446,7 @@ public class GenericLiteralVisitor extends GremlinBaseVisitor<Object> {
 
     @Override
     public Object visitTraversalStrategy(final GremlinParser.TraversalStrategyContext ctx) {
-        if (null == traversalStrategyVisitor)
-            traversalStrategyVisitor = new TraversalStrategyVisitor((GremlinBaseVisitor) antlr.tvisitor);
-
-        return traversalStrategyVisitor.visitTraversalStrategy(ctx);
+        return antlr.traversalStrategyVisitor.visitTraversalStrategy(ctx);
     }
 
     /**
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
index a06d5e7..02a6772 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
@@ -64,6 +64,9 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
      */
     final GremlinBaseVisitor<Traversal[]> tListVisitor;
 
+    final GenericLiteralVisitor genericLiteralVisitor;
+    final TraversalStrategyVisitor traversalStrategyVisitor;
+
     /**
      * Creates a {@link GraphTraversal} implementation that is meant to be anonymous. This provides a way to change the
      * type of implementation that will be used as anonymous traversals. By default, it uses {@link __} which generates
@@ -140,6 +143,8 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
                 null == traversalSourceName ? GraphTraversalSourceVisitor.TRAVERSAL_ROOT : traversalSourceName,this);
         this.tvisitor = new TraversalRootVisitor(this);
         this.tListVisitor = new NestedTraversalSourceListVisitor(this);
+        this.genericLiteralVisitor = new GenericLiteralVisitor(this);
+        this.traversalStrategyVisitor = new TraversalStrategyVisitor(this);
         this.createAnonymous = createAnonymous;
     }
 
diff --git 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
index 7682232..3744ed6 100644
--- 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
@@ -63,7 +63,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_V(final GremlinParser.TraversalMethod_VContext ctx) {
         if (ctx.genericLiteralList().getChildCount() != 0) {
-            return this.graphTraversal.V(GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+            return this.graphTraversal.V(antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
         } else {
             return this.graphTraversal.V();
         }
@@ -82,7 +82,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_addV_String(final GremlinParser.TraversalMethod_addV_StringContext ctx) {
-        return this.graphTraversal.addV(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return this.graphTraversal.addV(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
@@ -100,7 +100,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
         final int childIndexOfParameterEdgeLabel = 2;
         final GremlinParser.StringLiteralContext stringLiteralContext =
                 (GremlinParser.StringLiteralContext) (ctx.getChild(childIndexOfParameterEdgeLabel));
-        return this.graphTraversal.addE(GenericLiteralVisitor.getStringLiteral(stringLiteralContext));
+        return this.graphTraversal.addE(antlr.genericLiteralVisitor.getStringLiteral(stringLiteralContext));
     }
 
     /**
@@ -108,7 +108,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_aggregate_String(final GremlinParser.TraversalMethod_aggregate_StringContext ctx) {
-        return graphTraversal.aggregate(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.aggregate(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -118,7 +118,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     public GraphTraversal visitTraversalMethod_aggregate_Scope_String(final GremlinParser.TraversalMethod_aggregate_Scope_StringContext ctx) {
         return graphTraversal.aggregate(
                 TraversalEnumParser.parseTraversalEnumFromContext(Scope.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -136,10 +136,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_as(final GremlinParser.TraversalMethod_asContext ctx) {
         if (ctx.getChildCount() == 4) {
-            return graphTraversal.as(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return graphTraversal.as(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else {
-            return graphTraversal.as(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+            return graphTraversal.as(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -174,7 +174,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_both(final GremlinParser.TraversalMethod_bothContext ctx) {
-        return graphTraversal.both(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.both(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -182,7 +182,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_bothE(final GremlinParser.TraversalMethod_bothEContext ctx) {
-        return graphTraversal.bothE(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.bothE(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -247,7 +247,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_by_String(final GremlinParser.TraversalMethod_by_StringContext ctx) {
-        return graphTraversal.by(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.by(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -255,7 +255,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_by_String_Comparator(final GremlinParser.TraversalMethod_by_String_ComparatorContext ctx) {
-        return graphTraversal.by(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+        return graphTraversal.by(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
                 TraversalEnumParser.parseTraversalEnumFromContext(Order.class, ctx.getChild(4)));
     }
 
@@ -290,10 +290,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_cap(final GremlinParser.TraversalMethod_capContext ctx) {
         if (ctx.getChildCount() == 4) {
-            return graphTraversal.cap(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return graphTraversal.cap(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else {
-            return graphTraversal.cap(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+            return graphTraversal.cap(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -373,8 +373,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_constant(final GremlinParser.TraversalMethod_constantContext ctx) {
-        return graphTraversal
-                .constant(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()));
+        return graphTraversal.constant(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     /**
@@ -407,7 +406,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_dedup_Scope_String(final GremlinParser.TraversalMethod_dedup_Scope_StringContext ctx) {
         return graphTraversal.dedup(TraversalEnumParser.parseTraversalEnumFromContext(Scope.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+                antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -415,7 +414,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_dedup_String(final GremlinParser.TraversalMethod_dedup_StringContext ctx) {
-        return graphTraversal.dedup(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.dedup(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -463,7 +462,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public Traversal visitTraversalMethod_fail_String(final GremlinParser.TraversalMethod_fail_StringContext ctx) {
-        return this.graphTraversal.fail(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return this.graphTraversal.fail(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -504,7 +503,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_fold_Object_BiFunction(final GremlinParser.TraversalMethod_fold_Object_BiFunctionContext ctx) {
         return graphTraversal.fold(
-                GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()),
                 (BiFunction) TraversalEnumParser.parseTraversalEnumFromContext(Operator.class, ctx.getChild(4)));
     }
 
@@ -513,7 +512,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_from_String(final GremlinParser.TraversalMethod_from_StringContext ctx) {
-        return graphTraversal.from(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.from(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -537,7 +536,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_groupCount_String(final GremlinParser.TraversalMethod_groupCount_StringContext ctx) {
-        return graphTraversal.groupCount(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.groupCount(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -553,7 +552,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_group_String(final GremlinParser.TraversalMethod_group_StringContext ctx) {
-        return graphTraversal.group(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.group(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -561,8 +560,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_hasId_Object_Object(final GremlinParser.TraversalMethod_hasId_Object_ObjectContext ctx) {
-        return graphTraversal.hasId(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()),
-                GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+        return graphTraversal.hasId(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()),
+                antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     /**
@@ -587,10 +586,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_hasKey_String_String(final GremlinParser.TraversalMethod_hasKey_String_StringContext ctx) {
         if (ctx.getChildCount() == 4) {
-            return graphTraversal.hasKey(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return graphTraversal.hasKey(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else {
-            return graphTraversal.hasKey(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+            return graphTraversal.hasKey(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -608,10 +607,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_hasLabel_String_String(final GremlinParser.TraversalMethod_hasLabel_String_StringContext ctx) {
         if (ctx.getChildCount() == 4) {
-            return graphTraversal.hasLabel(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return graphTraversal.hasLabel(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else {
-            return graphTraversal.hasLabel(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+            return graphTraversal.hasLabel(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -620,7 +619,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_hasNot(final GremlinParser.TraversalMethod_hasNotContext ctx) {
-        return graphTraversal.hasNot(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.hasNot(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -628,8 +627,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_hasValue_Object_Object(final GremlinParser.TraversalMethod_hasValue_Object_ObjectContext ctx) {
-        return graphTraversal.hasValue(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()),
-                GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+        return graphTraversal.hasValue(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()),
+                antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     /**
@@ -645,7 +644,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String(final GremlinParser.TraversalMethod_has_StringContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -653,8 +652,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String_Object(final GremlinParser.TraversalMethod_has_String_ObjectContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral()));
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     /**
@@ -662,7 +661,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String_P(final GremlinParser.TraversalMethod_has_String_PContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
                 TraversalPredicateVisitor.getInstance().visitTraversalPredicate(ctx.traversalPredicate()));
     }
 
@@ -671,9 +670,9 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String_String_Object(final GremlinParser.TraversalMethod_has_String_String_ObjectContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
-                GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()));
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     /**
@@ -681,8 +680,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String_String_P(final GremlinParser.TraversalMethod_has_String_String_PContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
                 TraversalPredicateVisitor.getInstance().visitTraversalPredicate(ctx.traversalPredicate()));
     }
 
@@ -691,7 +690,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_has_String_Traversal(final GremlinParser.TraversalMethod_has_String_TraversalContext ctx) {
-        return graphTraversal.has(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+        return graphTraversal.has(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
                 antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
     }
 
@@ -701,7 +700,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_has_T_Object(final GremlinParser.TraversalMethod_has_T_ObjectContext ctx) {
         return graphTraversal.has(TraversalEnumParser.parseTraversalEnumFromContext(T.class, ctx.getChild(2)),
-                new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral()));
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     /**
@@ -743,7 +742,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_in(final GremlinParser.TraversalMethod_inContext ctx) {
-        return graphTraversal.in(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.in(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -751,7 +750,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_inE(final GremlinParser.TraversalMethod_inEContext ctx) {
-        return graphTraversal.inE(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.inE(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -767,7 +766,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_inject(final GremlinParser.TraversalMethod_injectContext ctx) {
-        return graphTraversal.inject(GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+        return graphTraversal.inject(antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     @Override
@@ -780,7 +779,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_is_Object(final GremlinParser.TraversalMethod_is_ObjectContext ctx) {
-        return graphTraversal.is(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()));
+        return graphTraversal.is(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     /**
@@ -839,12 +838,12 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
 
     @Override
     public GraphTraversal visitTraversalMethod_loops_String(final GremlinParser.TraversalMethod_loops_StringContext ctx) {
-        return graphTraversal.loops(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.loops(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public GraphTraversal visitTraversalMethod_repeat_String_Traversal(final GremlinParser.TraversalMethod_repeat_String_TraversalContext ctx) {
-        return graphTraversal.repeat((GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral())),
+        return graphTraversal.repeat((antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral())),
                 antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
     }
 
@@ -865,13 +864,13 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
 
     @Override
     public GraphTraversal visitTraversalMethod_with_String(final GremlinParser.TraversalMethod_with_StringContext ctx) {
-        return graphTraversal.with(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.with(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public GraphTraversal visitTraversalMethod_with_String_Object(final GremlinParser.TraversalMethod_with_String_ObjectContext ctx) {
-        return graphTraversal.with(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral()));
+        return graphTraversal.with(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()));
     }
 
     @Override
@@ -957,7 +956,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_option_Object_Traversal(final GremlinParser.TraversalMethod_option_Object_TraversalContext ctx) {
-        return graphTraversal.option(new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral()),
+        return graphTraversal.option(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral()),
                 antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
     }
 
@@ -1015,7 +1014,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_out(final GremlinParser.TraversalMethod_outContext ctx) {
-        return graphTraversal.out(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.out(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1023,7 +1022,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_outE(final GremlinParser.TraversalMethod_outEContext ctx) {
-        return graphTraversal.outE(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.outE(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1084,7 +1083,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_profile_String(final GremlinParser.TraversalMethod_profile_StringContext ctx) {
-        return graphTraversal.profile(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.profile(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1093,10 +1092,10 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_project(final GremlinParser.TraversalMethod_projectContext ctx) {
         if (ctx.getChildCount() == 4) {
-            return graphTraversal.project(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return graphTraversal.project(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else {
-            return graphTraversal.project(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+            return graphTraversal.project(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -1105,7 +1104,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_properties(final GremlinParser.TraversalMethod_propertiesContext ctx) {
-        return graphTraversal.properties(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.properties(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1113,7 +1112,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_elementMap(final GremlinParser.TraversalMethod_elementMapContext ctx) {
-        return graphTraversal.elementMap(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.elementMap(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1121,7 +1120,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_propertyMap(final GremlinParser.TraversalMethod_propertyMapContext ctx) {
-        return graphTraversal.propertyMap(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.propertyMap(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1130,9 +1129,9 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_property_Cardinality_Object_Object_Object(final GremlinParser.TraversalMethod_property_Cardinality_Object_Object_ObjectContext ctx) {
         return graphTraversal.property(TraversalEnumParser.parseTraversalEnumFromContext(VertexProperty.Cardinality.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral(0)),
-                GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral(1)),
-                GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral(0)),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral(1)),
+                antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     /**
@@ -1140,9 +1139,9 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_property_Object_Object_Object(final GremlinParser.TraversalMethod_property_Object_Object_ObjectContext ctx) {
-        return graphTraversal.property(new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral(0)),
-                new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral(1)),
-                GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+        return graphTraversal.property(antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral(0)),
+                antlr.genericLiteralVisitor.visitGenericLiteral(ctx.genericLiteral(1)),
+                antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     /**
@@ -1211,7 +1210,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_select_Pop_String(final GremlinParser.TraversalMethod_select_Pop_StringContext ctx) {
         return graphTraversal.select(TraversalEnumParser.parseTraversalEnumFromContext(Pop.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1220,9 +1219,9 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_select_Pop_String_String_String(final GremlinParser.TraversalMethod_select_Pop_String_String_StringContext ctx) {
         return graphTraversal.select(TraversalEnumParser.parseTraversalEnumFromContext(Pop.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
-                GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
+                antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     @Override
@@ -1236,7 +1235,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_select_String(final GremlinParser.TraversalMethod_select_StringContext ctx) {
-        return graphTraversal.select(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.select(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1244,9 +1243,9 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_select_String_String_String(final GremlinParser.TraversalMethod_select_String_String_StringContext ctx) {
-        return graphTraversal.select(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
-                GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
-                GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.select(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(0)),
+                antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral(1)),
+                antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     @Override
@@ -1292,7 +1291,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_store(final GremlinParser.TraversalMethod_storeContext ctx) {
-        return graphTraversal.store(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.store(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1300,7 +1299,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_subgraph(final GremlinParser.TraversalMethod_subgraphContext ctx) {
-        return graphTraversal.subgraph(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.subgraph(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1374,7 +1373,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_toE(final GremlinParser.TraversalMethod_toEContext ctx) {
         return graphTraversal.toE(TraversalEnumParser.parseTraversalEnumFromContext(Direction.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+                antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1391,7 +1390,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
     @Override
     public GraphTraversal visitTraversalMethod_to_Direction_String(final GremlinParser.TraversalMethod_to_Direction_StringContext ctx) {
         return graphTraversal.to(TraversalEnumParser.parseTraversalEnumFromContext(Direction.class, ctx.getChild(2)),
-                GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+                antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1399,7 +1398,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_to_String(final GremlinParser.TraversalMethod_to_StringContext ctx) {
-        return graphTraversal.to(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.to(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1423,7 +1422,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_tree_String(final GremlinParser.TraversalMethod_tree_StringContext ctx) {
-        return graphTraversal.tree(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.tree(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
@@ -1472,7 +1471,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_valueMap_String(final GremlinParser.TraversalMethod_valueMap_StringContext ctx) {
-        return graphTraversal.valueMap(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.valueMap(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1484,7 +1483,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
             return graphTraversal.valueMap(Boolean.valueOf(ctx.booleanLiteral().getText()));
         } else {
             return graphTraversal.valueMap(Boolean.valueOf(ctx.booleanLiteral().getText()),
-                    GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+                    antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
         }
     }
 
@@ -1493,7 +1492,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_values(final GremlinParser.TraversalMethod_valuesContext ctx) {
-        return graphTraversal.values(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
+        return graphTraversal.values(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()));
     }
 
     /**
@@ -1509,7 +1508,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_where_String_P(final GremlinParser.TraversalMethod_where_String_PContext ctx) {
-        return graphTraversal.where(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
+        return graphTraversal.where(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()),
                 TraversalPredicateVisitor.getInstance().visitTraversalPredicate(ctx.traversalPredicate()));
     }
 
@@ -1526,7 +1525,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_math(final GremlinParser.TraversalMethod_mathContext ctx) {
-        return graphTraversal.math(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return graphTraversal.math(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
     }
 
     /**
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalPredicateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalPredicateVisitor.java
index 564dfae..432d248 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalPredicateVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalPredicateVisitor.java
@@ -84,7 +84,7 @@ public class TraversalPredicateVisitor extends GremlinBaseVisitor<P> {
     private Object getSingleGenericLiteralArgument(final ParseTree ctx) {
         final int childIndexOfParameterValue = 2;
 
-        return GenericLiteralVisitor.getInstance().visitGenericLiteral(
+        return new GenericLiteralVisitor(null).visitGenericLiteral(
                 ParseTreeContextCastHelper.castChildToGenericLiteral(ctx, childIndexOfParameterValue));
     }
 
@@ -138,9 +138,9 @@ public class TraversalPredicateVisitor extends GremlinBaseVisitor<P> {
         final int childIndexOfParameterFirst = 2;
         final int childIndexOfParameterSecond = 4;
 
-        final Object first = GenericLiteralVisitor.getInstance().visitGenericLiteral(
+        final Object first = new GenericLiteralVisitor(null).visitGenericLiteral(
                 ParseTreeContextCastHelper.castChildToGenericLiteral(ctx, childIndexOfParameterFirst));
-        final Object second = GenericLiteralVisitor.getInstance().visitGenericLiteral(
+        final Object second = new GenericLiteralVisitor(null).visitGenericLiteral(
                 ParseTreeContextCastHelper.castChildToGenericLiteral(ctx, childIndexOfParameterSecond));
 
         return new Object[]{first, second};
@@ -179,7 +179,7 @@ public class TraversalPredicateVisitor extends GremlinBaseVisitor<P> {
         // called with no args which is valid for java/groovy
         if (ctx.getChildCount() == 3) return P.within();
 
-        final Object arguments = GenericLiteralVisitor.getInstance().visitGenericLiteralList(
+        final Object arguments = new GenericLiteralVisitor(null).visitGenericLiteralList(
                 ParseTreeContextCastHelper.castChildToGenericLiteralList(ctx, childIndexOfParameterValues));
 
         if (arguments instanceof Object[]) {
@@ -203,7 +203,7 @@ public class TraversalPredicateVisitor extends GremlinBaseVisitor<P> {
         // called with no args which is valid for java/groovy
         if (ctx.getChildCount() == 3) return P.without();
 
-        final Object arguments = GenericLiteralVisitor.getInstance().visitGenericLiteralList(
+        final Object arguments = new GenericLiteralVisitor(null).visitGenericLiteralList(
                 ParseTreeContextCastHelper.castChildToGenericLiteralList(ctx, childIndexOfParameterValues));
 
         if (arguments instanceof Object[]) {
@@ -229,31 +229,31 @@ public class TraversalPredicateVisitor extends GremlinBaseVisitor<P> {
 
     @Override
     public P visitTraversalPredicate_containing(final GremlinParser.TraversalPredicate_containingContext ctx) {
-        return TextP.containing(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.containing((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public P visitTraversalPredicate_notContaining(final GremlinParser.TraversalPredicate_notContainingContext ctx) {
-        return TextP.notContaining(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.notContaining((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public P visitTraversalPredicate_notEndingWith(final GremlinParser.TraversalPredicate_notEndingWithContext ctx) {
-        return TextP.notEndingWith(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.notEndingWith((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public P visitTraversalPredicate_endingWith(final GremlinParser.TraversalPredicate_endingWithContext ctx) {
-        return TextP.endingWith(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.endingWith((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public P visitTraversalPredicate_startingWith(final GremlinParser.TraversalPredicate_startingWithContext ctx) {
-        return TextP.startingWith(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.startingWith((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 
     @Override
     public P visitTraversalPredicate_notStartingWith(final GremlinParser.TraversalPredicate_notStartingWithContext ctx) {
-        return TextP.notStartingWith(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+        return TextP.notStartingWith((String) new GenericLiteralVisitor(null).visitStringLiteral(ctx.stringLiteral()));
     }
 }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalRootVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalRootVisitor.java
index 25c40d9..75cca2b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalRootVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalRootVisitor.java
@@ -58,7 +58,7 @@ public class TraversalRootVisitor<G extends Traversal> extends GremlinBaseVisito
         if (ctx.getChild(0) instanceof GremlinParser.RootTraversalContext) {
             return visitChildren(ctx);
         } else if (ctx.getChild(2) instanceof GremlinParser.ChainedParentOfGraphTraversalContext) {
-            return new TraversalRootVisitor<Traversal>(antlr.createAnonymous.get()).
+            return new TraversalRootVisitor<Traversal>(antlr, antlr.createAnonymous.get()).
                     visitChainedParentOfGraphTraversal(ctx.chainedTraversal().chainedParentOfGraphTraversal());
         } else {
             return new TraversalMethodVisitor(antlr, antlr.createAnonymous.get()).visitChainedTraversal(ctx.chainedTraversal());
@@ -76,7 +76,7 @@ public class TraversalRootVisitor<G extends Traversal> extends GremlinBaseVisito
                 (GremlinParser.TraversalSourceContext) ctx.getChild(childIndexOfTraversalSource));
         // call traversal source spawn method
         final int childIndexOfTraversalSourceSpawnMethod = 2;
-        final GraphTraversal traversal = new TraversalSourceSpawnMethodVisitor(source, this).visitTraversalSourceSpawnMethod(
+        final GraphTraversal traversal = new TraversalSourceSpawnMethodVisitor(source, this, antlr).visitTraversalSourceSpawnMethod(
                 (GremlinParser.TraversalSourceSpawnMethodContext) ctx.getChild(childIndexOfTraversalSourceSpawnMethod));
 
         if (ctx.getChildCount() == 5) {
@@ -84,7 +84,7 @@ public class TraversalRootVisitor<G extends Traversal> extends GremlinBaseVisito
             final int childIndexOfChainedTraversal = 4;
 
             if (ctx.getChild(childIndexOfChainedTraversal) instanceof GremlinParser.ChainedParentOfGraphTraversalContext) {
-                final TraversalRootVisitor traversalRootVisitor = new TraversalRootVisitor(traversal);
+                final TraversalRootVisitor traversalRootVisitor = new TraversalRootVisitor(antlr, traversal);
                 return traversalRootVisitor.visitChainedParentOfGraphTraversal(
                         (GremlinParser.ChainedParentOfGraphTraversalContext) ctx.getChild(childIndexOfChainedTraversal));
             } else {
diff --git 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
index 8833950..173cfab 100644
--- 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
@@ -30,8 +30,6 @@ import java.util.List;
  * A {@link GraphTraversalSource} self method visitor.
  */
 public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTraversalSource> {
-
-    private GremlinBaseVisitor<TraversalStrategy> traversalStrategyVisitor;
     private GraphTraversalSource source;
     private final GremlinAntlrToJava antlr;
 
@@ -56,7 +54,7 @@ public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTr
     {
         final int childIndexOfParameterUseBulk = 2;
 
-        final Boolean useBulk = (Boolean)(GenericLiteralVisitor.getInstance().visitBooleanLiteral(
+        final Boolean useBulk = (Boolean) (antlr.genericLiteralVisitor.visitBooleanLiteral(
                 (GremlinParser.BooleanLiteralContext)(ctx.getChild(childIndexOfParameterUseBulk))));
 
         return source.withBulk(useBulk);
@@ -80,12 +78,12 @@ public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTr
         final int childIndexOfParameterInitialValue = 2;
 
         if (ctx.getChildCount() == 4) {
-            return source.withSack(GenericLiteralVisitor.getInstance().visitGenericLiteral(
+            return source.withSack(antlr.genericLiteralVisitor.visitGenericLiteral(
                     ParseTreeContextCastHelper.castChildToGenericLiteral(ctx, childIndexOfParameterInitialValue)));
         } else {
             final int childIndexOfParameterMergeOperator = 4;
 
-            return source.withSack(GenericLiteralVisitor.getInstance().visitGenericLiteral(
+            return source.withSack(antlr.genericLiteralVisitor.visitGenericLiteral(
                     ParseTreeContextCastHelper.castChildToGenericLiteral(ctx, childIndexOfParameterInitialValue)),
                     TraversalEnumParser.parseTraversalEnumFromContext(Operator.class, ctx.getChild(childIndexOfParameterMergeOperator)));
         }
@@ -100,9 +98,9 @@ public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTr
         final int childIndexOfParameterKey = 2;
         final int childIndexOfParameterInitialValue = 4;
 
-        final String argument1 = (String)(GenericLiteralVisitor.getInstance().visitStringLiteral(
+        final String argument1 = (String)(antlr.genericLiteralVisitor.visitStringLiteral(
                 (GremlinParser.StringLiteralContext)(ctx.getChild(childIndexOfParameterKey))));
-        final Object argument2 = GenericLiteralVisitor.getInstance().visitGenericLiteral(
+        final Object argument2 = antlr.genericLiteralVisitor.visitGenericLiteral(
                 (GremlinParser.GenericLiteralContext)(ctx.getChild(childIndexOfParameterInitialValue)));
 
         return source.withSideEffect(argument1, argument2);
@@ -110,19 +108,15 @@ public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTr
 
     @Override
     public GraphTraversalSource visitTraversalSourceSelfMethod_withStrategies(final GremlinParser.TraversalSourceSelfMethod_withStrategiesContext ctx) {
-
-        if (null == traversalStrategyVisitor)
-            traversalStrategyVisitor = new TraversalStrategyVisitor((GremlinBaseVisitor) antlr.tvisitor);
-
         // with 4 children withStrategies() was called with a single TraversalStrategy, otherwise multiple were
         // specified.
         if (ctx.getChildCount() < 5) {
-            return source.withStrategies(traversalStrategyVisitor.visitTraversalStrategy((GremlinParser.TraversalStrategyContext) ctx.getChild(2)));
+            return source.withStrategies(antlr.traversalStrategyVisitor.visitTraversalStrategy((GremlinParser.TraversalStrategyContext) ctx.getChild(2)));
         } else {
-            final Object[] vargs = GenericLiteralVisitor.getTraversalStrategyList(
-                    (GremlinParser.TraversalStrategyListContext) ctx.getChild(4), traversalStrategyVisitor);
+            final Object[] vargs = antlr.genericLiteralVisitor.getTraversalStrategyList(
+                    (GremlinParser.TraversalStrategyListContext) ctx.getChild(4), antlr.traversalStrategyVisitor);
             final List<TraversalStrategy> strats = new ArrayList<>(Arrays.asList(Arrays.copyOf(vargs, vargs.length, TraversalStrategy[].class)));
-            strats.add(0, traversalStrategyVisitor.visitTraversalStrategy((GremlinParser.TraversalStrategyContext) ctx.getChild(2)));
+            strats.add(0, antlr.traversalStrategyVisitor.visitTraversalStrategy((GremlinParser.TraversalStrategyContext) ctx.getChild(2)));
             return source.withStrategies(strats.toArray(new TraversalStrategy[strats.size()]));
         }
     }
@@ -136,15 +130,15 @@ public class TraversalSourceSelfMethodVisitor extends GremlinBaseVisitor<GraphTr
         final int childIndexOfParameterKey = 2;
 
         if (ctx.getChildCount() == 4) {
-            final String argument1 = (String)(GenericLiteralVisitor.getInstance().visitStringLiteral(
+            final String argument1 = (String) (antlr.genericLiteralVisitor.visitStringLiteral(
                     (GremlinParser.StringLiteralContext)(ctx.getChild(childIndexOfParameterKey))));
             return source.with(argument1);
         } else {
             final int childIndexOfParameterInitialValue = 4;
 
-            final String argument1 = (String)(GenericLiteralVisitor.getInstance().visitStringLiteral(
+            final String argument1 = (String)(antlr.genericLiteralVisitor.visitStringLiteral(
                     (GremlinParser.StringLiteralContext)(ctx.getChild(childIndexOfParameterKey))));
-            final Object argument2 = GenericLiteralVisitor.getInstance().visitGenericLiteral(
+            final Object argument2 = antlr.genericLiteralVisitor.visitGenericLiteral(
                     (GremlinParser.GenericLiteralContext)(ctx.getChild(childIndexOfParameterInitialValue)));
             return source.with(argument1, argument2);
         }
diff --git 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
index 73e8612..4b8b81a 100644
--- 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
@@ -30,10 +30,13 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     protected GraphTraversalSource traversalSource;
     protected GraphTraversal graphTraversal;
     protected final GremlinBaseVisitor<Traversal> anonymousVisitor;
+    protected final GremlinAntlrToJava antlr;
 
     public TraversalSourceSpawnMethodVisitor(final GraphTraversalSource traversalSource,
-                                             final GremlinBaseVisitor<Traversal> anonymousVisitor) {
+                                             final GremlinBaseVisitor<Traversal> anonymousVisitor,
+                                             final GremlinAntlrToJava antlr) {
         this.traversalSource = traversalSource;
+        this.antlr = antlr;
         this.anonymousVisitor = anonymousVisitor;
     }
 
@@ -51,7 +54,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_addE(final GremlinParser.TraversalSourceSpawnMethod_addEContext ctx) {
         if (ctx.stringLiteral() != null) {
-            return this.traversalSource.addE(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return this.traversalSource.addE(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else if (ctx.nestedTraversal() != null) {
             return this.traversalSource.addE(anonymousVisitor.visitNestedTraversal(ctx.nestedTraversal()));
         } else {
@@ -65,7 +68,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_addV(final GremlinParser.TraversalSourceSpawnMethod_addVContext ctx) {
         if (ctx.stringLiteral() != null) {
-            return this.traversalSource.addV(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            return this.traversalSource.addV(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
         } else if (ctx.nestedTraversal() != null) {
             return this.traversalSource.addV(anonymousVisitor.visitNestedTraversal(ctx.nestedTraversal()));
         } else {
@@ -79,7 +82,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_E(final GremlinParser.TraversalSourceSpawnMethod_EContext ctx) {
         if (ctx.genericLiteralList().getChildCount() > 0) {
-            return this.traversalSource.E(GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+            return this.traversalSource.E(antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
         } else {
             return this.traversalSource.E();
         }
@@ -91,7 +94,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_V(final GremlinParser.TraversalSourceSpawnMethod_VContext ctx) {
         if (ctx.genericLiteralList().getChildCount() > 0) {
-            return this.traversalSource.V(GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+            return this.traversalSource.V(antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
         } else {
             return this.traversalSource.V();
         }
@@ -101,7 +104,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
      */
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_inject(final GremlinParser.TraversalSourceSpawnMethod_injectContext ctx) {
-        return this.traversalSource.inject(GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
+        return this.traversalSource.inject(antlr.genericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
     }
 
     /**
@@ -110,7 +113,7 @@ public class TraversalSourceSpawnMethodVisitor extends GremlinBaseVisitor<GraphT
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_io(final GremlinParser.TraversalSourceSpawnMethod_ioContext ctx) {
         if (ctx.getChildCount() > 2) {
-            this.graphTraversal = this.traversalSource.io(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+            this.graphTraversal = this.traversalSource.io((String) antlr.genericLiteralVisitor.visitStringLiteral(ctx.stringLiteral()));
         }
         return graphTraversal;
     }
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitor.java
index 0385d98..1e37b26 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitor.java
@@ -29,15 +29,18 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Edge
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReservedKeysVerificationStrategy;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 
 public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrategy> {
+    protected final GremlinAntlrToJava antlr;
     protected final GremlinBaseVisitor<Traversal> tvisitor;
 
-    public TraversalStrategyVisitor(final GremlinBaseVisitor<Traversal> tvisitor) {
-        this.tvisitor = tvisitor;
+    public TraversalStrategyVisitor(final GremlinAntlrToJava antlr) {
+        this.tvisitor = (GremlinBaseVisitor) antlr.tvisitor;
+        this.antlr = antlr;
     }
 
     @Override
@@ -68,7 +71,7 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         throw new IllegalStateException("Unexpected TraversalStrategy specification - " + ctx.getText());
     }
 
-    private static EdgeLabelVerificationStrategy getEdgeLabelVerificationStrategy(final List<GremlinParser.TraversalStrategyArgs_EdgeLabelVerificationStrategyContext> ctxs) {
+    private  EdgeLabelVerificationStrategy getEdgeLabelVerificationStrategy(final List<GremlinParser.TraversalStrategyArgs_EdgeLabelVerificationStrategyContext> ctxs) {
         if (null == ctxs || ctxs.isEmpty())
             return EdgeLabelVerificationStrategy.build().create();
 
@@ -76,10 +79,10 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         ctxs.forEach(ctx -> {
             switch (ctx.getChild(0).getText()) {
                 case AbstractWarningVerificationStrategy.LOG_WARNING:
-                    builder.logWarning(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.logWarning(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
                 case AbstractWarningVerificationStrategy.THROW_EXCEPTION:
-                    builder.throwException(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.throwException(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
             }
         });
@@ -87,7 +90,7 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         return builder.create();
     }
 
-    private static ReservedKeysVerificationStrategy getReservedKeysVerificationStrategy(final List<GremlinParser.TraversalStrategyArgs_ReservedKeysVerificationStrategyContext> ctxs) {
+    private ReservedKeysVerificationStrategy getReservedKeysVerificationStrategy(final List<GremlinParser.TraversalStrategyArgs_ReservedKeysVerificationStrategyContext> ctxs) {
         if (null == ctxs || ctxs.isEmpty())
             return ReservedKeysVerificationStrategy.build().create();
 
@@ -95,13 +98,13 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         ctxs.forEach(ctx -> {
             switch (ctx.getChild(0).getText()) {
                 case AbstractWarningVerificationStrategy.LOG_WARNING:
-                    builder.logWarning(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.logWarning(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
                 case AbstractWarningVerificationStrategy.THROW_EXCEPTION:
-                    builder.throwException(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.throwException(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
                 case ReservedKeysVerificationStrategy.KEYS:
-                    builder.reservedKeys(new HashSet<>(Arrays.asList(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()))));
+                    builder.reservedKeys(new HashSet<>(Arrays.asList(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()))));
                     break;
             }
         });
@@ -109,21 +112,21 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         return builder.create();
     }
 
-    private static PartitionStrategy getPartitionStrategy(final List<GremlinParser.TraversalStrategyArgs_PartitionStrategyContext> ctxs) {
+    private PartitionStrategy getPartitionStrategy(final List<GremlinParser.TraversalStrategyArgs_PartitionStrategyContext> ctxs) {
         final PartitionStrategy.Builder builder = PartitionStrategy.build();
         ctxs.forEach(ctx -> {
             switch (ctx.getChild(0).getText()) {
                 case PartitionStrategy.INCLUDE_META_PROPERTIES:
-                    builder.includeMetaProperties(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.includeMetaProperties(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
                 case PartitionStrategy.READ_PARTITIONS:
-                    builder.readPartitions(Arrays.asList(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList())));
+                    builder.readPartitions(new ArrayList<>(Arrays.asList(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()))));
                     break;
                 case PartitionStrategy.WRITE_PARTITION:
-                    builder.writePartition(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+                    builder.writePartition(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
                     break;
                 case PartitionStrategy.PARTITION_KEY:
-                    builder.partitionKey(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
+                    builder.partitionKey(antlr.genericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
                     break;
             }
         });
@@ -145,7 +148,7 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
                     builder.vertexProperties(tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
                     break;
                 case SubgraphStrategy.CHECK_ADJACENT_VERTICES:
-                    builder.checkAdjacentVertices(GenericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
+                    builder.checkAdjacentVertices(antlr.genericLiteralVisitor.getBooleanLiteral(ctx.booleanLiteral()));
                     break;
             }
         });
@@ -153,9 +156,9 @@ public class TraversalStrategyVisitor extends GremlinBaseVisitor<TraversalStrate
         return builder.create();
     }
 
-    private static ProductiveByStrategy getProductiveByStrategy(final GremlinParser.TraversalStrategyArgs_ProductiveByStrategyContext ctx) {
+    private ProductiveByStrategy getProductiveByStrategy(final GremlinParser.TraversalStrategyArgs_ProductiveByStrategyContext ctx) {
         final ProductiveByStrategy.Builder builder = ProductiveByStrategy.build();
-        builder.productiveKeys(Arrays.asList(GenericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList())));
+        builder.productiveKeys(new ArrayList<>(Arrays.asList(antlr.genericLiteralVisitor.getStringLiteralList(ctx.stringLiteralList()))));
         return builder.create();
     }
 }
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
index 7791a08..a1a13f0 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/GeneralLiteralVisitorTest.java
@@ -54,7 +54,7 @@ public class GeneralLiteralVisitorTest {
         final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(query));
         final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
         final GremlinParser.GenericLiteralRangeContext ctx = parser.genericLiteralRange();
-        return GenericLiteralVisitor.getInstance().visitGenericLiteralRange(ctx);
+        return new GenericLiteralVisitor(null).visitGenericLiteralRange(ctx);
     }
 
     @RunWith(Parameterized.class)
@@ -240,9 +240,9 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser.StringLiteralContext ctx = parser.stringLiteral();
             if (expected.equals("Empty")) {
                 // handle special case for Empty string
-                assertEquals("", GenericLiteralVisitor.getInstance().visitStringLiteral(ctx));
+                assertEquals("", new GenericLiteralVisitor(null).visitStringLiteral(ctx));
             } else {
-                assertEquals(expected, GenericLiteralVisitor.getInstance().visitStringLiteral(ctx));
+                assertEquals(expected, new GenericLiteralVisitor(null).visitStringLiteral(ctx));
             }
         }
     }
@@ -282,7 +282,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(stringLiteral));
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.StringLiteralContext ctx = parser.stringLiteral();
-            assertEquals(expectedOutputChars, GenericLiteralVisitor.getInstance().visitStringLiteral(ctx));
+            assertEquals(expectedOutputChars, new GenericLiteralVisitor(null).visitStringLiteral(ctx));
         }
     }
 
@@ -349,7 +349,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.IntegerLiteralContext ctx = parser.integerLiteral();
 
-            final Object actualValue = GenericLiteralVisitor.getInstance().visitIntegerLiteral(ctx);
+            final Object actualValue = new GenericLiteralVisitor(null).visitIntegerLiteral(ctx);
             assertEquals(expected, actualValue);
         }
     }
@@ -386,7 +386,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.IntegerLiteralContext ctx = parser.integerLiteral();
 
-            assertEquals(new BigInteger(expected, radix), GenericLiteralVisitor.getInstance().visitIntegerLiteral(ctx));
+            assertEquals(new BigInteger(expected, radix), new GenericLiteralVisitor(null).visitIntegerLiteral(ctx));
         }
     }
 
@@ -432,7 +432,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.FloatLiteralContext ctx = parser.floatLiteral();
 
-            assertEquals(expected, GenericLiteralVisitor.getInstance().visitFloatLiteral(ctx));
+            assertEquals(expected, new GenericLiteralVisitor(null).visitFloatLiteral(ctx));
         }
     }
 
@@ -470,7 +470,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.DateLiteralContext ctx = parser.dateLiteral();
 
-            final Date dt = (Date) GenericLiteralVisitor.getInstance().visitDateLiteral(ctx);
+            final Date dt = (Date) new GenericLiteralVisitor(null).visitDateLiteral(ctx);
             assertEquals(expected, dt);
         }
     }
@@ -497,7 +497,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.BooleanLiteralContext ctx = parser.booleanLiteral();
 
-            assertEquals(expected, GenericLiteralVisitor.getInstance().visitBooleanLiteral(ctx));
+            assertEquals(expected, new GenericLiteralVisitor(null).visitBooleanLiteral(ctx));
         }
     }
 
@@ -524,7 +524,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(script));
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.GenericLiteralContext ctx = parser.genericLiteral();
-            final Object genericLiteral = GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx);
+            final Object genericLiteral = new GenericLiteralVisitor(null).visitGenericLiteral(ctx);
 
             // verify type is Map
             assertThat(genericLiteral, instanceOf(Map.class));
@@ -542,7 +542,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString("['world', 165, [12L, 0xA, 14.5, \"hello\"]]"));
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.GenericLiteralContext ctx = parser.genericLiteral();
-            final Object genericLiteral = GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx);
+            final Object genericLiteral = new GenericLiteralVisitor(null).visitGenericLiteral(ctx);
 
             // verify type is Object[]
             assertThat(genericLiteral, instanceOf(List.class));
@@ -585,7 +585,7 @@ public class GeneralLiteralVisitorTest {
             final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString("[]"));
             final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
             final GremlinParser.GenericLiteralContext ctx = parser.genericLiteral();
-            final Object genericLiteral = GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx);
+            final Object genericLiteral = new GenericLiteralVisitor(null).visitGenericLiteral(ctx);
 
             // verify type is Object[]
             assertThat(genericLiteral, instanceOf(List.class));
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitorTest.java
index 49e9756..b047053 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalStrategyVisitorTest.java
@@ -84,7 +84,7 @@ public class TraversalStrategyVisitorTest {
         final GremlinLexer lexer = new GremlinLexer(CharStreams.fromString(script));
         final GremlinParser parser = new GremlinParser(new CommonTokenStream(lexer));
         final GremlinParser.TraversalStrategyContext ctx = parser.traversalStrategy();
-        final TraversalStrategy strategy = new TraversalStrategyVisitor((GremlinBaseVisitor) antlrToLanguage.tvisitor).visitTraversalStrategy(ctx);
+        final TraversalStrategy strategy = new TraversalStrategyVisitor(antlrToLanguage).visitTraversalStrategy(ctx);
 
         assertEquals(expected, strategy);
         assertEquals(ConfigurationConverter.getMap(expected.getConfiguration()),