You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/04/23 20:19:40 UTC

[1/2] incubator-tinkerpop git commit: removed SparsePath as it is an optimization that led to too many bugs and unexpected sideEffects. Made all the Traversers now extend AbstractStep (or a Traverser that ultimately extends AbstractStep). This greatly si

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master f4623086b -> f7ef918bf


removed SparsePath as it is an optimization that led to too many bugs and unexpected sideEffects. Made all the Traversers now extend AbstractStep (or a Traverser that ultimately extends AbstractStep). This greatly simplified the code. Fixed a test bug in MapTest.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f92ac863
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f92ac863
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f92ac863

Branch: refs/heads/master
Commit: f92ac8633a27b4aa59d4de356a651927112e361a
Parents: f462308
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 23 11:14:04 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 23 11:14:04 2015 -0600

----------------------------------------------------------------------
 .../traversal/step/filter/ExceptStep.java       |   2 +-
 .../traversal/step/filter/RetainStep.java       |   2 +-
 .../process/traversal/step/map/MapStep.java     |   4 -
 .../traversal/step/map/SelectOneStep.java       |  24 +--
 .../process/traversal/step/map/SelectStep.java  |  24 +--
 .../traversal/step/map/match/MatchStep.java     |   4 +-
 .../process/traversal/step/util/SparsePath.java |  95 ---------
 .../traverser/B_O_PA_S_SE_SL_Traverser.java     |  86 --------
 .../B_O_PA_S_SE_SL_TraverserGenerator.java      |  62 ------
 .../traverser/B_O_P_PA_S_SE_SL_Traverser.java   |  58 -----
 .../B_O_P_PA_S_SE_SL_TraverserGenerator.java    |  61 ------
 .../traverser/B_O_P_S_SE_SL_Traverser.java      | 107 ++++++++++
 .../B_O_P_S_SE_SL_TraverserGenerator.java       |  58 +++++
 .../traverser/B_O_S_SE_SL_Traverser.java        | 119 +++++++++++
 .../B_O_S_SE_SL_TraverserGenerator.java         |  59 ++++++
 .../traverser/TraverserRequirement.java         |   1 -
 .../traverser/util/AbstractPathTraverser.java   | 210 -------------------
 .../util/DefaultTraverserGeneratorFactory.java  |  12 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   |   8 +-
 .../traversal/step/map/GroovyMapTest.groovy     |   4 +-
 .../apache/tinkerpop/gremlin/GraphProvider.java |  13 +-
 .../process/traversal/step/map/MapTest.java     |   4 +-
 .../process/traversal/step/map/MatchTest.java   |   4 +-
 23 files changed, 375 insertions(+), 646 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
index 332037e..21ea5d3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/ExceptStep.java
@@ -92,6 +92,6 @@ public final class ExceptStep<S> extends FilterStep<S> {
                 Collections.singleton(TraverserRequirement.OBJECT) :
                 Stream.of(TraverserRequirement.OBJECT,
                         TraverserRequirement.SIDE_EFFECTS,
-                        TraverserRequirement.PATH_ACCESS).collect(Collectors.toSet());
+                        TraverserRequirement.PATH).collect(Collectors.toSet());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
index bc217d3..e056380 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RetainStep.java
@@ -92,6 +92,6 @@ public final class RetainStep<S> extends FilterStep<S> {
                 Collections.singleton(TraverserRequirement.OBJECT) :
                 Stream.of(TraverserRequirement.OBJECT,
                         TraverserRequirement.SIDE_EFFECTS,
-                        TraverserRequirement.PATH_ACCESS).collect(Collectors.toSet());
+                        TraverserRequirement.PATH).collect(Collectors.toSet());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
index 4d1dc9d..b7c2944 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
@@ -45,9 +45,5 @@ public abstract class MapStep<S, E> extends AbstractStep<S, E> {
 
     protected abstract E map(final Traverser.Admin<S> traverser);
 
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return Collections.singleton(TraverserRequirement.PATH_ACCESS); // TODO: this is bad -- just a hack right now.
-    }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
index fcc830e..6f6fe77 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
@@ -19,15 +19,12 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 
 import java.util.Collections;
 import java.util.List;
@@ -37,7 +34,7 @@ import java.util.Set;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class SelectOneStep<S, E> extends MapStep<S, E> implements TraversalParent, EngineDependent {
+public final class SelectOneStep<S, E> extends MapStep<S, E> implements TraversalParent {
 
     private final String selectLabel;
     private Traversal.Admin<Object, Object> selectTraversal = new IdentityTraversal<>();
@@ -58,19 +55,6 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
     }
 
     @Override
-    public void onEngine(final TraversalEngine traversalEngine) {
-        this.requiresPaths = traversalEngine.isComputer() ?
-                TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabel::equals).findAny().isPresent() :
-                TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
-                        .filter(step -> step instanceof CollectingBarrierStep)
-                        .filter(step -> TraversalHelper.getLabelsUpTo(step, this.traversal.asAdmin()).stream().filter(this.selectLabel::equals).findAny().isPresent()
-                                || (step.getLabel().isPresent() && this.selectLabel.equals(step.getLabel().get()))) // TODO: get rid of this (there is a test case to check it)
-                        .findAny().isPresent() ||
-                        TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream().
-                                filter(step -> step instanceof TraversalParent).findAny().isPresent();
-    }
-
-    @Override
     public String toString() {
         return TraversalHelper.makeStepString(this, this.selectLabel, this.selectTraversal);
     }
@@ -94,9 +78,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        final Set<TraverserRequirement> requirements = this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH_ACCESS);
-        if (this.requiresPaths) requirements.add(TraverserRequirement.PATH);
-        return requirements;
+        return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH);
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 3f62100..3c2bf76 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -20,15 +20,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 
 import java.util.Arrays;
 import java.util.LinkedHashMap;
@@ -39,7 +36,7 @@ import java.util.Set;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implements TraversalParent, EngineDependent {
+public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implements TraversalParent {
 
     protected TraversalRing<Object, Object> traversalRing = new TraversalRing<>();
     private final List<String> selectLabels;
@@ -84,19 +81,6 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
     }
 
     @Override
-    public void onEngine(final TraversalEngine traversalEngine) {
-        this.requiresPaths = traversalEngine.isComputer() ?
-                TraversalHelper.getLabelsUpTo(this, this.traversal.asAdmin()).stream().filter(this.selectLabels::contains).findAny().isPresent() :
-                TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream()
-                        .filter(step -> step instanceof CollectingBarrierStep)
-                        .filter(step -> TraversalHelper.getLabelsUpTo(step, this.traversal.asAdmin()).stream().filter(this.selectLabels::contains).findAny().isPresent()
-                                || (step.getLabel().isPresent() && this.selectLabels.contains(step.getLabel().get()))) // TODO: get rid of this (there is a test case to check it)
-                        .findAny().isPresent() ||
-                        TraversalHelper.getStepsUpTo(this, this.traversal.asAdmin()).stream().
-                                filter(step -> step instanceof TraversalParent).findAny().isPresent();
-    }
-
-    @Override
     public String toString() {
         return TraversalHelper.makeStepString(this, this.selectLabels, this.traversalRing);
     }
@@ -123,8 +107,6 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        final Set<TraverserRequirement> requirements = this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH_ACCESS);
-        if (this.requiresPaths) requirements.add(TraverserRequirement.PATH);
-        return requirements;
+        return this.getSelfAndChildRequirements(TraverserRequirement.OBJECT, TraverserRequirement.PATH);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
index d9cbf28..70e2ac3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/match/MatchStep.java
@@ -24,7 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
@@ -74,7 +74,7 @@ public final class MatchStep<S, E> extends AbstractStep<S, Map<String, E>> imple
         super(traversal);
         this.startLabel = startLabel;
         this.traversalsByStartAs = new HashMap<>();
