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/03/18 22:40:13 UTC

[2/2] incubator-tinkerpop git commit: gutted CloneNotSupportedException for Traversal, Step, Traverser, Path, VertexProgram, and MapReduce. This is in favor of using SuppressWarning(CloneDoesntDeclareCloneNotSupportedException). Also, realized that Stati

gutted CloneNotSupportedException for Traversal, Step, Traverser, Path, VertexProgram, and MapReduce. This is in favor of using SuppressWarning(CloneDoesntDeclareCloneNotSupportedException). Also, realized that StaticVertexProgram is our thread-safe vertex program interface. VertexProgramPool is smart about not cloning statics.


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

Branch: refs/heads/master
Commit: 560ed9b9c1f6e4b6e6517fdaeee0dbd7f48efafb
Parents: f55f2d7
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Mar 18 15:40:00 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Mar 18 15:40:07 2015 -0600

----------------------------------------------------------------------
 .../apache/tinkerpop/gremlin/process/Path.java  |  3 +-
 .../apache/tinkerpop/gremlin/process/Step.java  |  4 +-
 .../tinkerpop/gremlin/process/Traversal.java    |  3 +-
 .../gremlin/process/TraversalSideEffects.java   |  3 +-
 .../gremlin/process/TraversalStrategies.java    | 11 ++---
 .../tinkerpop/gremlin/process/Traverser.java    |  3 +-
 .../gremlin/process/computer/MapReduce.java     |  4 +-
 .../gremlin/process/computer/VertexProgram.java |  4 +-
 .../computer/traversal/TraversalSupplier.java   |  6 +--
 .../traversal/TraversalVertexProgram.java       | 14 ++++--
 .../traversal/VertexTraversalSideEffects.java   |  8 ++-
 .../process/computer/util/StaticMapReduce.java  |  3 +-
 .../computer/util/StaticVertexProgram.java      |  3 +-
 .../computer/util/VertexProgramPool.java        | 52 ++++++++++++++------
 .../graph/traversal/DefaultGraphTraversal.java  |  2 +-
 .../process/graph/traversal/GraphTraversal.java |  2 +-
 .../graph/traversal/GraphTraversalSource.java   |  6 +--
 .../graph/traversal/step/branch/BranchStep.java |  2 +-
 .../graph/traversal/step/branch/LocalStep.java  |  2 +-
 .../graph/traversal/step/branch/RepeatStep.java |  2 +-
 .../traversal/step/filter/ConjunctionStep.java  |  2 +-
 .../traversal/step/filter/DedupGlobalStep.java  |  2 +-
 .../traversal/step/filter/HasTraversalStep.java |  2 +-
 .../traversal/step/filter/RangeGlobalStep.java  |  2 +-
 .../traversal/step/filter/SampleGlobalStep.java |  2 +-
 .../traversal/step/filter/TimeLimitStep.java    |  2 +-
 .../graph/traversal/step/filter/WhereStep.java  |  2 +-
 .../graph/traversal/step/map/CoalesceStep.java  |  2 +-
 .../traversal/step/map/GroupCountStep.java      |  2 +-
 .../graph/traversal/step/map/GroupStep.java     | 16 +++---
 .../graph/traversal/step/map/PathStep.java      |  2 +-
 .../graph/traversal/step/map/SelectOneStep.java |  2 +-
 .../graph/traversal/step/map/SelectStep.java    |  2 +-
 .../graph/traversal/step/map/TreeStep.java      |  2 +-
 .../step/sideEffect/AggregateStep.java          |  2 +-
 .../sideEffect/GroupCountSideEffectStep.java    |  2 +-
 .../step/sideEffect/GroupSideEffectStep.java    | 16 +++---
 .../traversal/step/sideEffect/InjectStep.java   |  2 +-
 .../traversal/step/sideEffect/StartStep.java    |  2 +-
 .../traversal/step/sideEffect/StoreStep.java    |  2 +-
 .../traversal/step/sideEffect/SubgraphStep.java |  2 +-
 .../step/sideEffect/TreeSideEffectStep.java     |  2 +-
 .../step/util/CollectingBarrierStep.java        |  2 +-
 .../traversal/step/util/ComputerAwareStep.java  |  2 +-
 .../step/util/ReducingBarrierStep.java          |  2 +-
 .../step/util/SupplyingBarrierStep.java         |  2 +-
 .../traversal/util/EmptyGraphTraversal.java     |  3 +-
 .../process/traversal/DefaultTraversal.java     | 42 ++++++++--------
 .../traversal/DefaultTraversalSideEffects.java  | 15 ++++--
 .../traversal/DefaultTraversalStrategies.java   | 15 +++---
 .../lambda/AbstractLambdaTraversal.java         |  8 ++-
 .../traversal/lambda/HasNextTraversal.java      | 12 +++--
 .../process/traversal/lambda/TrueTraversal.java |  3 +-
 .../process/traversal/step/AbstractStep.java    | 19 ++++---
 .../process/traversal/step/EmptyStep.java       |  3 +-
 .../process/traversal/util/EmptyTraversal.java  |  2 +-
 .../util/EmptyTraversalSideEffects.java         |  3 +-
 .../util/EmptyTraversalStrategies.java          |  3 +-
 .../traverser/util/AbstractPathTraverser.java   |  9 +++-
 .../traverser/util/AbstractTraverser.java       | 11 +++--
 .../process/traverser/util/EmptyTraverser.java  |  3 +-
 .../process/util/path/ImmutablePath.java        |  4 +-
 .../gremlin/process/util/path/MutablePath.java  |  3 +-
 .../gremlin/neo4j/structure/Neo4jGraph.java     |  6 +--
 .../process/computer/TinkerWorkerPool.java      | 21 +++-----
 .../tinkergraph/structure/TinkerGraph.java      |  6 +--
 66 files changed, 232 insertions(+), 176 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Path.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Path.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Path.java
