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

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


The following commit(s) were added to refs/heads/3.8-dev by this push:
     new 0b2e77e7f3 Remove GenericArgument from from() and to() (#3252)
0b2e77e7f3 is described below

commit 0b2e77e7f3cb893466722ddd86e75c4e5e1d38eb
Author: Cole Greer <[email protected]>
AuthorDate: Tue Oct 28 21:48:46 2025 -0700

    Remove GenericArgument from from() and to() (#3252)
    
    from() and to() will now only accept Strings (alias for __.select()) and 
Traversals. If users wish to pass a vertex id, they may embed it in __.V() or 
__.constant().
    
    The primary motivation here is to ensure consistent behaviour accross 
providers regardless of if their id types are numerics, strings, or other.
    
    This change is a followup to an unintended consequence stemming from 
https://github.com/apache/tinkerpop/pull/3133. The issue with directly allowing 
ID's to be passed into from/to, it creates a weird asymmetry for graphs which 
use Strings as their ids. For example g.addE().from(1).to(2) would work fine 
and create an edge from V[1] to V[2], however if the graph used String ids, the 
equivalent traversal (g.addE().from("a").to("b")) does not work, as the Strings 
are interpreted as path l [...]
    
    ---------
    
    Co-authored-by: andreachild <[email protected]>
---
 docs/src/dev/provider/gremlin-semantics.asciidoc   |  6 +++
 docs/src/reference/the-traversal.asciidoc          |  2 +
 docs/src/upgrade/release-3.8.x.asciidoc            | 37 +++++++++--------
 .../grammar/DefaultGremlinBaseVisitor.java         |  8 ----
 .../language/grammar/TraversalMethodVisitor.java   | 16 --------
 .../traversal/dsl/graph/GraphTraversal.java        | 48 ++++------------------
 .../map/AbstractAddElementStepPlaceholder.java     |  1 -
 .../traversal/step/TraversalParentTest.java        | 20 ++-------
 .../traversal/step/map/AddEdgeStartStepTest.java   |  9 ++--
 .../traversal/step/map/AddEdgeStepTest.java        |  8 ++--
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  6 +--
 gremlin-go/driver/cucumber/gremlin.go              |  6 +--
 .../gremlin-javascript/test/cucumber/gremlin.js    |  6 +--
 gremlin-language/src/main/antlr4/Gremlin.g4        |  2 -
 gremlin-python/src/main/python/radish/gremlin.py   |  6 +--
 .../gremlin/test/features/map/AddEdge.feature      | 10 ++---
 .../TinkerGraphGremlinLangScriptEngineTest.java    | 28 ++++++-------
 17 files changed, 79 insertions(+), 140 deletions(-)

diff --git a/docs/src/dev/provider/gremlin-semantics.asciidoc 
b/docs/src/dev/provider/gremlin-semantics.asciidoc
index 12bcf64107..4695fcbf94 100644
--- a/docs/src/dev/provider/gremlin-semantics.asciidoc
+++ b/docs/src/dev/provider/gremlin-semantics.asciidoc
@@ -535,6 +535,12 @@ The `addE()` step can be used as both a start step and a 
mid-traversal step. Whe
 and `to()` must be specified. When used as a mid-traversal step, the current 
traverser becomes the source vertex and
 only `to()` needs to be specified.
 
+The gremlin-lang grammar only permits `Traversal` and `String` (alias for 
`__.select(String)`) arguments in `from()` and
+`to()`. The `Traversal` must either produce a `Vertex` which is attachable to 
the graph, or it must produce the id of an
+existing `Vertex` in the graph. `GraphTraversal` implementations in GLVs may 
optionally support `from(Vertex)` and
+`to(Vertex)` as syntactic sugar. If translating to gremlin-lang scripts, these 
sugared modulators must be converted to
+`from(__.V(vertex.id()))` or `from(__.constant(vertex.id()))` (and equivalents 
for `to()`).
+
 *Exceptions*
 
 * If the edge label is null, an `IllegalArgumentException` will be thrown.
diff --git a/docs/src/reference/the-traversal.asciidoc 
b/docs/src/reference/the-traversal.asciidoc
index d563c38b3d..dc32bc791b 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -553,6 +553,7 @@ vMarko = g.V().has('name','marko').next()
 vPeter = g.V().has('name','peter').next()
 g.V(vMarko).addE('knows').to(vPeter) <6>
 g.addE('knows').from(vMarko).to(vPeter) <7>
+g.addE('knows').from(__.V(1)).to(__.constant(6)) <8>
 ----
 
 <1> Add a co-developer edge with a year-property between marko and his 
collaborators.
@@ -563,6 +564,7 @@ g.addE('knows').from(vMarko).to(vPeter) <7>
 supports user provided ids.
 <6> Add an edge between marko and peter given the directed (detached) vertex 
references.
 <7> Add an edge between marko and peter given the directed (detached) vertex 
references.
+<8> Use child traversals producing either a vertex, or vertex id to add an 
edge between marko and peter.
 
 *Additional References*
 
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc 
b/docs/src/upgrade/release-3.8.x.asciidoc
index b1dbae99b4..9f254b581d 100644
--- a/docs/src/upgrade/release-3.8.x.asciidoc
+++ b/docs/src/upgrade/release-3.8.x.asciidoc
@@ -737,41 +737,44 @@ after construction. All usages of `P.getOriginalValue()` 
should be replaced with
 
 A number of changes have been introduced to the Gremlin grammar to help make 
it be more consistent and easier to use.
 
-*Removed Vertex References for Grammar*
+*Removed StructureVertex from Grammar*
 
 The grammar allowed the construction of a `Vertex` by way of syntax like `new 
Vertex(1,'person')` (or with similar
 arguments to `ReferenceVertex`). This syntax has been removed as it served 
little purpose within the grammar as it
 merely adds more characters to wrap around the identifier, which could simply 
be used by itself.
 
 The `V()` step, as well as the `from()` and `to()` modulators used with 
`addE()`, previously accepted `Vertex` as
-arguments in the grammar. In its place, the `from()` and `to()` modulators can 
now directly accept a vertex id in place
-of a `Vertex` when used with `addE()` (`V()` has always accepted ids in 
addition to vertices). When using these steps in
-`gremlin-lang` scripts, the vertex id must be used directly.
+arguments in the grammar. The `V()` step has always accepted vertex ids as 
arguments, and continues to do so. The
+`from()` and `to()` modulators for `addE()` continue to accept `String` 
arguments (which are a shorthand for
+`__.select(String)`), as well as `Traversal` arguments. As always, these 
`Traversal` arguments may produce `Vertex`
+objects (such as `__.V(1)`) to directly bind to from/to. Newly added in 3.8.0, 
the `Traversal` may also produce the id
+of a vertex present in the graph (such as `__.constant(1)`), which will then 
bind to from/to.
 
-This change has no effect on the `GraphTraversal` API, nor on `gremlin-groovy` 
scripts. Vertices can continue to be used
-directly in those contexts.
+When using these steps in `gremlin-lang` scripts, a `Traversal` or `String` 
argument must be used directly. This change
+has no effect on the `GraphTraversal` API, nor on `gremlin-groovy` scripts. 
Vertices can continue to be used directly in
+those contexts.
 
 [source,text]
 ----
-// 3.7.3
+// 3.7.4
 gremlin> v1 = g.V(1).next()
 ==>v[1]
-gremlin> v2 = g.V(2).next()
-==>v[2]
-gremlin> script = String.format("g.V(new Vertex(%s)).outE().where(inV().is(new 
Vertex(%s)))", v1.id(), v2.id())
-==>g.V(new Vertex(1)).outE().where(inV().is(new Vertex(2)))
+gremlin> v6 = g.V(6).next()
+==>v[6]
+gremlin> script = String.format("g.addE('knows').from(new Vertex(%s)).to(new 
ReferenceVertex(%s))", v1.id(), v6.id())
+==>g.addE('knows').from(new Vertex(1)).to(new ReferenceVertex(6))
 gremlin> client.submit(script).all().get().get(0).getEdge()
-==>e[7][1-knows->2]
+==>e[0][1-knows->6]
 
 // 3.8.0
 gremlin> v1 = g.V(1).next()
 ==>v[1]
-gremlin> v2 = g.V(2).next()
-==>v[2]
-gremlin> script = String.format("g.V(%s).outE().where(inV().id().is(%s))", 
v1.id(), v2.id())
-==>g.V(1).outE().where(inV().id().is(2))
+gremlin> v6 = g.V(6).next()
+==>v[6]
+gremlin> script = 
String.format("g.addE('knows').from(__.V(%s)).to(__.constant(%s))", v1.id(), 
v6.id())
+==>g.addE('knows').from(__.V(1)).to(__.constant(6))
 gremlin> client.submit(script).all().get().get(0).getEdge()
-==>e[7][1-knows->2]
+==>e[0][1-knows->6]
 ----
 
 *`new` keyword is now optional*
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
index 8227c1830b..923edda0fb 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
@@ -403,10 +403,6 @@ public class DefaultGremlinBaseVisitor<T> extends 
AbstractParseTreeVisitor<T> im
         * {@inheritDoc}
         */
        @Override public T visitTraversalMethod_from_String(final 
GremlinParser.TraversalMethod_from_StringContext ctx) { notImplemented(ctx); 
return null; }
-       /**
-        * {@inheritDoc}
-        */
-       @Override public T visitTraversalMethod_from_GenricArgument(final 
GremlinParser.TraversalMethod_from_GenricArgumentContext ctx) { return null; }
        /**
         * {@inheritDoc}
         */
@@ -839,10 +835,6 @@ public class DefaultGremlinBaseVisitor<T> extends 
AbstractParseTreeVisitor<T> im
         * {@inheritDoc}
         */
        @Override public T visitTraversalMethod_to_String(final 
GremlinParser.TraversalMethod_to_StringContext ctx) { notImplemented(ctx); 
return null; }
-       /**
-        * {@inheritDoc}
-        */
-       @Override public T visitTraversalMethod_to_GenricArgument(final 
GremlinParser.TraversalMethod_to_GenricArgumentContext ctx) { 
notImplemented(ctx); return null; }
        /**
         * {@inheritDoc}
         */
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 0b038cfd8b..2393b0b487 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
@@ -1865,22 +1865,6 @@ public class TraversalMethodVisitor extends 
TraversalRootVisitor<GraphTraversal>
                 antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public GraphTraversal visitTraversalMethod_from_GenricArgument(final 
GremlinParser.TraversalMethod_from_GenricArgumentContext ctx) {
-        return 
graphTraversal.from(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Traversal visitTraversalMethod_to_GenricArgument(final 
GremlinParser.TraversalMethod_to_GenricArgumentContext ctx) {
-        return 
graphTraversal.to(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
-    }
-
     /**
      * {@inheritDoc}
      */
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 53af3f463a..4ef2d82e24 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -1603,14 +1603,14 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
      * @since 3.8.0
      */
-    public default GraphTraversal<S, E> from(final GValue<Vertex> fromVertex) {
+    public default GraphTraversal<S, E> from(final GValue<?> fromVertex) {
         final Step<?,?> prev = this.asAdmin().getEndStep();
         if (!(prev instanceof FromToModulating))
             throw new IllegalArgumentException(String.format(
                     "The from() step cannot follow %s", 
prev.getClass().getSimpleName()));
 
         this.asAdmin().getBytecode().addStep(Symbols.from, fromVertex);
-        ((FromToModulating) prev).addFrom(new GValueConstantTraversal<S, 
Vertex>(fromVertex));
+        ((FromToModulating) prev).addFrom(new 
GValueConstantTraversal<>(fromVertex));
         return this;
     }
 
@@ -1662,14 +1662,14 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
      * @since 3.8.0
      */
-    public default GraphTraversal<S, E> to(final GValue<Vertex> toVertex) {
+    public default GraphTraversal<S, E> to(final GValue<?> toVertex) {
         final Step<?,?> prev = this.asAdmin().getEndStep();
         if (!(prev instanceof FromToModulating))
             throw new IllegalArgumentException(String.format(
                     "The to() step cannot follow %s", 
prev.getClass().getSimpleName()));
 
         this.asAdmin().getBytecode().addStep(Symbols.to, toVertex);
-        ((FromToModulating) prev).addTo(new GValueConstantTraversal<S, 
Vertex>(toVertex));
+        ((FromToModulating) prev).addTo(new 
GValueConstantTraversal<>(toVertex));
         return this;
     }
 
@@ -1682,7 +1682,7 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
      * @since 3.1.0-incubating
      */
-    public default GraphTraversal<S, E> to(final Traversal<?, Object> 
toVertex) {
+    public default GraphTraversal<S, E> to(final Traversal<?, ?> toVertex) {
         final Step<?,?> prev = this.asAdmin().getEndStep();
         if (!(prev instanceof FromToModulating))
             throw new IllegalArgumentException(String.format(
@@ -1702,7 +1702,7 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
      * @since 3.1.0-incubating
      */
-    public default GraphTraversal<S, E> from(final Traversal<?, Object> 
fromVertex) {
+    public default GraphTraversal<S, E> from(final Traversal<?, ?> fromVertex) 
{
         final Step<?,?> prev = this.asAdmin().getEndStep();
         if (!(prev instanceof FromToModulating))
             throw new IllegalArgumentException(String.format(
@@ -1722,13 +1722,7 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
      * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
      * @since 3.3.0
      */
-    public default GraphTraversal<S, E> to(final Object toVertex) {
-        if (toVertex instanceof String) {
-            return this.to((String) toVertex);
-        } else if (toVertex instanceof Traversal) {
-            this.to((Traversal<?, Object>)toVertex);
-            return this;
-        }
+     public default GraphTraversal<S, E> to(final Vertex toVertex) {
         final Step<?,?> prev = this.asAdmin().getEndStep();
         if (!(prev instanceof FromToModulating))
             throw new IllegalArgumentException(String.format(
@@ -1741,34 +1735,6 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
         return this;
     }
 
-    /**
-     * When used as a modifier to {@link #addE(String)} this method specifies 
the traversal to use for selecting the
-     * outgoing vertex of the newly added {@link Edge}.
-     *
-     * @param fromVertex the vertex for selecting the outgoing vertex
-     * @return the traversal with the modified {@link AddEdgeStepContract}
-     * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step";
 target="_blank">Reference Documentation - From Step</a>
-     * @since 3.3.0
-     */
-    public default GraphTraversal<S, E> from(final Object fromVertex) {
-        if (fromVertex instanceof String) {
-            return this.from((String) fromVertex);
-        } else if (fromVertex instanceof Traversal) {
-            this.from((Traversal<?, Object>)fromVertex);
-            return this;
-        }
-        final Step<?,?> prev = this.asAdmin().getEndStep();
-        if (!(prev instanceof FromToModulating))
-            throw new IllegalArgumentException(String.format(
-                    "The from() step cannot follow %s", 
prev.getClass().getSimpleName()));
-
-        this.asAdmin().getBytecode().addStep(Symbols.from, fromVertex);
-        ((FromToModulating) prev).addFrom(fromVertex instanceof GValue ?
-                new GValueConstantTraversal<>((GValue<Object>) fromVertex) :
-                __.constant(fromVertex).asAdmin());
-        return this;
-    }
-
     /**
      * Map the {@link Traverser} to a {@link Double} according to the 
mathematical expression provided in the argument.
      *
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
index 66a3fca8fe..82e1b39f93 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
@@ -20,7 +20,6 @@ package 
org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValueHolder;
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
index 1ed4d14bcd..d69eef0029 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
@@ -207,12 +207,6 @@ public class TraversalParentTest {
                         List.of(__.constant("name"), __.constant("cole")),
                         null, null
                 },
-                {AddEdgeStepContract.class,
-                        g.addE("label").from(1).to(2).property("name", 
__.constant("cole")),
-                        List.of(),
-                        List.of(__.constant("cole"), __.constant(1), 
__.constant(2)),
-                        null, null
-                },
                 {AddEdgeStepContract.class,
                         g.addE("label").from(__.V(1)).to(__.V(2))
                                 .property("name", __.constant("cole"))
@@ -234,15 +228,9 @@ public class TraversalParentTest {
                         null, null
                 },
                 {AddEdgeStepContract.class,
-                        
g.addE("label").from(1).to(2).property(__.constant("name"), 
__.constant("cole")),
-                        List.of(),
-                        List.of(__.constant("name"), __.constant("cole"), 
__.constant(1), __.constant(2)),
-                        null, null
-                },
-                {AddEdgeStepContract.class,
-                        
g.inject(1).addE("label").from(1).to(2).property("name", __.constant("cole")),
+                        
g.addE("label").from(__.V(1)).to(__.V(2)).property(__.constant("name"), 
__.constant("cole")),
                         List.of(),
-                        List.of(__.constant("cole"), __.constant(1), 
__.constant(2)),
+                        List.of(__.constant("name"), __.constant("cole"), 
__.V(1), __.V(2)),
                         null, null
                 },
                 {AddEdgeStepContract.class,
@@ -258,9 +246,9 @@ public class TraversalParentTest {
                         null, null
                 },
                 {AddEdgeStepContract.class,
-                        
g.inject(1).addE("label").from(1).to(2).property(__.constant("name"), 
__.constant("cole")),
+                        
g.inject(1).addE("label").from(__.V(1)).to(__.V(2)).property(__.constant("name"),
 __.constant("cole")),
                         List.of(),
-                        List.of(__.constant("name"), __.constant("cole"), 
__.constant(1), __.constant(2)),
+                        List.of(__.constant("name"), __.constant("cole"), 
__.V(1), __.V(2)),
                         null, null
                 },
                 {CallStepContract.class,
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
index 4fe528b85d..8df6682b5a 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
@@ -29,6 +29,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValueStepTest;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -55,7 +56,7 @@ public class AddEdgeStartStepTest extends GValueStepTest {
                 g.addE("created").property("a", "b"),
                 g.addE("knows").property("a", "b").property("c", "e"),
                 g.addE("knows").property("c", "e"),
-                g.addE("knows").from(1).to(2).property("a", "b"),
+                g.addE("knows").from(__.V(1)).to(__.V(2)).property("a", "b"),
                 g.addE(GValue.of("label", "knows")).property("a", "b"),
                 g.addE(GValue.of("label", "created")).property("a", 
GValue.of("prop", "b")),
                 g.addE(GValue.of("label", "knows")).property("a", 
GValue.of("prop1", "b")).property("c", GValue.of("prop2", "e")),
@@ -211,10 +212,10 @@ public class AddEdgeStartStepTest extends GValueStepTest {
     }
 
     @Test
-    public void getGValuesNonShouldReturnEmptyCollection() {
+    public void getGValuesNoneShouldReturnEmptyCollection() {
         GraphTraversal.Admin<Edge, Edge> traversal = g.addE("likes")
-                .from(1)
-                .to(2)
+                .from(__.V(1))
+                .to(__.V(2))
                 .property(T.id, "1234")
                 .property("rating", "great")
                 .asAdmin();
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
index 0abec8d7fd..76a9e82f47 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
@@ -60,7 +60,7 @@ public class AddEdgeStepTest extends GValueStepTest {
                 __.addE("created").property("a", "b"),
                 __.addE("knows").property("a", "b").property("c", "e"),
                 __.addE("knows").property("c", "e"),
-                __.addE("knows").from(1).to(2).property("a", "b"),
+                __.addE("knows").from(__.V(1)).to(__.V(2)).property("a", "b"),
                 __.addE(GValue.of("label", "knows")).property("a", "b"),
                 __.addE(GValue.of("label", "created")).property("a", 
GValue.of("prop", "b")),
                 __.addE(GValue.of("label", "knows")).property("a", 
GValue.of("prop1", "b")).property("c", GValue.of("prop2", "e")),
@@ -304,10 +304,10 @@ public class AddEdgeStepTest extends GValueStepTest {
     }
 
     @Test
-    public void getGValuesNonShouldReturnEmptyCollection() {
+    public void getGValuesNoneShouldReturnEmptyCollection() {
         GraphTraversal.Admin<Object, Edge> traversal = __.addE("likes")
-                .from(1)
-                .to(2)
+                .from(__.V(1))
+                .to(__.V(2))
                 .property(T.id, "1234")
                 .property("rating", "great")
                 .asAdmin();
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs 
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 174c7c385b..abb46e1776 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -879,9 +879,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                
{"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.AddV().As("first").Repeat(__.AddE("next").To(__.AddV()).InV()).Times(5).AddE("next").To(__.Select<object>("first")),
 (g,p) =>g.V(), (g,p) =>g.E(), (g,p) =>g.E().HasLabel("next"), (g,p) 
=>g.V().Limit<object>(1).BothE(), (g,p) =>g.V().Limit<object>(1).InE(), (g,p) 
=>g.V().Limit<object>(1).OutE()}}, 
                
{"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("softwar [...]
                
{"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("nam [...]
-               {"g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple" [...]
-               {"g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripp [...]
-               {"g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple").P [...]
+               {"g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple" [...]
+               {"g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripp [...]
+               {"g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).As("marko").AddV("person").Property("name", "vadas").Property("age", 
27).As("vadas").AddV("software").Property("name", "lop").Property("lang", 
"java").As("lop").AddV("person").Property("name", "josh").Property("age", 
32).As("josh").AddV("software").Property("name", "ripple").P [...]
                
{"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p) 
=>g.AddE("knows").Property("weight", null).From(__.V().Has("name", 
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight", 
(object) null)}}, 
                
{"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p) 
=>g.AddE((string) p["xx1"]).Property("weight", null).From(__.V().Has("name", 
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight", 
(object) null)}}, 
                
{"g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age", 
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p) 
=>g.Union<object>(__.AddE((string) p["xx1"]).Property("weight", 
1).From(__.V().Has("name", "marko")).To(__.V().Has("name", "vadas"))), (g,p) 
=>g.E().Has("knows", "we [...]
diff --git a/gremlin-go/driver/cucumber/gremlin.go 
b/gremlin-go/driver/cucumber/gremlin.go
index 2db3eaa111..5f80cdf7bc 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -849,9 +849,9 @@ var translationMap = map[string][]func(g 
*gremlingo.GraphTraversalSource, p map[
     
"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.AddV().As("first").Repeat(gremlingo.T__.AddE("next").To(gremlingo.T__.AddV()).InV()).Times(5).AddE("next").To(gremlingo.T__.Select("first"))},
 func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.V()}, func(g 
*gremlingo.GraphTraversalSource, p ma [...]
     
"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("softw [...]
     
"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("n [...]
-    "g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "rippl 
[...]
-    "g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "ri 
[...]
-    "g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", 
"ripple") [...]
+    "g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "rippl 
[...]
+    "g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", "ri 
[...]
+    "g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).As("marko").AddV("person").Property("name", 
"vadas").Property("age", 27).As("vadas").AddV("software").Property("name", 
"lop").Property("lang", "java").As("lop").AddV("person").Property("name", 
"josh").Property("age", 32).As("josh").AddV("software").Property("name", 
"ripple") [...]
     
"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).AddV("person").Property("name", 
"vadas").Property("age", 27)}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddE("knows").Property("weight", nil).From(gremlingo.T__.V().Has("name", "ma 
[...]
     
"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).AddV("person").Property("name", 
"vadas").Property("age", 27)}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.AddE(p["xx1"]).Property("weight", nil).From(gremlingo.T__.V().Has("name", 
[...]
     
"g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.AddV("person").Property("name", 
"marko").Property("age", 29).AddV("person").Property("name", 
"vadas").Property("age", 27)}, func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Union(gremlingo.T__.AddE(p["xx1"]).Property("weight", 1).From(grem [...]
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 7412f18ec4..72140c39ef 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -880,9 +880,9 @@ const gremlins = {
     
g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX:
 [function({g}) { return 
g.addV().as("first").repeat(__.addE("next").to(__.addV()).inV()).times(5).addE("next").to(__.select("first"))
 }, function({g}) { return g.V() }, function({g}) { return g.E() }, 
function({g}) { return g.E().hasLabel("next") }, function({g}) { return 
g.V().limit(1).bothE() }, function({g}) { return g.V().limit(1).inE() }, 
function({g}) { return g.V().limit(1).outE() }], 
     
g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX: 
[function({g, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").ad [...]
     
g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX:
 [function({g, vid2}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("n [...]
-    g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").prope [...]
-    g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, 
vid6, xx2, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").addV("person [...]
-    g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").property [...]
+    g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").prope [...]
+    g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, 
vid6, xx2, vid1}) { return g.addV("person").property("name", 
"marko").property("age", 29).as("marko").addV("person").property("name", 
"vadas").property("age", 27).as("vadas").addV("software").property("name", 
"lop").property("lang", "java").as("lop").addV("person").property("name", 
"josh").property("age", 32).as("josh").addV("software").property("name", 
"ripple").property("lang", "java").as("ripple").addV("person [...]
+    g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6, 
vid1}) { return g.addV("person").property("name", "marko").property("age", 
29).as("marko").addV("person").property("name", "vadas").property("age", 
27).as("vadas").addV("software").property("name", "lop").property("lang", 
"java").as("lop").addV("person").property("name", "josh").property("age", 
32).as("josh").addV("software").property("name", "ripple").property("lang", 
"java").as("ripple").addV("person").property [...]
     
g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
 [function({g}) { return g.addV("person").property("name", 
"marko").property("age", 29).addV("person").property("name", 
"vadas").property("age", 27) }, function({g}) { return 
g.addE("knows").property("weight", null).from_(__.V().has("name", 
"marko")).to(__.V().has("name", "vadas")) }, function({g}) { return 
g.E().has("knows", "weight", null) }], 
     
g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
 [function({g, xx1}) { return g.addV("person").property("name", 
"marko").property("age", 29).addV("person").property("name", 
"vadas").property("age", 27) }, function({g, xx1}) { return 
g.addE(xx1).property("weight", null).from_(__.V().has("name", 
"marko")).to(__.V().has("name", "vadas")) }, function({g, xx1}) { return 
g.E().has("knows", "weight", null) }], 
     
g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX:
 [function({g, xx1}) { return g.addV("person").property("name", 
"marko").property("age", 29).addV("person").property("name", 
"vadas").property("age", 27) }, function({g, xx1}) { return 
g.union(__.addE(xx1).property("weight", 1).from_(__.V().has("name", 
"marko")).to(__.V().has("name", "vadas"))) }, function({g, xx1}) { return 
g.E().has("knows", "weight", 1) }], 
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4 
b/gremlin-language/src/main/antlr4/Gremlin.g4
index 395eb0b8f4..b11ca3aa3b 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -530,7 +530,6 @@ traversalMethod_format
 
 traversalMethod_from
     : K_FROM LPAREN stringLiteral RPAREN #traversalMethod_from_String
-    | K_FROM LPAREN genericArgument RPAREN #traversalMethod_from_GenricArgument
     | K_FROM LPAREN nestedTraversal RPAREN #traversalMethod_from_Traversal
     ;
 
@@ -881,7 +880,6 @@ traversalMethod_times
 traversalMethod_to
     : K_TO LPAREN traversalDirection (COMMA stringNullableArgumentVarargs)? 
RPAREN #traversalMethod_to_Direction_String
     | K_TO LPAREN stringLiteral RPAREN #traversalMethod_to_String
-    | K_TO LPAREN genericArgument RPAREN #traversalMethod_to_GenricArgument
     | K_TO LPAREN nestedTraversal RPAREN #traversalMethod_to_Traversal
     ;
 
diff --git a/gremlin-python/src/main/python/radish/gremlin.py 
b/gremlin-python/src/main/python/radish/gremlin.py
index 9e9c26988d..1d4dad5b72 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -852,9 +852,9 @@ world.gremlins = {
     
'g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX':
 [(lambda 
g:g.add_v().as_('first').repeat(__.add_e('next').to(__.add_v()).in_v()).times(5).add_e('next').to(__.select('first'))),
 (lambda g:g.V()), (lambda g:g.E()), (lambda g:g.E().has_label('next')), 
(lambda g:g.V().limit(1).both_e()), (lambda g:g.V().limit(1).in_e()), (lambda 
g:g.V().limit(1).out_e())], 
     
'g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX':
 [(lambda g, vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple' [...]
     
'g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX':
 [(lambda g, vid2=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property [...]
-    'g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('p [...]
-    'g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,xx2=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('rippl [...]
-    'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('pers [...]
+    'g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('p [...]
+    'g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,xx2=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('rippl [...]
+    'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g, 
xx1=None,vid6=None,vid1=None:g.add_v('person').property('name', 
'marko').property('age', 29).as_('marko').add_v('person').property('name', 
'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 
'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 
'josh').property('age', 32).as_('josh').add_v('software').property('name', 
'ripple').property('lang', 'java').as_('ripple').add_v('pers [...]
     
'g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g:g.add_v('person').property('name', 'marko').property('age', 
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda 
g:g.add_e('knows').property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g:g.E().has('knows', 
'weight', None))], 
     
'g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
 [(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').property('age', 29).add_v('person').property('name', 
'vadas').property('age', 27)), (lambda g, 
xx1=None:g.add_e(xx1).property('weight', None).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas'))), (lambda g, 
xx1=None:g.E().has('knows', 'weight', None))], 
     
'g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX':
 [(lambda g, xx1=None:g.add_v('person').property('name', 
'marko').property('age', 29).add_v('person').property('name', 
'vadas').property('age', 27)), (lambda g, 
xx1=None:g.union(__.add_e(xx1).property('weight', 1).from_(__.V().has('name', 
'marko')).to(__.V().has('name', 'vadas')))), (lambda g, 
xx1=None:g.E().has('knows', 'weight', 1))], 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
index aa04e6a6b8..aa07d72dcc 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
@@ -359,7 +359,7 @@ Feature: Step - addE()
     And the graph should return 1 for count of "g.V(vid2).outE(\"created\")"
     And the graph should return 1 for count of 
"g.V(vid2).out(\"created\").has(\"name\",\"lop\")"
 
-  Scenario: g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X
+  Scenario: g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X
     Given the empty graph
     And the graph initializer of
       """
@@ -381,7 +381,7 @@ Feature: Step - addE()
     And using the parameter xx1 defined as "d[0.1].d"
     And the traversal of
       """
-      g.addE("knows").from(vid1).to(vid6).property("weight", xx1)
+      g.addE("knows").from(V(vid1)).to(V(vid6)).property("weight", xx1)
       """
     When iterated to list
     Then the result should have a count of 1
@@ -389,7 +389,7 @@ Feature: Step - addE()
     And the graph should return 3 for count of "g.V(vid1).outE(\"knows\")"
     And the graph should return 1 for count of 
"g.V(vid1).out(\"knows\").has(\"name\",\"peter\")"
 
-  Scenario: g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X
+  Scenario: g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X
     Given the empty graph
     And the graph initializer of
       """
@@ -412,7 +412,7 @@ Feature: Step - addE()
     And using the parameter xx2 defined as "d[0.1].d"
     And the traversal of
       """
-      g.addE(xx1).from(vid1).to(vid6).property("weight", xx2)
+      g.addE(xx1).from(V(vid1)).to(V(vid6)).property("weight", xx2)
       """
     When iterated to list
     Then the result should have a count of 1
@@ -442,7 +442,7 @@ Feature: Step - addE()
     And using the parameter xx1 defined as "d[0.1].d"
     And the traversal of
       """
-      g.V(vid1).addE("knows").to(vid6).property("weight", xx1)
+      g.V(vid1).addE("knows").to(V(vid6)).property("weight", xx1)
       """
     When iterated to list
     Then the result should have a count of 1
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
index 858d0aa6ed..47a422bf68 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
@@ -278,45 +278,45 @@ public class TinkerGraphGremlinLangScriptEngineTest {
                     TinkerFactory.createModern()
                 },
                 {
-                    "g.addE(\"knows\").from(v1).to(v2).project(\"from\", 
\"to\").by(outV()).by(inV())",
+                    
"g.addE(\"knows\").from(V(vid1)).to(V(vid2)).project(\"from\", 
\"to\").by(outV()).by(inV())",
                     Arrays.asList(
-                        Pair.of(createBindings("v1", V_MARKO, "v2", V_PETER), 
Arrays.asList(
+                        Pair.of(createBindings("vid1", V_MARKO.id(), "vid2", 
V_PETER.id()), Arrays.asList(
                                 Map.of("from", V_MARKO, "to", V_PETER)
                         )),
-                        Pair.of(createBindings("v1", V_JOSH, "v2", V_MARKO), 
Arrays.asList(
+                        Pair.of(createBindings("vid1", V_JOSH.id(), "vid2", 
V_MARKO.id()), Arrays.asList(
                                 Map.of("from", V_JOSH, "to", V_MARKO)
                         )),
-                        Pair.of(createBindings("v1", V_PETER, "v2", V_JOSH), 
Arrays.asList(
+                        Pair.of(createBindings("vid1", V_PETER.id(), "vid2", 
V_JOSH.id()), Arrays.asList(
                                 Map.of("from", V_PETER, "to", V_JOSH)
                         ))
                     ),
-                    TinkerGraph.open()
+                    TinkerFactory.createModern()
                 },
                 {
-                    "g.addE(xx1).from(v1).to(v2).property(\"weight\", 
xx2).project(\"label\", \"from\", \"to\", 
\"weight\").by(label).by(outV()).by(inV()).by(\"weight\")",
+                    
"g.addE(xx1).from(V(vid1)).to(V(vid2)).property(\"weight\", 
xx2).project(\"label\", \"from\", \"to\", 
\"weight\").by(label).by(outV()).by(inV()).by(\"weight\")",
                     Arrays.asList(
-                        Pair.of(createBindings("xx1", "knows", "v1", V_MARKO, 
"v2", V_PETER, "xx2", 0.1d), Arrays.asList(
+                        Pair.of(createBindings("xx1", "knows", "vid1", 1, 
"vid2", 6, "xx2", 0.1d), Arrays.asList(
                                 Map.of("label", "knows", "from", V_MARKO, 
"to", V_PETER, "weight", 0.1d)
                         )),
-                        Pair.of(createBindings("xx1", "created", "v1", V_JOSH, 
"v2", V_MARKO, "xx2", 0.2d), Arrays.asList(
+                        Pair.of(createBindings("xx1", "created", "vid1", 
V_JOSH.id(), "vid2", V_MARKO.id(), "xx2", 0.2d), Arrays.asList(
                                 Map.of("label", "created", "from", V_JOSH, 
"to", V_MARKO, "weight", 0.2d)
                         )),
-                        Pair.of(createBindings("xx1", "knows", "v1", V_PETER, 
"v2", V_JOSH, "xx2", 0.3d), Arrays.asList(
+                        Pair.of(createBindings("xx1", "knows", "vid1", 
V_PETER.id(), "vid2", V_JOSH.id(), "xx2", 0.3d), Arrays.asList(
                                 Map.of("label", "knows", "from", V_PETER, 
"to", V_JOSH, "weight", 0.3d)
                         ))
                     ),
-                    TinkerGraph.open()
+                    TinkerFactory.createModern()
                 },
                 {
-                    "g.V(v1).addE(\"knows\").to(v2).project(\"from\", 
\"to\").by(outV()).by(inV())",
+                    "g.V(v1).addE(\"knows\").to(V(vid2)).project(\"from\", 
\"to\").by(outV()).by(inV())",
                     Arrays.asList(
-                            Pair.of(createBindings("v1", V_MARKO, "v2", 
V_PETER), Arrays.asList(
+                            Pair.of(createBindings("v1", V_MARKO, "vid2", 
V_PETER.id()), Arrays.asList(
                                     Map.of("from", V_MARKO, "to", V_PETER)
                             )),
-                            Pair.of(createBindings("v1", V_JOSH, "v2", 
V_MARKO), Arrays.asList(
+                            Pair.of(createBindings("v1", V_JOSH, "vid2", 
V_MARKO.id()), Arrays.asList(
                                     Map.of("from", V_JOSH, "to", V_MARKO)
                             )),
-                            Pair.of(createBindings("v1", V_PETER, "v2", 
V_JOSH), Arrays.asList(
+                            Pair.of(createBindings("v1", V_PETER, "vid2", 
V_JOSH.id()), Arrays.asList(
                                     Map.of("from", V_PETER, "to", V_JOSH)
                             ))
                     ),

Reply via email to