-        this.currentStart = new B_O_PA_S_SE_SL_Traverser<>(null, this);
+        this.currentStart = new B_O_S_SE_SL_Traverser<>(null, this, 1l);    // TODO: bad? P?
         for (final Traversal tl : traversals) {
             addTraversalPrivate(tl);
             this.integrateChild(tl.asAdmin());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
deleted file mode 100644
index 2f55759..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/SparsePath.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.process.traversal.step.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Stream;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class SparsePath implements Path, Serializable {
-
-    private final Map<String, Object> map = new HashMap<>();
-    private Object currentObject = null;
-
-    protected SparsePath() {
-
-    }
-
-    public static SparsePath make() {
-        return new SparsePath();
-    }
-
-    @Override
-    public Path extend(final Object object, final String... labels) {
-        this.currentObject = object;
-        if (labels.length > 0)
-            Stream.of(labels).forEach(label -> this.map.put(label, object));
-        return this;
-    }
-
-    @Override
-    public void addLabel(final String label) {
-        this.map.put(label, this.currentObject);
-    }
-
-    @Override
-    public List<Object> objects() {
-        return Collections.unmodifiableList(new ArrayList<>(this.map.values()));
-    }
-
-    @Override
-    public List<Set<String>> labels() {
-        final List<Set<String>> labels = new ArrayList<>();
-        this.map.forEach((k, v) -> labels.add(Collections.singleton(k)));
-        return Collections.unmodifiableList(labels);
-    }
-
-
-    public <A> A get(final String label) throws IllegalArgumentException {
-        final Object object = this.map.get(label);
-        if (null == object)
-            throw Path.Exceptions.stepWithProvidedLabelDoesNotExist(label);
-        return (A) object;
-    }
-
-    @Override
-    public boolean hasLabel(final String label) {
-        return this.map.containsKey(label);
-    }
-
-    @Override
-    public Path clone() {
-        return this;
-    }
-
-    @Override
-    public int size() {
-        return this.map.size();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
deleted file mode 100644
index 4a8925f..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_Traverser.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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.process.traversal.traverser;
-
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.AbstractPathTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.SparsePath;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-
-import java.util.Map;
-import java.util.Optional;
-import java.util.WeakHashMap;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_PA_S_SE_SL_Traverser<T> extends AbstractPathTraverser<T> {
-
-    protected B_O_PA_S_SE_SL_Traverser() {
-    }
-
-    public B_O_PA_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
-        super(t, step);
-        final Optional<String> stepLabel = step.getLabel();
-        this.path = stepLabel.isPresent() ?
-                getOrCreateFromCache(this.sideEffects).extend(t, stepLabel.get()) :
-                getOrCreateFromCache(this.sideEffects).extend(t);
-    }
-
-    @Override
-    public int hashCode() {
-        return this.t.hashCode() + this.future.hashCode() + this.loops;
-    }
-
-    @Override
-    public boolean equals(final Object object) {
-        return object instanceof B_O_PA_S_SE_SL_Traverser
-                && ((B_O_PA_S_SE_SL_Traverser) object).get().equals(this.t)
-                && ((B_O_PA_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
-                && ((B_O_PA_S_SE_SL_Traverser) object).loops() == this.loops()
-                && (null == this.sack);
-    }
-
-    @Override
-    public T attach(final Vertex vertex, final Method method) {
-        super.attach(vertex, method);
-        final Path newSparsePath = getOrCreateFromCache(this.sideEffects);
-        this.path.forEach((object, labels) -> newSparsePath.extend(object, labels.toArray(new String[labels.size()])));
-        this.path = newSparsePath;
-        return this.t;
-    }
-
-    //////////////////////
-
-    private static final Map<TraversalSideEffects, SparsePath> PATH_CACHE = new WeakHashMap<>();
-
-    private static SparsePath getOrCreateFromCache(final TraversalSideEffects sideEffects) {
-        SparsePath path = PATH_CACHE.get(sideEffects);
-        if (null == path) {
-            path = SparsePath.make();
-            PATH_CACHE.put(sideEffects, path);
-        }
-        return path;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
deleted file mode 100644
index dc25bad..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_PA_S_SE_SL_TraverserGenerator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_PA_S_SE_SL_TraverserGenerator implements TraverserGenerator {
-
-    private static final B_O_PA_S_SE_SL_TraverserGenerator INSTANCE = new B_O_PA_S_SE_SL_TraverserGenerator();
-
-    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
-            TraverserRequirement.OBJECT,
-            TraverserRequirement.BULK,
-            TraverserRequirement.SINGLE_LOOP,
-            TraverserRequirement.PATH_ACCESS,
-            TraverserRequirement.SACK,
-            TraverserRequirement.SIDE_EFFECTS);
-
-
-    private B_O_PA_S_SE_SL_TraverserGenerator() {
-    }
-
-    @Override
-    public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
-        final B_O_PA_S_SE_SL_Traverser<S> traverser = new B_O_PA_S_SE_SL_Traverser<>(start, startStep);
-        traverser.setBulk(initialBulk);
-        return traverser;
-    }
-
-    @Override
-    public Set<TraverserRequirement> getProvidedRequirements() {
-        return REQUIREMENTS;
-    }
-
-    public static B_O_PA_S_SE_SL_TraverserGenerator instance() {
-        return INSTANCE;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
deleted file mode 100644
index 71129f0..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_Traverser.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.AbstractPathTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ImmutablePath;
-
-import java.util.Optional;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_P_PA_S_SE_SL_Traverser<T> extends AbstractPathTraverser<T> {
-
-    protected B_O_P_PA_S_SE_SL_Traverser() {
-    }
-
-    public B_O_P_PA_S_SE_SL_Traverser(final T t, final Step<T, ?> step) {
-        super(t, step);
-        final Optional<String> stepLabel = step.getLabel();
-        this.path = stepLabel.isPresent() ?
-                ImmutablePath.make().extend(t, stepLabel.get()) :
-                ImmutablePath.make().extend(t);
-    }
-
-    @Override
-    public int hashCode() {
-        return super.hashCode() + this.path.hashCode();
-    }
-
-    @Override
-    public boolean equals(final Object object) {
-        return (object instanceof B_O_P_PA_S_SE_SL_Traverser)
-                && ((B_O_P_PA_S_SE_SL_Traverser) object).path().equals(this.path) // TODO: path equality
-                && ((B_O_P_PA_S_SE_SL_Traverser) object).get().equals(this.t)
-                && ((B_O_P_PA_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
-                && ((B_O_P_PA_S_SE_SL_Traverser) object).loops() == this.loops()
-                && (null == this.sack);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
deleted file mode 100644
index 5eb62cd..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_PA_S_SE_SL_TraverserGenerator.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.process.traversal.traverser;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class B_O_P_PA_S_SE_SL_TraverserGenerator implements TraverserGenerator {
-
-    private static final B_O_P_PA_S_SE_SL_TraverserGenerator INSTANCE = new B_O_P_PA_S_SE_SL_TraverserGenerator();
-    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
-            TraverserRequirement.OBJECT,
-            TraverserRequirement.BULK,
-            TraverserRequirement.SINGLE_LOOP,
-            TraverserRequirement.PATH_ACCESS,
-            TraverserRequirement.PATH,
-            TraverserRequirement.SACK,
-            TraverserRequirement.SIDE_EFFECTS);
-
-    private B_O_P_PA_S_SE_SL_TraverserGenerator() {
-    }
-
-    @Override
-    public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
-        final B_O_P_PA_S_SE_SL_Traverser<S> traverser = new B_O_P_PA_S_SE_SL_Traverser<>(start, startStep);
-        traverser.setBulk(initialBulk);
-        return traverser;
-    }
-
-    @Override
-    public Set<TraverserRequirement> getProvidedRequirements() {
-        return REQUIREMENTS;
-    }
-
-    public static B_O_P_PA_S_SE_SL_TraverserGenerator instance() {
-        return INSTANCE;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
new file mode 100644
index 0000000..9a0e4af
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_Traverser.java
@@ -0,0 +1,107 @@
+/*
+ * 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.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ImmutablePath;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+
+import java.util.Optional;
+import java.util.function.UnaryOperator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_P_S_SE_SL_Traverser<T> extends B_O_S_SE_SL_Traverser<T> {
+
+    protected Path path;
+
+    protected B_O_P_S_SE_SL_Traverser() {
+    }
+
+    public B_O_P_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
+        super(t, step, initialBulk);
+        final Optional<String> stepLabel = step.getLabel();
+        this.path = stepLabel.isPresent() ?
+                ImmutablePath.make().extend(t, stepLabel.get()) :
+                ImmutablePath.make().extend(t);
+    }
+
+    /////////////////
+
+    @Override
+    public Path path() {
+        return this.path;
+    }
+
+    /////////////////
+
+    @Override
+    public Traverser.Admin<T> detach() {
+        super.detach();
+        this.path = DetachedFactory.detach(this.path, true);
+        return this;
+    }
+
+    @Override
+    public T attach(final Vertex hostVertex, final Method method) {
+        // you do not want to attach a path because it will reference graph objects not at the current vertex
+        if (this.t instanceof Attachable && !(((Attachable) this.t).get() instanceof Path))
+            this.t = ((Attachable<T>) this.t).attach(hostVertex, method);
+        return this.t;
+    }
+
+    /////////////////
+
+    @Override
+    public void merge(final Traverser.Admin<?> other) {
+        this.bulk = this.bulk + other.bulk();
+    }
+
+    @Override
+    public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
+
+            final B_O_P_S_SE_SL_Traverser<R> clone = (B_O_P_S_SE_SL_Traverser<R>) super.split(r,step);
+            final Optional<String> stepLabel = step.getLabel();
+            clone.path = stepLabel.isPresent() ? clone.path.clone().extend(r, stepLabel.get()) : clone.path.clone().extend(r);
+            //clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+            return clone;
+
+    }
+
+    @Override
+    public int hashCode() {
+        return super.hashCode() + this.path.hashCode();
+    }
+
+    @Override
+    public boolean equals(final Object object) {
+        return (object instanceof B_O_P_S_SE_SL_Traverser)
+                && ((B_O_P_S_SE_SL_Traverser) object).path().equals(this.path) // TODO: path equality
+                && ((B_O_P_S_SE_SL_Traverser) object).get().equals(this.t)
+                && ((B_O_P_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
+                && ((B_O_P_S_SE_SL_Traverser) object).loops() == this.loops()
+                && (null == this.sack);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
new file mode 100644
index 0000000..9915740
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_P_S_SE_SL_TraverserGenerator.java
@@ -0,0 +1,58 @@
+/*
+ * 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.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_P_S_SE_SL_TraverserGenerator implements TraverserGenerator {
+
+    private static final B_O_P_S_SE_SL_TraverserGenerator INSTANCE = new B_O_P_S_SE_SL_TraverserGenerator();
+    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
+            TraverserRequirement.OBJECT,
+            TraverserRequirement.BULK,
+            TraverserRequirement.SINGLE_LOOP,
+            TraverserRequirement.PATH,
+            TraverserRequirement.SACK,
+            TraverserRequirement.SIDE_EFFECTS);
+
+    private B_O_P_S_SE_SL_TraverserGenerator() {
+    }
+
+    @Override
+    public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
+        return new B_O_P_S_SE_SL_Traverser<>(start, startStep, initialBulk);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getProvidedRequirements() {
+        return REQUIREMENTS;
+    }
+
+    public static B_O_P_S_SE_SL_TraverserGenerator instance() {
+        return INSTANCE;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
new file mode 100644
index 0000000..f916a75
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_Traverser.java
@@ -0,0 +1,119 @@
+/*
+ * 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.process.traversal.traverser;
+
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+
+import java.util.function.UnaryOperator;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_S_SE_SL_Traverser<T> extends B_O_Traverser<T> {
+
+    protected Object sack = null;
+    protected short loops = 0;  // an optimization hack to use a short internally to save bits :)
+    protected transient TraversalSideEffects sideEffects;
+
+    protected B_O_S_SE_SL_Traverser() {
+    }
+
+    public B_O_S_SE_SL_Traverser(final T t, final Step<T, ?> step, final long initialBulk) {
+        super(t, initialBulk);
+        this.sideEffects = step.getTraversal().getSideEffects();
+        this.sideEffects.getSackInitialValue().ifPresent(supplier -> this.sack = supplier.get());
+    }
+
+    /////////////////
+
+    @Override
+    public <S> S sack() {
+        return (S) this.sack;
+    }
+
+    @Override
+    public <S> void sack(final S object) {
+        this.sack = object;
+    }
+
+    /////////////////
+
+    @Override
+    public int loops() {
+        return this.loops;
+    }
+
+    @Override
+    public void incrLoops(final String stepLabel) {
+        this.loops++;
+    }
+
+    @Override
+    public void resetLoops() {
+        this.loops = 0;
+    }
+
+    /////////////////
+
+    @Override
+    public TraversalSideEffects getSideEffects() {
+        return this.sideEffects;
+    }
+
+
+    @Override
+    public void setSideEffects(final TraversalSideEffects sideEffects) {
+        this.sideEffects = sideEffects;
+    }
+
+    /////////////////
+
+    @Override
+    public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
+        final B_O_S_SE_SL_Traverser<R> clone = (B_O_S_SE_SL_Traverser<R>) super.split(r,step);
+        clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+        return clone;
+    }
+
+    @Override
+    public Traverser.Admin<T> split() {
+        final B_O_S_SE_SL_Traverser<T> clone = (B_O_S_SE_SL_Traverser<T>) super.split();
+        clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
+        return clone;
+    }
+
+    /////////////////
+
+    @Override
+    public int hashCode() {
+        return this.t.hashCode() + this.future.hashCode() + this.loops;
+    }
+
+    @Override
+    public boolean equals(final Object object) {
+        return object instanceof B_O_S_SE_SL_Traverser
+                && ((B_O_S_SE_SL_Traverser) object).get().equals(this.t)
+                && ((B_O_S_SE_SL_Traverser) object).getStepId().equals(this.getStepId())
+                && ((B_O_S_SE_SL_Traverser) object).loops() == this.loops()
+                && (null == this.sack);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
new file mode 100644
index 0000000..e70eebf
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/B_O_S_SE_SL_TraverserGenerator.java
@@ -0,0 +1,59 @@
+/*
+ * 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.process.traversal.traverser;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
+
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class B_O_S_SE_SL_TraverserGenerator implements TraverserGenerator {
+
+    private static final B_O_S_SE_SL_TraverserGenerator INSTANCE = new B_O_S_SE_SL_TraverserGenerator();
+
+    private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
+            TraverserRequirement.OBJECT,
+            TraverserRequirement.BULK,
+            TraverserRequirement.SINGLE_LOOP,
+            TraverserRequirement.SACK,
+            TraverserRequirement.SIDE_EFFECTS);
+
+
+    private B_O_S_SE_SL_TraverserGenerator() {
+    }
+
+    @Override
+    public <S> Traverser.Admin<S> generate(final S start, final Step<S, ?> startStep, final long initialBulk) {
+        return new B_O_S_SE_SL_Traverser<>(start, startStep, initialBulk);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getProvidedRequirements() {
+        return REQUIREMENTS;
+    }
+
+    public static B_O_S_SE_SL_TraverserGenerator instance() {
+        return INSTANCE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
index 00b7d9b..790dedf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/TraverserRequirement.java
@@ -32,7 +32,6 @@ public enum TraverserRequirement {
     SINGLE_LOOP,
     NESTED_LOOP,
     PATH,
-    PATH_ACCESS,
     SACK,
     SIDE_EFFECTS,
     // NESTED_TRAVERSALS

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
deleted file mode 100644
index 060e912..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/AbstractPathTraverser.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * 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.process.traversal.traverser.util;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-
-import java.util.Optional;
-import java.util.function.UnaryOperator;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public abstract class AbstractPathTraverser<T> implements Traverser<T>, Traverser.Admin<T> {
-
-    protected T t;
-    protected Object sack = null;
-    protected String future = HALT;
-    protected short loops = 0;  // an optimization hack to use a short internally to save bits :)
-    protected transient TraversalSideEffects sideEffects;
-    protected long bulk = 1l;
-    protected Path path;
-
-    protected AbstractPathTraverser() {
-
-    }
-
-    public AbstractPathTraverser(final T t, final Step<T, ?> step) {
-        this.t = t;
-        this.sideEffects = step.getTraversal().getSideEffects();
-        this.sideEffects.getSackInitialValue().ifPresent(supplier -> this.sack = supplier.get());
-    }
-
-    /////////////////
-
-    @Override
-    public T get() {
-        return this.t;
-    }
-
-    @Override
-    public void set(final T t) {
-        this.t = t;
-    }
-
-    /////////////////
-
-    @Override
-    public Path path() {
-        return this.path;
-    }
-
-    /////////////////
-
-    @Override
-    public <S> S sack() {
-        return (S) this.sack;
-    }
-
-    @Override
-    public <S> void sack(final S object) {
-        this.sack = object;
-    }
-
-    /////////////////
-
-    @Override
-    public void setBulk(final long count) {
-        this.bulk = count;
-    }
-
-    @Override
-    public long bulk() {
-        return this.bulk;
-    }
-
-    /////////////////
-
-    @Override
-    public int loops() {
-        return this.loops;
-    }
-
-    @Override
-    public void incrLoops(final String stepLabel) {
-        this.loops++;
-    }
-
-    @Override
-    public void resetLoops() {
-        this.loops = 0;
-    }
-
-    /////////////////
-
-    @Override
-    public String getStepId() {
-        return this.future;
-    }
-
-    @Override
-    public void setStepId(final String stepId) {
-        this.future = stepId;
-    }
-
-    /////////////////
-
-    @Override
-    public TraversalSideEffects getSideEffects() {
-        return this.sideEffects;
-    }
-
-
-    @Override
-    public void setSideEffects(final TraversalSideEffects sideEffects) {
-        this.sideEffects = sideEffects;
-    }
-
-    /////////////////
-
-    @Override
-    public Traverser.Admin<T> detach() {
-        this.t = DetachedFactory.detach(this.t, false);
-        this.path = DetachedFactory.detach(this.path, true);
-        return this;
-    }
-
-    @Override
-    public T attach(final Vertex hostVertex, final Method method) {
-        // you do not want to attach a path because it will reference graph objects not at the current vertex
-        if (this.t instanceof Attachable && !(((Attachable) this.t).get() instanceof Path))
-            this.t = ((Attachable<T>) this.t).attach(hostVertex, method);
-        return this.t;
-    }
-
-    /////////////////
-
-    @Override
-    public void merge(final Traverser.Admin<?> other) {
-        this.bulk = this.bulk + other.bulk();
-    }
-
-    @Override
-    public <R> Traverser.Admin<R> split(final R r, final Step<T, R> step) {
-        try {
-            final AbstractPathTraverser<R> clone = (AbstractPathTraverser<R>) super.clone();
-            clone.t = r;
-            final Optional<String> stepLabel = step.getLabel();
-            clone.path = stepLabel.isPresent() ? clone.path.clone().extend(r, stepLabel.get()) : clone.path.clone().extend(r);
-            clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
-            return clone;
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public Traverser.Admin<T> split() {
-        try {
-            final AbstractPathTraverser<T> clone = (AbstractPathTraverser<T>) super.clone();
-            clone.sack = null == clone.sack ? null : clone.sideEffects.getSackSplitOperator().orElse(UnaryOperator.identity()).apply(clone.sack);
-            return clone;
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    /////////////////
-
-    @Override
-    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
-    public AbstractPathTraverser<T> clone() {
-        try {
-            return (AbstractPathTraverser<T>) super.clone();
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public int hashCode() {
-        return this.t.hashCode() + this.future.hashCode() + this.loops;
-    }
-
-    @Override
-    public String toString() {
-        return this.t.toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
index 0f79d992..f473cbb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/traverser/util/DefaultTraverserGeneratorFactory.java
@@ -20,8 +20,8 @@ package org.apache.tinkerpop.gremlin.process.traversal.traverser.util;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_TraverserGenerator;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_TraverserGenerator;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_TraverserGenerator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_TraverserGenerator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_TraverserGenerator;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
@@ -53,11 +53,11 @@ public class DefaultTraverserGeneratorFactory implements TraverserGeneratorFacto
         if (B_O_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
             return B_O_TraverserGenerator.instance();
 
-        if (B_O_PA_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
-            return B_O_PA_S_SE_SL_TraverserGenerator.instance();
+        if (B_O_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
+            return B_O_S_SE_SL_TraverserGenerator.instance();
 
-        if (B_O_P_PA_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
-            return B_O_P_PA_S_SE_SL_TraverserGenerator.instance();
+        if (B_O_P_S_SE_SL_TraverserGenerator.instance().getProvidedRequirements().containsAll(requirements))
+            return B_O_P_S_SE_SL_TraverserGenerator.instance();
 
         throw new IllegalStateException("The provided traverser generator factory does not support the requirements of the traversal: " + this.getClass().getCanonicalName() + requirements);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index e0a18cd..ab0b1f6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -23,8 +23,8 @@ import org.apache.tinkerpop.gremlin.process.computer.util.MapMemory;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -209,8 +209,8 @@ public final class GryoMapper implements Mapper<Kryo> {
             //add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Traverser.Admin.class, gryo -> new GraphSerializer.TraverserSerializer(), 55));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_Traverser.class, null, 75));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(O_Traverser.class, null, 76));
-            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_P_PA_S_SE_SL_Traverser.class, null, 77));
-            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_PA_S_SE_SL_Traverser.class, null, 78));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_P_S_SE_SL_Traverser.class, null, 77));
+            add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(B_O_S_SE_SL_Traverser.class, null, 78));
 
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TraverserSet.class, null, 58));
             add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(Tree.class, null, 61));

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
index 8bde4a6..4726511 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
@@ -51,12 +51,12 @@ public abstract class GroovyMapTest {
 
         @Override
         public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
-            g.V.as('a').out.map { v -> v.path('a').name };
+            g.V.withPath.as('a').out.map { v -> v.path('a').name };
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
-            g.V().as('a').out.out().map { v -> v.path('a').name + v.name };
+            g.V().withPath().as('a').out.out().map { v -> v.path('a').name + v.name };
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
index 9e15f70..a2d67c9 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
@@ -27,8 +27,8 @@ 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.engine.StandardTraversalEngine;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_P_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.O_Traverser;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -37,7 +37,6 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
 import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
 
 import java.util.Collections;
@@ -71,8 +70,8 @@ public interface GraphProvider {
         add(__.class);
         add(DefaultGraphTraversal.class);
         add(GraphTraversalSource.class);
-        add(B_O_PA_S_SE_SL_Traverser.class);
-        add(B_O_P_PA_S_SE_SL_Traverser.class);
+        add(B_O_S_SE_SL_Traverser.class);
+        add(B_O_P_S_SE_SL_Traverser.class);
         add(B_O_Traverser.class);
         add(O_Traverser.class);
     }};
@@ -230,9 +229,9 @@ public interface GraphProvider {
      * <li>{@link Graph}</li>
      * <li>{@link org.apache.tinkerpop.gremlin.structure.Graph.Variables}</li>
      * <li>{@link GraphTraversal}</li>
-     * <li>{@link B_O_P_PA_S_SE_SL_Traverser}</li>
+     * <li>{@link B_O_P_S_SE_SL_Traverser}</li>
      * <li>{@link Property}</li>
-     * <li>{@link B_O_PA_S_SE_SL_Traverser}</li>
+     * <li>{@link B_O_S_SE_SL_Traverser}</li>
      * <li>{@link Traversal}</li>
      * <li>{@link Traverser}</li>
      * <li>{@link Vertex}</li>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
index 5061b55..20569eb 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
@@ -141,12 +141,12 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
-            return g.V().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
+            return g.V().withPath().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
-            return g.V().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
+            return g.V().withPath().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f92ac863/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
index f85330f..3b5bcc5 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
@@ -32,7 +32,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.Enumerator;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.InnerJoinEnumerator;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.IteratorEnumerator;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.MatchStep;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_PA_S_SE_SL_Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_O_S_SE_SL_Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
 import org.apache.tinkerpop.gremlin.structure.Compare;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -886,7 +886,7 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
     private void assertBranchFactor(final double branchFactor,
                                     final Traversal t,
                                     final Iterator inputs) {
-        Traverser start = new B_O_PA_S_SE_SL_Traverser(null, null);
+        Traverser start = new B_O_S_SE_SL_Traverser(null, null, 1l);  // TODO bad? P?
         MatchStep.TraversalWrapper w = new MatchStep.TraversalWrapper(t, "a", "b");
         MatchStep.TraversalUpdater updater = new MatchStep.TraversalUpdater<>(w, inputs, start, "x");
         while (updater.hasNext()) {


[2/2] incubator-tinkerpop git commit: added GraphTraversalSourceStub for ensuring that withXXX() utilities are prior to GraphTraversal exposure. This makes the Graph DSL much cleaner as you can only do your withXXX operations prior to your traversal defi

Posted by ok...@apache.org.
added GraphTraversalSourceStub for ensuring that withXXX() utilities are prior to GraphTraversal exposure. This makes the Graph DSL much cleaner as you can only do your withXXX operations prior to your traversal definition.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f7ef918b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f7ef918b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f7ef918b

Branch: refs/heads/master
Commit: f7ef918bfd0c074a8cefa66f86bdade4595f03e9
Parents: f92ac86
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 23 12:11:43 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 23 12:11:43 2015 -0600

----------------------------------------------------------------------
 .../dsl/graph/EmptyGraphTraversal.java          |   5 -
 .../traversal/dsl/graph/GraphTraversal.java     |  29 -----
 .../dsl/graph/GraphTraversalSource.java         | 115 +++++++++++++++++--
 .../gremlin/process/traversal/dsl/graph/__.java |  24 ----
 .../traversal/step/map/GroovyMapTest.groovy     |  12 +-
 .../step/sideEffect/GroovySackTest.groovy       |  26 ++---
 .../step/sideEffect/GroovySideEffectTest.groovy |   4 +-
 .../step/sideEffect/GroovyStoreTest.groovy      |   4 +-
 .../step/sideEffect/GroovySubgraphTest.groovy   |   4 +-
 .../gremlin/groovy/loaders/SugarLoader.groovy   |  36 +++++-
 .../process/traversal/step/map/MapTest.java     |  16 +--
 .../traversal/step/sideEffect/SackTest.java     |  28 ++---
 .../step/sideEffect/SideEffectTest.java         |   6 +-
 .../traversal/step/sideEffect/StoreTest.java    |   2 +-
 .../traversal/step/sideEffect/SubgraphTest.java |   4 +-
 .../tinkergraph/structure/TinkerGraphTest.java  |   2 +-
 16 files changed, 191 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/EmptyGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/EmptyGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/EmptyGraphTraversal.java
index c0fa31e..b69cc74 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/EmptyGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/EmptyGraphTraversal.java
@@ -47,11 +47,6 @@ public final class EmptyGraphTraversal<S, E> extends EmptyTraversal<S, E> implem
     }
 
     @Override
-    public GraphTraversal<S, E> withPath() {
-        return instance();
-    }
-
-    @Override
     public GraphTraversal<S, E> iterate() {
         return this;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
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 6e1ebda..35b3874 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
@@ -711,35 +711,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
 
     ///////////////////// UTILITY STEPS /////////////////////
 
-    public default GraphTraversal<S, E> withSideEffect(final String key, final Supplier supplier) {
-        this.asAdmin().getSideEffects().registerSupplier(key, supplier);
-        return this;
-    }
-
-    public default <A> GraphTraversal<S, E> withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
-        this.asAdmin().getSideEffects().setSack(initialValue, Optional.of(splitOperator));
-        return this;
-    }
-
-    public default <A> GraphTraversal<S, E> withSack(final Supplier<A> initialValue) {
-        this.asAdmin().getSideEffects().setSack(initialValue, Optional.empty());
-        return this;
-    }
-
-    public default <A> GraphTraversal<S, E> withSack(final A initialValue, final UnaryOperator<A> splitOperator) {
-        this.asAdmin().getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.of(splitOperator));
-        return this;
-    }
-
-    public default <A> GraphTraversal<S, E> withSack(A initialValue) {
-        this.asAdmin().getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.empty());
-        return this;
-    }
-
-    public default GraphTraversal<S, E> withPath() {
-        return this.asAdmin().addStep(new PathIdentityStep<>(this.asAdmin()));
-    }
-
     public default GraphTraversal<S, E> as(final String stepLabel) {
         if (this.asAdmin().getSteps().size() == 0) this.asAdmin().addStep(new StartStep<>(this.asAdmin()));
         this.asAdmin().getEndStep().setLabel(stepLabel);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 0dd884f..4f04e57 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -27,16 +27,20 @@ import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEn
 import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.PathIdentityStep;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.Supplier;
+import java.util.function.UnaryOperator;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -76,27 +80,64 @@ public class GraphTraversalSource implements TraversalSource {
                         .removeStrategies(withoutStrategies.toArray(new Class[withoutStrategies.size()]));
     }
 
-    public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) {
-        final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this.graph);
+    private <S> GraphTraversal.Admin<S, S> generateTraversal() {
+        final GraphTraversal.Admin<S, S> traversal = new DefaultGraphTraversal<>(this.graph);
         traversal.setEngine(this.engine.create(this.graph));
         traversal.setStrategies(this.strategies);
+        return traversal;
+    }
+
+    public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) {
+        final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal();
         return traversal.addStep(new AddVertexStartStep(traversal, keyValues));
     }
 
     public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) {
-        final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(this.graph);
-        traversal.setEngine(this.engine.create(this.graph));
-        traversal.setStrategies(this.strategies);
+        final GraphTraversal.Admin<Vertex, Vertex> traversal = this.generateTraversal();
         return traversal.addStep(new GraphStep<>(traversal, Vertex.class, vertexIds));
     }
 
     public GraphTraversal<Edge, Edge> E(final Object... edgesIds) {
-        final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(this.graph);
-        traversal.setEngine(this.engine.create(this.graph));
-        traversal.setStrategies(this.strategies);
+        final GraphTraversal.Admin<Edge, Edge> traversal = this.generateTraversal();
         return traversal.addStep(new GraphStep<>(traversal, Edge.class, edgesIds));
     }
 
+    //// UTILITIES
+
+    public <S> GraphTraversalSourceStub withSideEffect(final String key, final Supplier supplier) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().registerSupplier(key, supplier);
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
+    public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().setSack(initialValue, Optional.of(splitOperator));
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
+    public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().setSack(initialValue, Optional.empty());
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
+    public <A> GraphTraversalSourceStub withSack(final A initialValue, final UnaryOperator<A> splitOperator) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.of(splitOperator));
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
+    public <A> GraphTraversalSourceStub withSack(final A initialValue) {
+        final GraphTraversal.Admin traversal = this.generateTraversal();
+        traversal.getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.empty());
+        return new GraphTraversalSourceStub(traversal, false);
+    }
+
+    public <S> GraphTraversalSourceStub withPath() {
+        return new GraphTraversalSourceStub(this.generateTraversal(), true);
+    }
+
     public Transaction tx() {
         return this.graph.tx();
     }
@@ -167,4 +208,62 @@ public class GraphTraversalSource implements TraversalSource {
                     null == this.withoutStrategies ? Collections.emptyList() : this.withoutStrategies);
         }
     }
+
+    public static class GraphTraversalSourceStub {
+
+        private final GraphTraversal.Admin traversal;
+        private boolean withPaths;
+
+        public GraphTraversalSourceStub(final GraphTraversal.Admin traversal, final boolean withPaths) {
+            this.traversal = traversal;
+            this.withPaths = withPaths;
+        }
+
+        public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) {
+            this.traversal.addStep(new AddVertexStartStep(this.traversal, keyValues));
+            return ((this.withPaths) ? this.traversal.addStep(new PathIdentityStep<>(this.traversal)) : this.traversal);
+        }
+
+        public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) {
+            this.traversal.addStep(new GraphStep<>(this.traversal, Vertex.class, vertexIds));
+            return ((this.withPaths) ? this.traversal.addStep(new PathIdentityStep<>(this.traversal)) : this.traversal);
+        }
+
+        public GraphTraversal<Edge, Edge> E(final Object... edgesIds) {
+            this.traversal.addStep(new GraphStep<>(this.traversal, Edge.class, edgesIds));
+            return ((this.withPaths) ? this.traversal.addStep(new PathIdentityStep<>(this.traversal)) : this.traversal);
+        }
+
+        //// UTILITIES
+
+        public GraphTraversalSourceStub withSideEffect(final String key, final Supplier supplier) {
+            this.traversal.getSideEffects().registerSupplier(key, supplier);
+            return this;
+        }
+
+        public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
+            this.traversal.getSideEffects().setSack(initialValue, Optional.of(splitOperator));
+            return this;
+        }
+
+        public <A> GraphTraversalSourceStub withSack(final Supplier<A> initialValue) {
+            this.traversal.getSideEffects().setSack(initialValue, Optional.empty());
+            return this;
+        }
+
+        public <A> GraphTraversalSourceStub withSack(final A initialValue, final UnaryOperator<A> splitOperator) {
+            this.traversal.getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.of(splitOperator));
+            return this;
+        }
+
+        public <A> GraphTraversalSourceStub withSack(final A initialValue) {
+            this.traversal.getSideEffects().setSack(new ConstantSupplier<>(initialValue), Optional.empty());
+            return this;
+        }
+
+        public GraphTraversalSourceStub withPath() {
+            this.withPaths = true;
+            return this;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 7377023..a6345d8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -569,30 +569,6 @@ public class __ {
         return __.<A>start().profile();
     }
 
-    public static <A> GraphTraversal<A, A> withSideEffect(final String key, final Supplier supplier) {
-        return __.<A>start().withSideEffect(key, supplier);
-    }
-
-    public static <A, B> GraphTraversal<A, A> withSack(final Supplier<B> initialValue, final UnaryOperator<B> splitOperator) {
-        return __.<A>start().withSack(initialValue, splitOperator);
-    }
-
-    public static <A, B> GraphTraversal<A, A> withSack(final Supplier<B> initialValue) {
-        return __.<A>start().withSack(initialValue);
-    }
-
-    public static <A, B> GraphTraversal<A, A> withSack(final B initialValue, final UnaryOperator<B> splitOperator) {
-        return __.<A>start().withSack(initialValue, splitOperator);
-    }
-
-    public static <A, B> GraphTraversal<A, A> withSack(B initialValue) {
-        return __.<A>start().withSack(initialValue);
-    }
-
-    public static <A> GraphTraversal<A, A> withPath() {
-        return __.<A>start().withPath();
-    }
-
     public static <A> GraphTraversal<A, A> barrier() {
         return __.<A>start().barrier();
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
index 4726511..ff6a4c9 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMapTest.groovy
@@ -50,13 +50,13 @@ public abstract class GroovyMapTest {
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
-            g.V.withPath.as('a').out.map { v -> v.path('a').name };
+        public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX() {
+            g.withPath().V.as('a').out.map { v -> v.path('a').name };
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
-            g.V().withPath().as('a').out.out().map { v -> v.path('a').name + v.name };
+        public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX() {
+            g.withPath().V().as('a').out.out().map { v -> v.path('a').name + v.name };
         }
     }
 
@@ -115,13 +115,13 @@ public abstract class GroovyMapTest {
         }
 
         @Override
-        Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
+        Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX() {
             // override with nothing until the test itself is supported
             return null
         }
 
         @Override
-        Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
+        Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX() {
             // override with nothing until the test itself is supported
             return null
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
index 1ccdb85..10681b7 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySackTest.groovy
@@ -18,10 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect
 
+import org.apache.tinkerpop.gremlin.process.UseEngine
 import org.apache.tinkerpop.gremlin.process.computer.ComputerTestHelper
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine
-import org.apache.tinkerpop.gremlin.process.UseEngine
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
@@ -36,18 +36,18 @@ public abstract class GroovySackTest {
     public static class StandardTraversals extends SackTest {
 
         @Override
-        public Traversal<Vertex, Double> get_g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum() {
-            g.V().withSack(0.0f).outE.sack(sum, 'weight').inV.sack.sum()
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum() {
+            g.withSack(0.0f).V().outE.sack(sum, 'weight').inV.sack.sum()
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-            g.V.withSack(0.0f).repeat(__.outE.sack(sum, 'weight').inV).times(2).sack
+        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
+            g.withSack(0.0f).V.repeat(__.outE.sack(sum, 'weight').inV).times(2).sack
         }
 
         @Override
-        public Traversal<Vertex, Map> get_g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack() {
-            g.V.withSack { [:] } { m -> m.clone() }.out().out().sack { m, v -> m['a'] = v.name; m }.sack()
+        public Traversal<Vertex, Map> get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack() {
+            g.withSack([:]) { m -> m.clone() }.V.out().out().sack { m, v -> m['a'] = v.name; m }.sack()
         }
     }
 
@@ -55,18 +55,18 @@ public abstract class GroovySackTest {
     public static class ComputerTraversals extends SackTest {
 
         @Override
-        public Traversal<Vertex, Double> get_g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum() {
-            ComputerTestHelper.compute("g.V().withSack(0.0f).outE.sack(sum, 'weight').inV.sack.sum()", g);
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum() {
+            ComputerTestHelper.compute("g.withSack(0.0f).V().outE.sack(sum, 'weight').inV.sack.sum()", g);
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-            ComputerTestHelper.compute("g.V.withSack(0.0f).repeat(__.outE.sack(sum, 'weight').inV).times(2).sack", g)
+        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
+            ComputerTestHelper.compute("g.withSack(0.0f).V.repeat(__.outE.sack(sum, 'weight').inV).times(2).sack", g)
         }
 
         @Override
-        public Traversal<Vertex, Map> get_g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack() {
-            ComputerTestHelper.compute("g.V.withSack { [:] } { m -> m.clone() }.out().out().sack { m, v -> m['a'] = v.name; m }.sack()", g);
+        public Traversal<Vertex, Map> get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack() {
+            ComputerTestHelper.compute("g.withSack ([:]) { m -> m.clone() }.V.out().out().sack { m, v -> m['a'] = v.name; m }.sack()", g);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySideEffectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySideEffectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySideEffectTest.groovy
index 8e18716..bd04f2d 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySideEffectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySideEffectTest.groovy
@@ -33,7 +33,7 @@ public abstract class GroovySideEffectTest {
 
         @Override
         public Traversal<Vertex, String> get_g_VX1X_sideEffectXstore_aX_name(final Object v1Id) {
-            g.V(v1Id).withSideEffect('a') { [] }.sideEffect {
+            g.withSideEffect('a') { [] }.V(v1Id).sideEffect {
                 it.sideEffects('a').clear();
                 it.sideEffects('a').add(it.get());
             }.name;
@@ -41,7 +41,7 @@ public abstract class GroovySideEffectTest {
 
         @Override
         public Traversal<Vertex, String> get_g_VX1X_out_sideEffectXincr_cX_name(final Object v1Id) {
-            g.V(v1Id).withSideEffect('c') { [0] }.out.sideEffect {
+            g.withSideEffect('c') { [0] }.V(v1Id).out.sideEffect {
                 def temp = it.sideEffects('c')[0];
                 it.sideEffects('c').clear();
                 it.sideEffects('c').add(temp + 1);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyStoreTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyStoreTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyStoreTest.groovy
index 5e31723..971a4f7 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyStoreTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyStoreTest.groovy
@@ -46,7 +46,7 @@ public abstract class GroovyStoreTest {
 
         @Override
         public Traversal<Vertex, Set<String>> get_g_V_withSideEffectXa_setX_both_name_storeXaX_capXaX() {
-            g.V.withSideEffect('a') { [] as Set }.both.name.store('a').cap('a')
+            g.withSideEffect('a') { [] as Set }.V.both.name.store('a').cap('a')
         }
 
 
@@ -72,7 +72,7 @@ public abstract class GroovyStoreTest {
 
         @Override
         public Traversal<Vertex, Set<String>> get_g_V_withSideEffectXa_setX_both_name_storeXaX_capXaX() {
-            ComputerTestHelper.compute("g.V.withSideEffect('a'){[] as Set}.both.name.store('a').cap('a')", g);
+            ComputerTestHelper.compute("g.withSideEffect('a'){[] as Set}.V.both.name.store('a').cap('a')", g);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySubgraphTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySubgraphTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySubgraphTest.groovy
index a7c00ee..620b0ff 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySubgraphTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovySubgraphTest.groovy
@@ -36,13 +36,13 @@ public abstract class GroovySubgraphTest {
         @Override
         public Traversal<Vertex, Graph> get_g_V_withSideEffectXsgX_outEXknowsX_subgraphXsgX_name_capXsgX(
                 final Object v1Id, final Graph subgraph) {
-            g.V(v1Id).withSideEffect('sg') { subgraph }.outE('knows').subgraph('sg').name.cap('sg')
+            g.withSideEffect('sg') { subgraph }.V(v1Id).outE('knows').subgraph('sg').name.cap('sg')
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_withSideEffectXsgX_repeatXbothEXcreatedX_subgraphXsgX_outVX_timesX5X_name_dedup(
                 final Graph subgraph) {
-            g.V.withSideEffect('sg') { subgraph }.repeat(__.bothE('created').subgraph('sg').outV).times(5).name.dedup
+            g.withSideEffect('sg') { subgraph }.V.repeat(__.bothE('created').subgraph('sg').outV).times(5).name.dedup
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/SugarLoader.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/SugarLoader.groovy b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/SugarLoader.groovy
index fb7af32..e256db1 100644
--- a/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/SugarLoader.groovy
+++ b/gremlin-groovy/src/main/groovy/org/apache/tinkerpop/gremlin/groovy/loaders/SugarLoader.groovy
@@ -58,7 +58,11 @@ class SugarLoader {
         }
 
         GraphTraversalSource.metaClass.getProperty = { final String key ->
-            GraphTraversalContextCategory.get((GraphTraversalSource) delegate, key);
+            GraphTraversalSourceCategory.get((GraphTraversalSource) delegate, key);
+        }
+
+        GraphTraversalSource.GraphTraversalSourceStub.metaClass.getProperty = { final String key ->
+            GraphTraversalSourceStubCategory.get((GraphTraversalSource.GraphTraversalSourceStub) delegate, key);
         }
 
         // __.age and __.out
@@ -84,7 +88,8 @@ class SugarLoader {
         }
 
         Traverser.metaClass.mixin(TraverserCategory.class);
-        GraphTraversalSource.metaClass.mixin(GraphTraversalContextCategory.class);
+        GraphTraversalSource.metaClass.mixin(GraphTraversalSourceCategory.class);
+        GraphTraversalSource.GraphTraversalSourceStub.metaClass.mixin(GraphTraversalSourceStubCategory.class);
         GraphTraversal.metaClass.mixin(GraphTraversalCategory.class);
         Vertex.metaClass.mixin(VertexCategory.class);
         Edge.metaClass.mixin(ElementCategory.class);
@@ -148,16 +153,35 @@ class SugarLoader {
         }
     }
 
-    public static class GraphTraversalContextCategory {
+    public static class GraphTraversalSourceCategory {
+
+        private static final String V = "V";
+        private static final String E = "E";
+
+        public static final get(final GraphTraversalSource graphTraversalSource, final String key) {
+            if (key.equals(V))
+                return graphTraversalSource.V();
+            else if (key.equals(E))
+                return graphTraversalSource.E();
+            else
+                throw new UnsupportedOperationException("The provided key does not reference a known method: " + key);
+        }
+
+        /*public String toString() {
+            return StringFactory.graphString(this.metaClass.owner, "");
+        }*/
+    }
+
+    public static class GraphTraversalSourceStubCategory {
 
         private static final String V = "V";
         private static final String E = "E";
 
-        public static final get(final GraphTraversalSource graphTraversalContext, final String key) {
+        public static final get(final GraphTraversalSource.GraphTraversalSourceStub graphTraversalSourceStub, final String key) {
             if (key.equals(V))
-                return graphTraversalContext.V();
+                return graphTraversalSourceStub.V();
             else if (key.equals(E))
-                return graphTraversalContext.E();
+                return graphTraversalSourceStub.E();
             else
                 throw new UnsupportedOperationException("The provided key does not reference a known method: " + key);
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
index 20569eb..0b18f3d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapTest.java
@@ -42,9 +42,9 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Integer> get_g_VX1X_out_mapXnameX_mapXlengthX(final Object v1Id);
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX();
+    public abstract Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX();
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX();
+    public abstract Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX();
 
     @Test
     @LoadGraphWith(MODERN)
@@ -91,7 +91,7 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
         int josh = 0;
         int other = 0;
 
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_mapXa_nameX();
+        final Traversal<Vertex, String> traversal = get_g_withPath_V_asXaX_out_mapXa_nameX();
         printTraversalForm(traversal);
         while (traversal.hasNext()) {
             final String name = traversal.next();
@@ -110,7 +110,7 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
     @LoadGraphWith(MODERN)
     @IgnoreEngine(TraversalEngine.Type.COMPUTER)
     public void g_V_asXaX_out_out_mapXa_name_it_nameX() {
-        final Traversal<Vertex, String> traversal = get_g_V_asXaX_out_out_mapXa_name_it_nameX();
+        final Traversal<Vertex, String> traversal = get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX();
         int counter = 0;
         while (traversal.hasNext()) {
             counter++;
@@ -140,13 +140,13 @@ public abstract class MapTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_mapXa_nameX() {
-            return g.V().withPath().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
+        public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_mapXa_nameX() {
+            return g.withPath().V().as("a").out().<String>map(v -> v.<Vertex>path("a").value("name"));
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_asXaX_out_out_mapXa_name_it_nameX() {
-            return g.V().withPath().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
+        public Traversal<Vertex, String> get_g_withPath_V_asXaX_out_out_mapXa_name_it_nameX() {
+            return g.withPath().V().as("a").out().out().map(v -> v.<Vertex>path("a").<String>value("name") + v.get().<String>value("name"));
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
index 0149831..552db42 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackTest.java
@@ -21,9 +21,9 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.UseEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.UseEngine;
 import org.apache.tinkerpop.gremlin.structure.Operator;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -33,7 +33,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
 import static org.junit.Assert.*;
 
 /**
@@ -41,16 +41,16 @@ import static org.junit.Assert.*;
  */
 public abstract class SackTest extends AbstractGremlinProcessTest {
 
-    public abstract Traversal<Vertex, Double> get_g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum();
+    public abstract Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum();
 
-    public abstract Traversal<Vertex, Float> get_g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
+    public abstract Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
 
-    public abstract Traversal<Vertex, Map> get_g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack();
+    public abstract Traversal<Vertex, Map> get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack();
 
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum() {
-        final Traversal<Vertex, Double> traversal = get_g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum();
+        final Traversal<Vertex, Double> traversal = get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum();
         assertEquals(3.5d, traversal.next(), 0.00001d);
         assertFalse(traversal.hasNext());
     }
@@ -59,7 +59,7 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-        final Traversal<Vertex, Float> traversal = get_g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
+        final Traversal<Vertex, Float> traversal = get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack();
         super.checkResults(Arrays.asList(2.0f, 1.4f), traversal);
     }
 
@@ -67,7 +67,7 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
     @LoadGraphWith(MODERN)
     @IgnoreEngine(TraversalEngine.Type.COMPUTER)
     public void g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack() {
-        final Traversal<Vertex, Map> traversal = get_g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack();
+        final Traversal<Vertex, Map> traversal = get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack();
         int counter = 0;
         while (traversal.hasNext()) {
             final Map map = traversal.next();
@@ -83,18 +83,18 @@ public abstract class SackTest extends AbstractGremlinProcessTest {
     @UseEngine(TraversalEngine.Type.COMPUTER)
     public static class Traversals extends SackTest {
         @Override
-        public Traversal<Vertex, Double> get_g_V_withSackX0X_outE_sackXsum_weightX_inV_sack_sum() {
-            return g.V().withSack(0.0f).outE().sack(Operator.sum, "weight").inV().sack().sum();
+        public Traversal<Vertex, Double> get_g_withSackX0X_V_outE_sackXsum_weightX_inV_sack_sum() {
+            return g.withSack(0.0f).V().outE().sack(Operator.sum, "weight").inV().sack().sum();
         }
 
         @Override
-        public Traversal<Vertex, Float> get_g_V_withSackX0X_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
-            return g.V().withSack(0.0f).repeat(outE().sack(Operator.sum, "weight").inV()).times(2).sack();
+        public Traversal<Vertex, Float> get_g_withSackX0X_V_repeatXoutE_sackXsum_weightX_inVX_timesX2X_sack() {
+            return g.withSack(0.0f).V().repeat(outE().sack(Operator.sum, "weight").inV()).times(2).sack();
         }
 
         @Override
-        public Traversal<Vertex, Map> get_g_V_withSackXmap__map_cloneX_out_out_sackXmap_a_nameX_sack() {
-            return g.V().<HashMap>withSack(HashMap::new, m -> (HashMap) m.clone()).out().out().<Map>sack((map, vertex) -> {
+        public Traversal<Vertex, Map> get_g_withSackXmap__map_cloneX_V_out_out_sackXmap_a_nameX_sack() {
+            return g.<HashMap>withSack(HashMap::new, m -> (HashMap) m.clone()).V().out().out().<Map>sack((map, vertex) -> {
                 map.put("a", vertex.value("name"));
                 return map;
             }).sack();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java
index 0929f89..8f42867 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectTest.java
@@ -88,7 +88,7 @@ public abstract class SideEffectTest extends AbstractGremlinTest {
 
         @Override
         public Traversal<Vertex, String> get_g_VX1X_sideEffectXstore_aX_name(final Object v1Id) {
-            return g.V(v1Id).withSideEffect("a", ArrayList::new).sideEffect(traverser -> {
+            return g.withSideEffect("a", ArrayList::new).V(v1Id).sideEffect(traverser -> {
                 traverser.<List>sideEffects("a").clear();
                 traverser.<List<Vertex>>sideEffects("a").add(traverser.get());
             }).values("name");
@@ -96,11 +96,11 @@ public abstract class SideEffectTest extends AbstractGremlinTest {
 
         @Override
         public Traversal<Vertex, String> get_g_VX1X_out_sideEffectXincr_cX_name(final Object v1Id) {
-            return g.V(v1Id).withSideEffect("c", () -> {
+            return g.withSideEffect("c", () -> {
                 final List<Integer> list = new ArrayList<>();
                 list.add(0);
                 return list;
-            }).out().sideEffect(traverser -> {
+            }).V(v1Id).out().sideEffect(traverser -> {
                 Integer temp = traverser.<List<Integer>>sideEffects("c").get(0);
                 traverser.<List<Integer>>sideEffects("c").clear();
                 traverser.<List<Integer>>sideEffects("c").add(temp + 1);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java
index 27a376b..16c724e 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/StoreTest.java
@@ -126,7 +126,7 @@ public abstract class StoreTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Set<String>> get_g_V_withSideEffectXa_setX_both_name_storeXaX_capXaX() {
-            return g.V().withSideEffect("a", HashSetSupplier.instance()).both().<String>values("name").store("a").cap("a");
+            return g.withSideEffect("a", HashSetSupplier.instance()).V().both().<String>values("name").store("a").cap("a");
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
index 99aae9f..3305538 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphTest.java
@@ -105,12 +105,12 @@ public abstract class SubgraphTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Graph> get_g_V_withSideEffectXsgX_outEXknowsX_subgraphXsgX_name_capXsgX(final Object v1Id, final Graph subgraph) {
-            return g.V(v1Id).withSideEffect("sg", () -> subgraph).outE("knows").subgraph("sg").values("name").cap("sg");
+            return g.withSideEffect("sg", () -> subgraph).V(v1Id).outE("knows").subgraph("sg").values("name").cap("sg");
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_withSideEffectXsgX_repeatXbothEXcreatedX_subgraphXsgX_outVX_timesX5X_name_dedup(final Graph subgraph) {
-            return g.V().withSideEffect("sg", () -> subgraph).repeat(bothE("created").subgraph("sg").outV()).times(5).<String>values("name").dedup();
+            return g.withSideEffect("sg", () -> subgraph).V().repeat(bothE("created").subgraph("sg").outV()).times(5).<String>values("name").dedup();
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f7ef918b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 3be3883..23ff040 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -106,7 +106,7 @@ public class TinkerGraphTest {
         v7.addEdge("link", v9, "weight", 1f);
         v8.addEdge("link", v9, "weight", 7f);
 
-        g.traversal().V(v1).withSack(Float.MIN_VALUE).repeat(outE().sack(Operator.max, "weight").inV()).times(5).sack().forEachRemaining(System.out::println);
+        g.traversal().withSack(Float.MIN_VALUE).V(v1).repeat(outE().sack(Operator.max, "weight").inV()).times(5).sack().forEachRemaining(System.out::println);
     }
 
    /* @Test