index e5dfe3e..d109286 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Path.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Path.java
@@ -133,7 +133,8 @@ public interface Path extends Cloneable {
     /**
      * {@inheritDoc}
      */
-    public Path clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public Path clone();
 
     /**
      * Determines whether the path is a simple or not.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Step.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Step.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Step.java
index 69646b4..fb7fb07 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Step.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Step.java
@@ -111,9 +111,9 @@ public interface Step<S, E> extends Iterator<Traverser<E>>, Serializable, Clonea
      * Moreover, the previous and next steps should be set to {@link org.apache.tinkerpop.gremlin.process.traversal.step.EmptyStep}.
      *
      * @return The cloned step
-     * @throws CloneNotSupportedException
      */
-    public Step<S, E> clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public Step<S, E> clone();
 
     /**
      * Get the label of this step.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
index bd08c21..cfaeb61 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traversal.java
@@ -412,7 +412,8 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable {
          *
          * @return The cloned traversal
          */
-        public Traversal.Admin<S, E> clone() throws CloneNotSupportedException;
+        @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+        public Traversal.Admin<S, E> clone();
 
         /**
          * When the traversal has had its {@link TraversalStrategies} applied to it, it is locked.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalSideEffects.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalSideEffects.java
index 12de714..95bb3fc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalSideEffects.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalSideEffects.java
@@ -190,7 +190,8 @@ public interface TraversalSideEffects extends Cloneable, Serializable {
      *
      * @return The cloned sideEffects
      */
-    public TraversalSideEffects clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public TraversalSideEffects clone();
 
     /**
      * Add the current {@link TraversalSideEffects} data and suppliers to the provided {@link TraversalSideEffects}.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
index d7ca954..91f57a5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
@@ -86,7 +86,8 @@ public interface TraversalStrategies extends Serializable, Cloneable {
     /**
      * {@inheritDoc}
      */
-    public TraversalStrategies clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public TraversalStrategies clone();
 
     /**
      * Get the {@link TraverserGeneratorFactory} to use to generate traversers.
@@ -171,12 +172,8 @@ public interface TraversalStrategies extends Serializable, Cloneable {
                     ProfileStrategy.instance(),
                     TraversalVerificationStrategy.instance(),
                     ConjunctionStrategy.instance());
-            try {
-                CACHE.put(Graph.class, coreStrategies.clone());
-                CACHE.put(EmptyGraph.class, new DefaultTraversalStrategies());
-            } catch (final CloneNotSupportedException e) {
-                throw new IllegalStateException(e.getMessage(), e);
-            }
+            CACHE.put(Graph.class, coreStrategies.clone());
+            CACHE.put(EmptyGraph.class, new DefaultTraversalStrategies());
         }
 
         public static void registerStrategies(final Class<? extends Graph> graphClass, final TraversalStrategies traversalStrategies) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traverser.java
index eeb828f..c9fca71 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/Traverser.java
@@ -137,7 +137,8 @@ public interface Traverser<T> extends Serializable, Comparable<Traverser<T>>, Cl
     /**
      * Traverser cloning is important when splitting a traverser at a bifurcation point in a traversal.
      */
-    public Traverser<T> clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public Traverser<T> clone();
 
     /**
      * The methods in System.Traverser are useful to underlying Step and Traversal implementations.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
index 88804a3..f40ce0d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/MapReduce.java
@@ -175,9 +175,9 @@ public interface MapReduce<MK, MV, RK, RV, R> extends Cloneable {
      * The default implementation simply returns the object as it assumes that the MapReduce instance is a stateless singleton.
      *
      * @return A clone of the MapReduce object
-     * @throws CloneNotSupportedException
      */
-    public MapReduce<MK, MV, RK, RV, R> clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public MapReduce<MK, MV, RK, RV, R> clone();
 
     /**
      * A helper method to construct a {@link MapReduce} given the content of the supplied configuration.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
index ada56bb..e93321d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/VertexProgram.java
@@ -191,9 +191,9 @@ public interface VertexProgram<M> extends Cloneable {
      * The default implementation simply returns the object as it assumes that the VertexProgram instance is a stateless singleton.
      *
      * @return A clone of the VertexProgram object
-     * @throws CloneNotSupportedException
      */
-    public VertexProgram<M> clone() throws CloneNotSupportedException;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public VertexProgram<M> clone();
 
     /**
      * A helper method to construct a {@link VertexProgram} given the content of the supplied configuration.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalSupplier.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalSupplier.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalSupplier.java
index 4925116..f95a7d1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalSupplier.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalSupplier.java
@@ -38,10 +38,6 @@ public final class TraversalSupplier<S, E> implements Supplier<Traversal.Admin<S
 
     @Override
     public Traversal.Admin<S, E> get() {
-        try {
-            return this.cloneOnGet ? this.traversal.clone() : this.traversal;
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
+        return this.cloneOnGet ? this.traversal.clone() : this.traversal;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 527ce1f..4376003 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -217,11 +217,15 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
     }
 
     @Override
-    public TraversalVertexProgram clone() throws CloneNotSupportedException {
-        final TraversalVertexProgram clone = (TraversalVertexProgram) super.clone();
-        clone.traversal = this.traversal.clone();
-        clone.traversalMatrix = new TraversalMatrix<>(clone.traversal);
-        return clone;
+    public TraversalVertexProgram clone() {
+        try {
+            final TraversalVertexProgram clone = (TraversalVertexProgram) super.clone();
+            clone.traversal = this.traversal.clone();
+            clone.traversalMatrix = new TraversalMatrix<>(clone.traversal);
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/VertexTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/VertexTraversalSideEffects.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/VertexTraversalSideEffects.java
index 96fb7d4..2b80011 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/VertexTraversalSideEffects.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/VertexTraversalSideEffects.java
@@ -122,8 +122,12 @@ public final class VertexTraversalSideEffects implements TraversalSideEffects {
     }
 
     @Override
-    public VertexTraversalSideEffects clone() throws CloneNotSupportedException {
-        return (VertexTraversalSideEffects) super.clone();
+    public VertexTraversalSideEffects clone() {
+        try {
+            return (VertexTraversalSideEffects) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     /////

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticMapReduce.java
index 9a9a6f3..18e8709 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticMapReduce.java
@@ -28,7 +28,8 @@ import org.apache.commons.configuration.Configuration;
 public abstract class StaticMapReduce<MK, MV, RK, RV, R> implements MapReduce<MK, MV, RK, RV, R> {
 
     @Override
-    public MapReduce<MK, MV, RK, RV, R> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public MapReduce<MK, MV, RK, RV, R> clone() {
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.java
index b0c0362..13c9f89 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/StaticVertexProgram.java
@@ -27,7 +27,8 @@ import org.apache.commons.configuration.Configuration;
 public abstract class StaticVertexProgram<M> implements VertexProgram<M> {
 
     @Override
-    public StaticVertexProgram<M> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public StaticVertexProgram<M> clone() {
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
index 0be3719..f3cb529 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
@@ -31,40 +31,62 @@ import java.util.concurrent.TimeUnit;
 public final class VertexProgramPool {
 
     private final LinkedBlockingQueue<VertexProgram<?>> pool;
+    private final StaticVertexProgram vertexProgram;
     private static final int TIMEOUT_MS = 2500;
 
     public VertexProgramPool(final int poolSize, final Configuration configuration) {
-        this.pool = new LinkedBlockingQueue<>(poolSize);
-        while (this.pool.remainingCapacity() > 0) {
-            this.pool.add(VertexProgram.createVertexProgram(configuration));
+        final VertexProgram vertexProgram = VertexProgram.createVertexProgram(configuration);
+        if (vertexProgram instanceof StaticVertexProgram) {
+            this.pool = null;
+            this.vertexProgram = (StaticVertexProgram) vertexProgram;
+        } else {
+            this.vertexProgram = null;
+            this.pool = new LinkedBlockingQueue<>(poolSize);
+            while (this.pool.remainingCapacity() > 0) {
+                this.pool.add(vertexProgram.clone());
+            }
         }
     }
 
     public VertexProgram take() {
-        try {
-            return this.pool.poll(TIMEOUT_MS, TimeUnit.MILLISECONDS);
-        } catch (final InterruptedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
+        if (null == this.vertexProgram) {
+            try {
+                return this.pool.poll(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            } catch (final InterruptedException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
+        } else {
+            return this.vertexProgram;
         }
     }
 
     public void offer(final VertexProgram<?> vertexProgram) {
-        try {
-            this.pool.offer(vertexProgram, TIMEOUT_MS, TimeUnit.MILLISECONDS);
-        } catch (final InterruptedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
+        if (null == this.vertexProgram) {
+            try {
+                this.pool.offer(vertexProgram, TIMEOUT_MS, TimeUnit.MILLISECONDS);
+            } catch (final InterruptedException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
         }
     }
 
     public synchronized void workerIterationStart(final Memory memory) {
-        for (final VertexProgram<?> vertexProgram : this.pool) {
-            vertexProgram.workerIterationStart(memory);
+        if (null == this.vertexProgram) {
+            for (final VertexProgram<?> vertexProgram : this.pool) {
+                vertexProgram.workerIterationStart(memory);
+            }
+        } else {
+            this.vertexProgram.workerIterationStart(memory);
         }
     }
 
     public synchronized void workerIterationEnd(final Memory memory) {
-        for (final VertexProgram<?> vertexProgram : this.pool) {
-            vertexProgram.workerIterationEnd(memory);
+        if (null == this.vertexProgram) {
+            for (final VertexProgram<?> vertexProgram : this.pool) {
+                vertexProgram.workerIterationEnd(memory);
+            }
+        } else {
+            this.vertexProgram.workerIterationEnd(memory);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
index 64bb473..f11b6c3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/DefaultGraphTraversal.java
@@ -41,7 +41,7 @@ public class DefaultGraphTraversal<S, E> extends DefaultTraversal<S, E> implemen
     }
 
     @Override
-    public DefaultGraphTraversal<S, E> clone() throws CloneNotSupportedException {
+    public DefaultGraphTraversal<S, E> clone() {
         return (DefaultGraphTraversal<S, E>) super.clone();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index a168d91..50f5abd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -166,7 +166,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         }
 
         @Override
-        public GraphTraversal.Admin<S, E> clone() throws CloneNotSupportedException;
+        public GraphTraversal.Admin<S, E> clone();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalSource.java
index 2c433ec..cf0de34 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversalSource.java
@@ -59,11 +59,7 @@ public class GraphTraversalSource implements TraversalSource {
         this.graph = graph;
         this.engine = engine;
         final TraversalStrategies tempStrategies = TraversalStrategies.GlobalCache.getStrategies(this.graph.getClass());
-        try {
-            this.strategies = strategies.length == 0 ? tempStrategies : tempStrategies.clone().addStrategies(strategies);
-        } catch (final CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
+        this.strategies = strategies.length == 0 ? tempStrategies : tempStrategies.clone().addStrategies(strategies);
     }
 
     public GraphTraversal<Vertex, Vertex> addV(final Object... keyValues) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/BranchStep.java
index c919e4c..f55814a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/BranchStep.java
@@ -133,7 +133,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
     }
 
     @Override
-    public BranchStep<S, E, M> clone() throws CloneNotSupportedException {
+    public BranchStep<S, E, M> clone() {
         final BranchStep<S, E, M> clone = (BranchStep<S, E, M>) super.clone();
         clone.traversalOptions = new HashMap<>(this.traversalOptions.size());
         for (final Map.Entry<M, List<Traversal.Admin<S, E>>> entry : this.traversalOptions.entrySet()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/LocalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/LocalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/LocalStep.java
index 8872fd9..3c84d5d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/LocalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/LocalStep.java
@@ -45,7 +45,7 @@ public final class LocalStep<S, E> extends AbstractStep<S, E> implements Travers
     }
 
     @Override
-    public LocalStep<S, E> clone() throws CloneNotSupportedException {
+    public LocalStep<S, E> clone() {
         final LocalStep<S, E> clone = (LocalStep<S, E>) super.clone();
         clone.localTraversal = clone.integrateChild(this.localTraversal.clone());
         clone.first = true;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/RepeatStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/RepeatStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/RepeatStep.java
index 0715a68..c317048 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/RepeatStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/branch/RepeatStep.java
@@ -120,7 +120,7 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, S> implements Trav
     /////////////////////////
 
     @Override
-    public RepeatStep<S> clone() throws CloneNotSupportedException {
+    public RepeatStep<S> clone() {
         final RepeatStep<S> clone = (RepeatStep<S>) super.clone();
         clone.repeatTraversal = clone.integrateChild(this.repeatTraversal.clone());
         if (null != this.untilTraversal)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/ConjunctionStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/ConjunctionStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/ConjunctionStep.java
index c7d2dc5..83e76e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/ConjunctionStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/ConjunctionStep.java
@@ -82,7 +82,7 @@ public abstract class ConjunctionStep<S> extends AbstractStep<S, S> implements T
     }
 
     @Override
-    public ConjunctionStep<S> clone() throws CloneNotSupportedException {
+    public ConjunctionStep<S> clone() {
         final ConjunctionStep<S> clone = (ConjunctionStep<S>) super.clone();
         clone.conjunctionTraversals = new ArrayList<>();
         for (final Traversal.Admin<S, ?> conjunctionTraversal : this.conjunctionTraversals) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
index 186893c..205c492 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
@@ -61,7 +61,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
     }
 
     @Override
-    public DedupGlobalStep<S> clone() throws CloneNotSupportedException {
+    public DedupGlobalStep<S> clone() {
         final DedupGlobalStep<S> clone = (DedupGlobalStep<S>) super.clone();
         clone.duplicateSet = new HashSet<>();
         clone.dedupTraversal = clone.integrateChild(this.dedupTraversal.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/HasTraversalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/HasTraversalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/HasTraversalStep.java
index 8190eee..0ffe739 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/HasTraversalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/HasTraversalStep.java
@@ -72,7 +72,7 @@ public final class HasTraversalStep<S> extends AbstractStep<S, S> implements Tra
     }
 
     @Override
-    public HasTraversalStep<S> clone() throws CloneNotSupportedException {
+    public HasTraversalStep<S> clone() {
         final HasTraversalStep<S> clone = (HasTraversalStep<S>) super.clone();
         clone.hasTraversal = clone.integrateChild(this.hasTraversal.clone());
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/RangeGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/RangeGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/RangeGlobalStep.java
index 0b81b67..aa2e84d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/RangeGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/RangeGlobalStep.java
@@ -100,7 +100,7 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging {
     }
 
     @Override
-    public RangeGlobalStep<S> clone() throws CloneNotSupportedException {
+    public RangeGlobalStep<S> clone() {
         final RangeGlobalStep<S> clone = (RangeGlobalStep<S>) super.clone();
         clone.counter = new AtomicLong(0l);
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
index f686ab8..d15ce6c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
@@ -109,7 +109,7 @@ public final class SampleGlobalStep<S> extends CollectingBarrierStep<S> implemen
     }
 
     @Override
-    public SampleGlobalStep<S> clone() throws CloneNotSupportedException {
+    public SampleGlobalStep<S> clone() {
         final SampleGlobalStep<S> clone = (SampleGlobalStep<S>) super.clone();
         clone.probabilityTraversal = clone.integrateChild(this.probabilityTraversal.clone());
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/TimeLimitStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/TimeLimitStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/TimeLimitStep.java
index 7c44983..de505ec 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/TimeLimitStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/TimeLimitStep.java
@@ -71,7 +71,7 @@ public final class TimeLimitStep<S> extends FilterStep<S> {
     }
 
     @Override
-    public TimeLimitStep<S> clone() throws CloneNotSupportedException {
+    public TimeLimitStep<S> clone() {
         final TimeLimitStep<S> clone = (TimeLimitStep<S>) super.clone();
         clone.timedOut = new AtomicBoolean(this.timedOut.get());
         clone.startTime = new AtomicLong(this.startTime.get());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/WhereStep.java
index 830603d..1477d11 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/WhereStep.java
@@ -118,7 +118,7 @@ public final class WhereStep<E> extends FilterStep<Map<String, E>> implements Tr
     }
 
     @Override
-    public WhereStep<E> clone() throws CloneNotSupportedException {
+    public WhereStep<E> clone() {
         final WhereStep<E> clone = (WhereStep<E>) super.clone();
         if (null != this.constraint)
             clone.constraint = clone.integrateChild(this.constraint.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CoalesceStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CoalesceStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CoalesceStep.java
index 83163bc..26f8488 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CoalesceStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CoalesceStep.java
@@ -70,7 +70,7 @@ public final class CoalesceStep<S, E> extends FlatMapStep<S, E> implements Trave
     }
 
     @Override
-    public CoalesceStep<S, E> clone() throws CloneNotSupportedException {
+    public CoalesceStep<S, E> clone() {
         final CoalesceStep<S, E> clone = (CoalesceStep<S, E>) super.clone();
         clone.coalesceTraversals = new ArrayList<>();
         for (final Traversal.Admin<S, ?> conjunctionTraversal : this.coalesceTraversals) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
index 9f990c5..852869b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
@@ -79,7 +79,7 @@ public final class GroupCountStep<S, E> extends ReducingBarrierStep<S, Map<E, Lo
     }
 
     @Override
-    public GroupCountStep<S, E> clone() throws CloneNotSupportedException {
+    public GroupCountStep<S, E> clone() {
         final GroupCountStep<S, E> clone = (GroupCountStep<S, E>) super.clone();
         if (null != this.groupTraversal)
             clone.groupTraversal = clone.integrateChild(this.groupTraversal.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
index 9bbe439..5d26384 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
@@ -103,7 +103,7 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
     }
 
     @Override
-    public GroupStep<S, K, V, R> clone() throws CloneNotSupportedException {
+    public GroupStep<S, K, V, R> clone() {
         final GroupStep<S, K, V, R> clone = (GroupStep<S, K, V, R>) super.clone();
         if (null != this.keyTraversal)
             clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
@@ -257,11 +257,15 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
         }
 
         @Override
-        public GroupMapReduce<K, V, R> clone() throws CloneNotSupportedException {
-            final GroupMapReduce<K, V, R> clone = (GroupMapReduce<K, V, R>) super.clone();
-            if (null != clone.reduceTraversal)
-                clone.reduceTraversal = this.reduceTraversal.clone();
-            return clone;
+        public GroupMapReduce<K, V, R> clone() {
+            try {
+                final GroupMapReduce<K, V, R> clone = (GroupMapReduce<K, V, R>) super.clone();
+                if (null != clone.reduceTraversal)
+                    clone.reduceTraversal = this.reduceTraversal.clone();
+                return clone;
+            } catch (final CloneNotSupportedException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/PathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/PathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/PathStep.java
index 1d5a984..0f03fab 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/PathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/PathStep.java
@@ -58,7 +58,7 @@ public final class PathStep<S> extends MapStep<S, Path> implements TraversalPare
     }
 
     @Override
-    public PathStep<S> clone() throws CloneNotSupportedException {
+    public PathStep<S> clone() {
         final PathStep<S> clone = (PathStep<S>) super.clone();
         clone.traversalRing = new TraversalRing<>();
         for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
index 022ef71..0e4f8d5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectOneStep.java
@@ -76,7 +76,7 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
     }
 
     @Override
-    public SelectOneStep<S, E> clone() throws CloneNotSupportedException {
+    public SelectOneStep<S, E> clone() {
         final SelectOneStep<S, E> clone = (SelectOneStep<S, E>) super.clone();
         clone.selectTraversal = this.selectTraversal.clone();
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
index 25e613d..707950e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectStep.java
@@ -102,7 +102,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
     }
 
     @Override
-    public SelectStep<S, E> clone() throws CloneNotSupportedException {
+    public SelectStep<S, E> clone() {
         final SelectStep<S, E> clone = (SelectStep<S, E>) super.clone();
         clone.traversalRing = new TraversalRing<>();
         for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/TreeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/TreeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/TreeStep.java
index 046d535..bead509 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/TreeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/TreeStep.java
@@ -79,7 +79,7 @@ public final class TreeStep<S> extends ReducingBarrierStep<S, Tree> implements M
     }
 
     @Override
-    public TreeStep<S> clone() throws CloneNotSupportedException {
+    public TreeStep<S> clone() {
         final TreeStep<S> clone = (TreeStep<S>) super.clone();
         clone.traversalRing = new TraversalRing<>();
         for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
index 3185847..3c88312 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
@@ -98,7 +98,7 @@ public final class AggregateStep<S> extends CollectingBarrierStep<S> implements
     }
 
     @Override
-    public AggregateStep<S> clone() throws CloneNotSupportedException {
+    public AggregateStep<S> clone() {
         final AggregateStep<S> clone = (AggregateStep<S>) super.clone();
         if (null != this.aggregateTraversal)
             clone.aggregateTraversal = clone.integrateChild(this.aggregateTraversal.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupCountSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupCountSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupCountSideEffectStep.java
index 5643fe8..997d1db 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupCountSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupCountSideEffectStep.java
@@ -95,7 +95,7 @@ public final class GroupCountSideEffectStep<S, E> extends SideEffectStep<S> impl
     }
 
     @Override
-    public GroupCountSideEffectStep<S, E> clone() throws CloneNotSupportedException {
+    public GroupCountSideEffectStep<S, E> clone() {
         final GroupCountSideEffectStep<S, E> clone = (GroupCountSideEffectStep<S, E>) super.clone();
         if (null != this.groupTraversal)
             clone.groupTraversal = clone.integrateChild(this.groupTraversal.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
index 5630c6b..f135484 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -146,7 +146,7 @@ public final class GroupSideEffectStep<S, K, V, R> extends SideEffectStep<S> imp
     }
 
     @Override
-    public GroupSideEffectStep<S, K, V, R> clone() throws CloneNotSupportedException {
+    public GroupSideEffectStep<S, K, V, R> clone() {
         final GroupSideEffectStep<S, K, V, R> clone = (GroupSideEffectStep<S, K, V, R>) super.clone();
         if (null != this.keyTraversal)
             clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
@@ -229,11 +229,15 @@ public final class GroupSideEffectStep<S, K, V, R> extends SideEffectStep<S> imp
         }
 
         @Override
-        public GroupSideEffectMapReduce<K, V, R> clone() throws CloneNotSupportedException {
-            final GroupSideEffectMapReduce<K, V, R> clone = (GroupSideEffectMapReduce<K, V, R>) super.clone();
-            if (null != clone.reduceTraversal)
-                clone.reduceTraversal = this.reduceTraversal.clone();
-            return clone;
+        public GroupSideEffectMapReduce<K, V, R> clone() {
+            try {
+                final GroupSideEffectMapReduce<K, V, R> clone = (GroupSideEffectMapReduce<K, V, R>) super.clone();
+                if (null != clone.reduceTraversal)
+                    clone.reduceTraversal = this.reduceTraversal.clone();
+                return clone;
+            } catch (final CloneNotSupportedException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/InjectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/InjectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/InjectStep.java
index 25708ac..2b4a927 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/InjectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/InjectStep.java
@@ -36,7 +36,7 @@ public final class InjectStep<S> extends StartStep<S> {
     }
 
     @Override
-    public InjectStep<S> clone() throws CloneNotSupportedException {
+    public InjectStep<S> clone() {
         final InjectStep<S> clone = (InjectStep<S>) super.clone();
         clone.start = new ArrayIterator<>(clone.injections);
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StartStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StartStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StartStep.java
index 2f819c1..e56a7e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StartStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StartStep.java
@@ -70,7 +70,7 @@ public class StartStep<S> extends AbstractStep<S, S> {
     }
 
     @Override
-    public StartStep<S> clone() throws CloneNotSupportedException {
+    public StartStep<S> clone() {
         final StartStep<S> clone = (StartStep<S>) super.clone();
         clone.first = true;
         clone.start = null;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
index bf56b6f..71cc96c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
@@ -96,7 +96,7 @@ public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectC
     }
 
     @Override
-    public StoreStep<S> clone() throws CloneNotSupportedException {
+    public StoreStep<S> clone() {
         final StoreStep<S> clone = (StoreStep<S>) super.clone();
         if (null != this.storeTraversal)
             clone.storeTraversal = clone.integrateChild(this.storeTraversal.clone());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/SubgraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/SubgraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/SubgraphStep.java
index 286f20c..5d3b7b3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/SubgraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/SubgraphStep.java
@@ -91,7 +91,7 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
     }
 
     @Override
-    public SubgraphStep clone() throws CloneNotSupportedException {
+    public SubgraphStep clone() {
         final SubgraphStep clone = (SubgraphStep) super.clone();
         this.subgraph = null;
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/TreeSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/TreeSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/TreeSideEffectStep.java
index 390bfa1..fbb3425 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/TreeSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/TreeSideEffectStep.java
@@ -91,7 +91,7 @@ public final class TreeSideEffectStep<S> extends SideEffectStep<S> implements Si
     }
 
     @Override
-    public TreeSideEffectStep<S> clone() throws CloneNotSupportedException {
+    public TreeSideEffectStep<S> clone()  {
         final TreeSideEffectStep<S> clone = (TreeSideEffectStep<S>) super.clone();
         clone.traversalRing = new TraversalRing<>();
         for (final Traversal.Admin<Object, Object> traversal : this.traversalRing.getTraversals()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/CollectingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/CollectingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/CollectingBarrierStep.java
index e000949..9b401c4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/CollectingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/CollectingBarrierStep.java
@@ -54,7 +54,7 @@ public abstract class CollectingBarrierStep<S> extends AbstractStep<S, S> {
     }
 
     @Override
-    public CollectingBarrierStep<S> clone() throws CloneNotSupportedException {
+    public CollectingBarrierStep<S> clone() {
         final CollectingBarrierStep<S> clone = (CollectingBarrierStep<S>) super.clone();
         clone.traverserSet = new TraverserSet<>();
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
index 32914ae..01ecfe0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ComputerAwareStep.java
@@ -56,7 +56,7 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
     }
 
     @Override
-    public ComputerAwareStep<S, E> clone() throws CloneNotSupportedException {
+    public ComputerAwareStep<S, E> clone() {
         final ComputerAwareStep<S, E> clone = (ComputerAwareStep<S, E>) super.clone();
         clone.previousIterator = Collections.emptyIterator();
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
index ee6255d..1f48885 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
@@ -92,7 +92,7 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
     }
 
     @Override
-    public ReducingBarrierStep<S, E> clone() throws CloneNotSupportedException {
+    public ReducingBarrierStep<S, E> clone() {
         final ReducingBarrierStep<S, E> clone = (ReducingBarrierStep<S, E>) super.clone();
         clone.done = false;
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/SupplyingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/SupplyingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/SupplyingBarrierStep.java
index a7c52cf..78d3830 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/SupplyingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/SupplyingBarrierStep.java
@@ -54,7 +54,7 @@ public abstract class SupplyingBarrierStep<S, E> extends AbstractStep<S, E> {
     }
 
     @Override
-    public SupplyingBarrierStep<S, E> clone() throws CloneNotSupportedException {
+    public SupplyingBarrierStep<S, E> clone() {
         final SupplyingBarrierStep<S, E> clone = (SupplyingBarrierStep<S, E>) super.clone();
         clone.done = false;
         return clone;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
index 3a88dc2..c959922 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/util/EmptyGraphTraversal.java
@@ -59,7 +59,8 @@ public final class EmptyGraphTraversal<S, E> extends EmptyTraversal<S, E> implem
     }
 
     @Override
-    public EmptyGraphTraversal<S, E> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public EmptyGraphTraversal<S, E> clone() {
         return instance();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
index 8eb8767..a8aa67b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversal.java
@@ -166,23 +166,27 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
     }
 
     @Override
-    public DefaultTraversal<S, E> clone() throws CloneNotSupportedException {
-        final DefaultTraversal<S, E> clone = (DefaultTraversal<S, E>) super.clone();
-        clone.steps = new ArrayList<>();
-        clone.sideEffects = this.sideEffects.clone();
-        clone.strategies = this.strategies.clone(); // TODO: does this need to be cloned?
-        clone.lastEnd = null;
-        clone.lastEndCount = 0l;
-        for (final Step<?, ?> step : this.steps) {
-            final Step<?, ?> clonedStep = step.clone();
-            clonedStep.setTraversal(clone);
-            final Step previousStep = clone.steps.isEmpty() ? EmptyStep.instance() : clone.steps.get(clone.steps.size() - 1);
-            clonedStep.setPreviousStep(previousStep);
-            previousStep.setNextStep(clonedStep);
-            clone.steps.add(clonedStep);
+    public DefaultTraversal<S, E> clone() {
+        try {
+            final DefaultTraversal<S, E> clone = (DefaultTraversal<S, E>) super.clone();
+            clone.steps = new ArrayList<>();
+            clone.sideEffects = this.sideEffects.clone();
+            clone.strategies = this.strategies.clone(); // TODO: does this need to be cloned?
+            clone.lastEnd = null;
+            clone.lastEndCount = 0l;
+            for (final Step<?, ?> step : this.steps) {
+                final Step<?, ?> clonedStep = step.clone();
+                clonedStep.setTraversal(clone);
+                final Step previousStep = clone.steps.isEmpty() ? EmptyStep.instance() : clone.steps.get(clone.steps.size() - 1);
+                clonedStep.setPreviousStep(previousStep);
+                previousStep.setNextStep(clonedStep);
+                clone.steps.add(clonedStep);
+            }
+            clone.finalEndStep = clone.getEndStep();
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
         }
-        clone.finalEndStep = clone.getEndStep();
-        return clone;
     }
 
     @Override
@@ -202,11 +206,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
 
     @Override
     public void setStrategies(final TraversalStrategies strategies) {
-        try {
-            this.strategies = strategies.clone();
-        } catch (CloneNotSupportedException e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
+        this.strategies = strategies.clone();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalSideEffects.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalSideEffects.java
index d6cbf4c..c46ce06 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalSideEffects.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalSideEffects.java
@@ -189,10 +189,15 @@ public class DefaultTraversalSideEffects implements TraversalSideEffects {
     }
 
     @Override
-    public DefaultTraversalSideEffects clone() throws CloneNotSupportedException {
-        final DefaultTraversalSideEffects sideEffects = (DefaultTraversalSideEffects) super.clone();
-        sideEffects.objectMap = new HashMap<>(this.objectMap);
-        sideEffects.supplierMap = new HashMap<>(this.supplierMap);
-        return sideEffects;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public DefaultTraversalSideEffects clone() {
+        try {
+            final DefaultTraversalSideEffects sideEffects = (DefaultTraversalSideEffects) super.clone();
+            sideEffects.objectMap = new HashMap<>(this.objectMap);
+            sideEffects.supplierMap = new HashMap<>(this.supplierMap);
+            return sideEffects;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalStrategies.java
index 379201a..b736265 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/DefaultTraversalStrategies.java
@@ -19,7 +19,6 @@
 package org.apache.tinkerpop.gremlin.process.traversal;
 
 import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traverser.TraverserGeneratorFactory;
@@ -88,11 +87,15 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
     }
 
     @Override
-    public DefaultTraversalStrategies clone() throws CloneNotSupportedException {
-        final DefaultTraversalStrategies clone = (DefaultTraversalStrategies) super.clone();
-        clone.traversalStrategies = new ArrayList<>();
-        clone.traversalStrategies.addAll(this.traversalStrategies);
-        return clone;
+    public DefaultTraversalStrategies clone() {
+        try {
+            final DefaultTraversalStrategies clone = (DefaultTraversalStrategies) super.clone();
+            clone.traversalStrategies = new ArrayList<>();
+            clone.traversalStrategies.addAll(this.traversalStrategies);
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
index 32f1ae5..2425d45 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
@@ -108,8 +108,12 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
     }
 
     @Override
-    public Traversal.Admin<S, E> clone() throws CloneNotSupportedException {
-        return (AbstractLambdaTraversal<S, E>) super.clone();
+    public Traversal.Admin<S, E> clone() {
+        try {
+            return (AbstractLambdaTraversal<S, E>) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
index 839e722..7aeee74 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/HasNextTraversal.java
@@ -114,10 +114,14 @@ public final class HasNextTraversal<S> implements Traversal.Admin<S, Boolean> {
     }
 
     @Override
-    public HasNextTraversal<S> clone() throws CloneNotSupportedException {
-        final HasNextTraversal<S> clone = (HasNextTraversal<S>) super.clone();
-        clone.hasNextTraversal = this.hasNextTraversal.clone();
-        return clone;
+    public HasNextTraversal<S> clone() {
+        try {
+            final HasNextTraversal<S> clone = (HasNextTraversal<S>) super.clone();
+            clone.hasNextTraversal = this.hasNextTraversal.clone();
+            return clone;
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
index fe11121..c07000e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/TrueTraversal.java
@@ -36,7 +36,8 @@ public final class TrueTraversal<S, E> extends AbstractLambdaTraversal<S, E> {
     }
 
     @Override
-    public TrueTraversal<S, E> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public TrueTraversal<S, E> clone() {
         return INSTANCE;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/AbstractStep.java
index d03ae6e..36db578 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/AbstractStep.java
@@ -160,13 +160,18 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
     }
 
     @Override
-    public AbstractStep<S, E> clone() throws CloneNotSupportedException {
-        final AbstractStep clone = (AbstractStep) super.clone();
-        clone.starts = new ExpandableStepIterator<S>(clone);
-        clone.previousStep = EmptyStep.instance();
-        clone.nextStep = EmptyStep.instance();
-        clone.nextEnd = null;
-        return clone;
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public AbstractStep<S, E> clone() {
+        try {
+            final AbstractStep clone = (AbstractStep) super.clone();
+            clone.starts = new ExpandableStepIterator<S>(clone);
+            clone.previousStep = EmptyStep.instance();
+            clone.nextStep = EmptyStep.instance();
+            clone.nextEnd = null;
+            return clone;
+        } catch (CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     private final Traverser<E> prepareTraversalForNextStep(final Traverser<E> traverser) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/EmptyStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/EmptyStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/EmptyStep.java
index d71a2c6..3a3e9ed 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/EmptyStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/EmptyStep.java
@@ -90,7 +90,8 @@ public final class EmptyStep<S, E> implements Step<S, E>, TraversalParent {
     }
 
     @Override
-    public EmptyStep<S, E> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public EmptyStep<S, E> clone() {
         return INSTANCE;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
index 1560299..5d2a6ef 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversal.java
@@ -111,7 +111,7 @@ public class EmptyTraversal<S, E> implements Traversal.Admin<S, E> {
     }
 
     @Override
-    public EmptyTraversal<S, E> clone() throws CloneNotSupportedException {
+    public EmptyTraversal<S, E> clone() {
         return instance();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalSideEffects.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalSideEffects.java
index 0891c4e..d41f12b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalSideEffects.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalSideEffects.java
@@ -88,8 +88,9 @@ public final class EmptyTraversalSideEffects implements TraversalSideEffects {
 
     }
 
+    @SuppressWarnings("CloneDoesntCallSuperClone")
     @Override
-    public TraversalSideEffects clone() throws CloneNotSupportedException {
+    public TraversalSideEffects clone()  {
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
index 19ca0c9..48a4405 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
@@ -59,7 +59,8 @@ public final class EmptyTraversalStrategies implements TraversalStrategies {
     }
 
     @Override
-    public TraversalStrategies clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public TraversalStrategies clone() {
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractPathTraverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractPathTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractPathTraverser.java
index 5d69875..82608c0 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractPathTraverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractPathTraverser.java
@@ -192,8 +192,13 @@ public abstract class AbstractPathTraverser<T> implements Traverser<T>, Traverse
     /////////////////
 
     @Override
-    public AbstractPathTraverser<T> clone() throws CloneNotSupportedException {
-        return (AbstractPathTraverser<T>) super.clone();
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public AbstractPathTraverser<T> clone() {
+        try {
+            return (AbstractPathTraverser<T>) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractTraverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractTraverser.java
index 650d9e8..34022cc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractTraverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/AbstractTraverser.java
@@ -22,8 +22,8 @@ import org.apache.tinkerpop.gremlin.process.Path;
 import org.apache.tinkerpop.gremlin.process.Step;
 import org.apache.tinkerpop.gremlin.process.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.util.path.EmptyPath;
 import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.util.path.EmptyPath;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedElement;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
@@ -159,8 +159,13 @@ public abstract class AbstractTraverser<T> implements Traverser<T>, Traverser.Ad
     }
 
     @Override
-    public AbstractTraverser<T> clone() throws CloneNotSupportedException {
-        return (AbstractTraverser<T>) super.clone();
+    @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+    public AbstractTraverser<T> clone() {
+        try {
+            return (AbstractTraverser<T>) super.clone();
+        } catch (final CloneNotSupportedException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
     ///////////

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/EmptyTraverser.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/EmptyTraverser.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/EmptyTraverser.java
index 3d59180..2d15ac4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/EmptyTraverser.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traverser/util/EmptyTraverser.java
@@ -146,7 +146,8 @@ public final class EmptyTraverser<T> implements Traverser<T>, Traverser.Admin<T>
     }
 
     @Override
-    public EmptyTraverser<T> clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone")
+    public EmptyTraverser<T> clone() {
         return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/ImmutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/ImmutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/ImmutablePath.java
index c1bc14c..20916f7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/ImmutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/ImmutablePath.java
@@ -45,7 +45,9 @@ public class ImmutablePath implements Path, Serializable, Cloneable {
         return HeadPath.instance();
     }
 
-    public ImmutablePath clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone,CloneDoesntDeclareCloneNotSupportedException")
+    @Override
+    public ImmutablePath clone() {
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/560ed9b9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/MutablePath.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/MutablePath.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/MutablePath.java
index fdcec38..2453497 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/MutablePath.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/util/path/MutablePath.java
@@ -50,7 +50,8 @@ public class MutablePath implements Path, Serializable {
     }
 
     @Override
-    public MutablePath clone() throws CloneNotSupportedException {
+    @SuppressWarnings("CloneDoesntCallSuperClone,CloneDoesntDeclareCloneNotSupportedException")
+    public MutablePath clone() {
         final MutablePath clone = new MutablePath(this.objects.size());
         // TODO: Why is this not working Hadoop serialization-wise?... Its cause DetachedPath's clone needs to detach on clone.
         /*final MutablePath clone = (MutablePath) super.clone();