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 2016/08/09 20:15:01 UTC

tinkerpop git commit: TranslationStrategy and RemoteStrategy -- when testing -- both have a is.testing to ensure no Lambdas and other anomalies are used. Lambda now supports language property which is serialized in GraphSON representation of Bytecode. Tr

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 f0c265937 -> 5e2aade83


TranslationStrategy and RemoteStrategy -- when testing -- both have a is.testing to ensure no Lambdas and other anomalies are used. Lambda now supports language property which is serialized in GraphSON representation of Bytecode. TraversalOpProcessor in GremlinServer is able to deduce which translator to use -- Java, Groovy, Python, etc. Thus, how to evaluate the traversal is inferred by an analyses of the submitted bytecode. GraphTraversalSource supports getAnonymousTraversalClass() which makes life easier for the translators.


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

Branch: refs/heads/TINKERPOP-1278
Commit: 5e2aade836b683cf2c34052cb57b4fb0b7940fc9
Parents: f0c2659
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Aug 9 14:14:38 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Aug 9 14:14:53 2016 -0600

----------------------------------------------------------------------
 .../gremlin/jsr223/JavaTranslator.java          |  6 +-
 .../gremlin/process/remote/RemoteGraph.java     |  8 +++
 .../strategy/decoration/RemoteStrategy.java     | 11 ++-
 .../gremlin/process/traversal/Bytecode.java     | 10 +--
 .../process/traversal/TraversalSource.java      |  5 ++
 .../dsl/graph/GraphTraversalSource.java         |  6 ++
 .../traversal/step/map/OrderGlobalStep.java     |  6 +-
 .../process/traversal/util/BytecodeHelper.java  | 28 ++++++++
 .../graphson/GraphSONTraversalSerializers.java  | 10 +--
 .../tinkerpop/gremlin/util/function/Lambda.java | 73 +++++++++++++++-----
 .../gremlin/groovy/jsr223/GroovyTranslator.java | 18 ++---
 .../gremlin/python/jsr223/PythonTranslator.java | 13 ++--
 .../gremlin/python/jsr223/PythonProvider.java   |  6 +-
 .../op/traversal/TraversalOpProcessor.java      | 23 +++---
 .../ElementIdStrategyProcessTest.java           | 13 ++--
 .../decoration/TranslationStrategy.java         |  9 +--
 .../TinkerGraphJavaTranslatorProvider.java      |  9 ++-
 .../io/graphson/GraphSONTranslator.java         |  8 ---
 .../TinkerGraphGraphSONTranslatorProvider.java  |  2 +-
 19 files changed, 167 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index 6d9e01a..ea23d11 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -44,13 +44,13 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
     private final Map<String, List<Method>> traversalSourceMethodCache = new HashMap<>();
     private final Map<String, List<Method>> traversalMethodCache = new HashMap<>();
 
-    public JavaTranslator(final S traversalSource, final Class anonymousSource) {
+    private JavaTranslator(final S traversalSource, final Class anonymousSource) {
         this.traversalSource = traversalSource;
         this.anonymousTraversal = anonymousSource;
     }
 
-    public static <S extends TraversalSource, T extends Traversal.Admin<?, ?>> JavaTranslator<S, T> of(final S traversalSource, final Class anonymousSource) {
-        return new JavaTranslator<>(traversalSource, anonymousSource);
+    public static <S extends TraversalSource, T extends Traversal.Admin<?, ?>> JavaTranslator<S, T> of(final S traversalSource) {
+        return new JavaTranslator<>(traversalSource, traversalSource.getAnonymousTraversalClass().orElse(null));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
index 2c70266..942c744 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteGraph.java
@@ -62,6 +62,14 @@ import java.util.Iterator;
         method = "g_V_chooseXlabel_eqXpersonX__outXknowsX__inXcreatedXX_name",
         reason = "Issues with Longs")
 @Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackTest",
+        method = "g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
+        reason = "Issues with BigInteger")
+@Graph.OptOut(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTest",
+        method = "g_withSideEffectXa_g_VX2XX_VX1X_out_whereXneqXaXX",
+        reason = "Issues with Longs")
+@Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.PeerPressureTest",
         method = "*",
         reason = "hmmmm")

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
index 35b3fdd..92f3f75 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/strategy/decoration/RemoteStrategy.java
@@ -24,8 +24,6 @@ import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.step.map.RemoteStep;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
@@ -33,7 +31,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Veri
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Set;
 
@@ -66,15 +63,15 @@ public final class RemoteStrategy extends AbstractTraversalStrategy<TraversalStr
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
-        // ensure that ids are not elements so they are serializable
-        TraversalHelper.getStepsOfAssignableClass(GraphStep.class, traversal).forEach(GraphStep::convertElementsToIds);
-
         if (!(traversal.getParent() instanceof EmptyStep))
             return;
 
         // verifications to ensure unsupported steps do not exist in the traversal
-        if (TraversalHelper.hasStepOfAssignableClassRecursively(Arrays.asList(ProfileSideEffectStep.class, LambdaHolder.class), traversal))
+        if (Boolean.valueOf(System.getProperty("is.testing", "false")) &&
+                (TraversalHelper.hasStepOfAssignableClassRecursively(ProfileSideEffectStep.class, traversal) ||
+                        traversal.getBytecode().toString().contains("$"))) {
             throw new VerificationException("RemoteGraph does not support profiling nor lambdas", traversal);
+        }
 
         if (!(traversal.getGraph().orElse(EmptyGraph.instance()) instanceof RemoteGraph))
             throw new IllegalStateException("RemoteStrategy expects a RemoteGraph instance attached to the Traversal");

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index f943afc..0be140c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -120,14 +120,8 @@ public final class Bytecode implements Cloneable, Serializable {
 
     public static class Instruction implements Serializable {
 
-        private String operator;
-        private Object[] arguments;
-
-        private Instruction() {
-            // for gryo serialization
-            this.operator = null;
-            this.arguments = null;
-        }
+        private final String operator;
+        private final Object[] arguments;
 
         private Instruction(final String operator, final Object... arguments) {
             this.operator = operator;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
index bd5c055..7f9ebe3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
@@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Optional;
 import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -385,6 +386,10 @@ public interface TraversalSource extends Cloneable {
         return clone;
     }
 
+    public default Optional<Class> getAnonymousTraversalClass() {
+        return Optional.empty();
+    }
+
     /**
      * The clone-method should be used to create immutable traversal sources with each call to a configuration "withXXX"-method.
      * The clone-method should clone the {@link Bytecode}, {@link TraversalStrategies}, mutate the cloned strategies accordingly,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/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 4c42ef6..a4f2378 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
@@ -42,6 +42,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.function.BinaryOperator;
 import java.util.function.Supplier;
 import java.util.function.UnaryOperator;
@@ -74,6 +75,11 @@ public class GraphTraversalSource implements TraversalSource {
 
     ////////////////
 
+    @Override
+    public Optional<Class> getAnonymousTraversalClass() {
+        return Optional.of(__.class);
+    }
+
     public GraphTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies) {
         this.graph = graph;
         this.strategies = traversalStrategies;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
index 1daa31a..60be2d6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderGlobalStep.java
@@ -81,7 +81,7 @@ public final class OrderGlobalStep<S, C extends Comparable> extends CollectingBa
 
     @Override
     public void modulateBy(final Traversal.Admin<?, ?> traversal) {
-        this.addComparator((Traversal.Admin<S, C>) traversal, (Comparator) Order.incr);
+        this.modulateBy(traversal, Order.incr);
     }
 
     @Override
@@ -103,7 +103,7 @@ public final class OrderGlobalStep<S, C extends Comparable> extends CollectingBa
     public int hashCode() {
         int result = super.hashCode();
         for (int i = 0; i < this.comparators.size(); i++) {
-            result ^= this.comparators.get(i).hashCode() * (i+1);
+            result ^= this.comparators.get(i).hashCode() * (i + 1);
         }
         return result;
     }
@@ -153,7 +153,7 @@ public final class OrderGlobalStep<S, C extends Comparable> extends CollectingBa
             // for serializers that need a no-arg constructor
         }
 
-        public OrderBiOperator(final ChainedComparator<S,?> chainedComparator, final long limit) {
+        public OrderBiOperator(final ChainedComparator<S, ?> chainedComparator, final long limit) {
             this.chainedComparator = chainedComparator;
             this.limit = limit;
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
index 516a083..ff766c9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/BytecodeHelper.java
@@ -20,7 +20,9 @@
 package org.apache.tinkerpop.gremlin.process.traversal.util;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.util.function.Lambda;
 
+import java.util.Optional;
 import java.util.function.Predicate;
 
 /**
@@ -44,4 +46,30 @@ public final class BytecodeHelper {
         }
         return clone;
     }
+
+    public static Optional<String> getLambdaLanguage(final Bytecode bytecode) {
+        for (final Bytecode.Instruction instruction : bytecode.getSourceInstructions()) {
+            for (Object object : instruction.getArguments()) {
+                if (object instanceof Lambda)
+                    return Optional.of(((Lambda) object).getLambdaLanguage());
+                else if (object instanceof Bytecode) {
+                    Optional<String> temp = BytecodeHelper.getLambdaLanguage((Bytecode) object);
+                    if (temp.isPresent())
+                        return temp;
+                }
+            }
+        }
+        for (final Bytecode.Instruction instruction : bytecode.getStepInstructions()) {
+            for (Object object : instruction.getArguments()) {
+                if (object instanceof Lambda)
+                    return Optional.of(((Lambda) object).getLambdaLanguage());
+                else if (object instanceof Bytecode) {
+                    Optional<String> temp = BytecodeHelper.getLambdaLanguage((Bytecode) object);
+                    if (temp.isPresent())
+                        return temp;
+                }
+            }
+        }
+        return Optional.empty();
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
index faea5b9..037ce96 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
@@ -164,6 +164,7 @@ public final class GraphSONTraversalSerializers {
             jsonGenerator.writeStartObject();
             jsonGenerator.writeStringField("@type", "Lambda");
             jsonGenerator.writeStringField("value", lambda.getLambdaScript());
+            jsonGenerator.writeStringField("language", lambda.getLambdaLanguage());
             jsonGenerator.writeNumberField("arguments", lambda instanceof Lambda.ZeroArgLambda ? 0 : lambda instanceof Lambda.OneArgLambda ? 1 : 2);
             jsonGenerator.writeEndObject();
         }
@@ -343,13 +344,14 @@ public final class GraphSONTraversalSerializers {
             final ObjectCodec oc = jsonParser.getCodec();
             final JsonNode node = oc.readTree(jsonParser);
             assert node.get("@type").textValue().equals("Lambda");
-            final JsonNode lambda = node.get("value");
+            final String lambdaScript = node.get("value").textValue();
+            final String lambdaLanguage = node.get("language").textValue();
             final int arguments = node.get("arguments").intValue();
             return 0 == arguments ?
-                    new Lambda.ZeroArgLambda<>(lambda.textValue()) :
+                    new Lambda.ZeroArgLambda<>(lambdaScript, lambdaLanguage) :
                     1 == arguments ?
-                            new Lambda.OneArgLambda<>(lambda.textValue()) :
-                            new Lambda.TwoArgLambda<>(lambda.textValue());
+                            new Lambda.OneArgLambda<>(lambdaScript, lambdaLanguage) :
+                            new Lambda.TwoArgLambda<>(lambdaScript, lambdaLanguage);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/Lambda.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/Lambda.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/Lambda.java
index ebc0b65..fe93525 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/Lambda.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/Lambda.java
@@ -34,11 +34,15 @@ public interface Lambda extends Serializable {
 
     public String getLambdaScript();
 
+    public String getLambdaLanguage();
+
     public abstract static class AbstractLambda implements Lambda {
         private final String lambdaSource;
+        private final String lambdaLanguage;
 
-        private AbstractLambda(final String lambdaSource) {
+        private AbstractLambda(final String lambdaSource, final String lambdaLanguage) {
             this.lambdaSource = lambdaSource;
+            this.lambdaLanguage = lambdaLanguage;
         }
 
         @Override
@@ -47,25 +51,32 @@ public interface Lambda extends Serializable {
         }
 
         @Override
+        public String getLambdaLanguage() {
+            return this.lambdaLanguage;
+        }
+
+        @Override
         public String toString() {
             return this.lambdaSource;
         }
 
         @Override
         public int hashCode() {
-            return this.lambdaSource.hashCode();
+            return this.lambdaSource.hashCode() + this.lambdaLanguage.hashCode();
         }
 
         @Override
         public boolean equals(final Object object) {
-            return object instanceof Lambda && ((Lambda) object).getLambdaScript().equals(this.lambdaSource);
+            return object instanceof Lambda &&
+                    ((Lambda) object).getLambdaScript().equals(this.lambdaSource) &&
+                    ((Lambda) object).getLambdaLanguage().equals(this.lambdaLanguage);
         }
     }
 
     public static class ZeroArgLambda<A> extends AbstractLambda implements Supplier<A> {
 
-        public ZeroArgLambda(final String lambdaSource) {
-            super(lambdaSource);
+        public ZeroArgLambda(final String lambdaSource, final String lambdaLanguage) {
+            super(lambdaSource, lambdaLanguage);
         }
 
         @Override
@@ -77,13 +88,13 @@ public interface Lambda extends Serializable {
 
     public static class OneArgLambda<A, B> extends AbstractLambda implements Function<A, B>, Predicate<A>, Consumer<A> {
 
-        public OneArgLambda(final String lambdaSource) {
-            super(lambdaSource);
+        public OneArgLambda(final String lambdaSource, final String lambdaLanguage) {
+            super(lambdaSource, lambdaLanguage);
         }
 
         @Override
         public B apply(final A a) {
-            return (B) new ScriptEngineLambda("gremlin-groovy", this.getLambdaScript()).apply(a); // TODO: GremlinScriptEngine.lambda(String, Object... arguments)
+            return null;
         }
 
         @Override
@@ -99,8 +110,8 @@ public interface Lambda extends Serializable {
 
     public static class TwoArgLambda<A, B, C> extends AbstractLambda implements BiFunction<A, B, C>, Comparator<A> {
 
-        public TwoArgLambda(final String lambdaSource) {
-            super(lambdaSource);
+        public TwoArgLambda(final String lambdaSource, final String lambdaLanguage) {
+            super(lambdaSource, lambdaLanguage);
         }
 
         @Override
@@ -115,31 +126,57 @@ public interface Lambda extends Serializable {
         }
     }
 
+    ///
 
-    ////
+    public static String DEFAULT_LAMBDA_LANGUAGE = "gremlin-groovy";
+
+    public static <A, B> Function<A, B> function(final String lambdaSource, final String lambdaLanguage) {
+        return new OneArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    public static <A> Predicate<A> predicate(final String lambdaSource, final String lambdaLanguage) {
+        return new OneArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    public static <A> Consumer<A> consumer(final String lambdaSource, final String lambdaLanguage) {
+        return new OneArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    public static <A> Supplier<A> supplier(final String lambdaSource, final String lambdaLanguage) {
+        return new ZeroArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    public static <A> Comparator<A> comparator(final String lambdaSource, final String lambdaLanguage) {
+        return new TwoArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    public static <A, B, C> BiFunction<A, B, C> biFunction(final String lambdaSource, final String lambdaLanguage) {
+        return new TwoArgLambda<>(lambdaSource, lambdaLanguage);
+    }
+
+    //
 
     public static <A, B> Function<A, B> function(final String lambdaSource) {
-        return new OneArgLambda<>(lambdaSource);
+        return new OneArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
 
     public static <A> Predicate<A> predicate(final String lambdaSource) {
-        return new OneArgLambda<>(lambdaSource);
+        return new OneArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
 
     public static <A> Consumer<A> consumer(final String lambdaSource) {
-        return new OneArgLambda<>(lambdaSource);
+        return new OneArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
 
     public static <A> Supplier<A> supplier(final String lambdaSource) {
-        return new ZeroArgLambda<>(lambdaSource);
+        return new ZeroArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
 
     public static <A> Comparator<A> comparator(final String lambdaSource) {
-        return new TwoArgLambda<>(lambdaSource);
+        return new TwoArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
 
     public static <A, B, C> BiFunction<A, B, C> biFunction(final String lambdaSource) {
-        return new TwoArgLambda<>(lambdaSource);
+        return new TwoArgLambda<>(lambdaSource, DEFAULT_LAMBDA_LANGUAGE);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index ea5fc2b..fdb3ece 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -25,10 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
 import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -91,22 +88,19 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
 
     private String internalTranslate(final String start, final Bytecode bytecode) {
         final StringBuilder traversalScript = new StringBuilder(start);
-        final Bytecode clone = BytecodeHelper.filterInstructions(bytecode,
-                instruction -> !instruction.getOperator().equals(TraversalSource.Symbols.withStrategies));
-        for (final Bytecode.Instruction instruction : clone.getSourceInstructions()) {
+        for (final Bytecode.Instruction instruction : bytecode.getSourceInstructions()) {
             processInstruction(traversalScript, instruction);
         }
-        for (final Bytecode.Instruction instruction : clone.getStepInstructions()) {
+        for (final Bytecode.Instruction instruction : bytecode.getStepInstructions()) {
             processInstruction(traversalScript, instruction);
         }
-        final String script = traversalScript.toString();
-        if (script.contains("$"))
-            throw new VerificationException("Lambdas are currently not supported: " + script, EmptyTraversal.instance());
-        return script;
+        return traversalScript.toString();
     }
 
     private void processInstruction(final StringBuilder traversalScript, final Bytecode.Instruction instruction) {
         final String methodName = instruction.getOperator();
+        if (methodName.equals(TraversalSource.Symbols.withStrategies))
+            return;
         final Object[] arguments = instruction.getArguments();
         final List<Object> objects = Arrays.asList(arguments);
         if (objects.isEmpty())
@@ -117,7 +111,7 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
             for (final Object object : objects) {
                 temp = temp + convertToString(object) + ",";
             }
-            traversalScript.append(temp.substring(0, temp.length() - 1) + ")");
+            traversalScript.append(temp.substring(0, temp.length() - 1)).append(")");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index a63237c..70bb38b 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -28,10 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
-import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
@@ -87,8 +84,7 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
 
     @Override
     public String translate(final Bytecode bytecode) {
-        final String traversal = this.internalTranslate(this.traversalSource, BytecodeHelper.filterInstructions(bytecode,
-                instruction -> !instruction.getOperator().equals(TraversalSource.Symbols.withStrategies)));
+        final String traversal = this.internalTranslate(this.traversalSource, bytecode);
         //if (this.importStatics)
         //    assert !traversal.contains("__.");
         return traversal;
@@ -110,6 +106,8 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
         final StringBuilder traversalScript = new StringBuilder(start);
         for (final Bytecode.Instruction instruction : bytecode.getSourceInstructions()) {
             final String methodName = instruction.getOperator();
+            if (methodName.equals(TraversalSource.Symbols.withStrategies))
+                continue;
             final Object[] arguments = instruction.getArguments();
             if (0 == arguments.length)
                 traversalScript.append(".").append(SymbolHelper.toPython(methodName)).append("()");
@@ -154,10 +152,7 @@ public final class PythonTranslator implements Translator.ScriptTranslator {
                 traversalScript.delete(0, 3);
             }
         }
-        final String script = traversalScript.toString();
-        if (script.contains("$"))
-            throw new VerificationException("Lambdas are currently not supported: " + script, EmptyTraversal.instance());
-        return script;
+        return traversalScript.toString();
     }
 
     private String convertToString(final Object object) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
index c018a52..56b0963 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonProvider.java
@@ -23,17 +23,15 @@ import org.apache.commons.configuration.Configuration;
 import org.apache.tinkerpop.gremlin.AbstractGraphProvider;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
@@ -159,7 +157,7 @@ public class PythonProvider extends AbstractGraphProvider {
                 throw new IllegalStateException(e.getMessage(), e);
             }
             final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new TranslationStrategy(g, new PythonGraphSONJavaTranslator<>(new PythonTranslator("g", "__", IMPORT_STATICS), new JavaTranslator<>(g, __.class))));
+            return g.withStrategies(new TranslationStrategy(g, new PythonGraphSONJavaTranslator<>(new PythonTranslator("g", "__", IMPORT_STATICS), JavaTranslator.of(g))));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index a2df857..8603c19 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -27,10 +27,12 @@ import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines;
+import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
 import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
 import org.apache.tinkerpop.gremlin.server.Context;
 import org.apache.tinkerpop.gremlin.server.GraphManager;
 import org.apache.tinkerpop.gremlin.server.GremlinServer;
@@ -98,7 +100,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         }};
     }
 
-    private static  Cache<UUID, TraversalSideEffects> cache = null;
+    private static Cache<UUID, TraversalSideEffects> cache = null;
 
     public TraversalOpProcessor() {
         super(true);
@@ -218,7 +220,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         return op;
     }
 
-    private static Map<String,String> validateTraversalRequest(final RequestMessage message) throws OpProcessorException {
+    private static Map<String, String> validateTraversalRequest(final RequestMessage message) throws OpProcessorException {
         if (!message.optionalArgs(Tokens.ARGS_GREMLIN).isPresent()) {
             final String msg = String.format("A message with an [%s] op code requires a [%s] argument.", Tokens.OPS_BYTECODE, Tokens.ARGS_GREMLIN);
             throw new OpProcessorException(msg, ResponseMessage.build(message).code(ResponseStatusCode.REQUEST_ERROR_INVALID_REQUEST_ARGUMENTS).statusMessage(msg).create());
@@ -323,12 +325,15 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
 
         final Traversal.Admin<?, ?> traversal;
         try {
-            // TODO: hardcoded to gremlin-groovy translation for now
-            final ScriptEngines engines = context.getGremlinExecutor().getScriptEngines();
-            final SimpleBindings b = new SimpleBindings();
-            b.put("g", g);
-
-            traversal = engines.eval(bytecode, b, "gremlin-groovy");
+            final Optional<String> lambdaLanguage = BytecodeHelper.getLambdaLanguage(bytecode);
+            if (!lambdaLanguage.isPresent())
+                traversal = JavaTranslator.of(g).translate(bytecode);
+            else {
+                final ScriptEngines engines = context.getGremlinExecutor().getScriptEngines();
+                final SimpleBindings b = new SimpleBindings();
+                b.put("g", g);
+                traversal = engines.eval(bytecode, b, lambdaLanguage.get());
+            }
         } catch (Exception ex) {
             throw new OpProcessorException("Could not deserialize the Traversal instance",
                     ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_SERIALIZATION)
@@ -385,7 +390,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
     @Override
     protected Map<String, Object> generateMetaData(final ChannelHandlerContext ctx, final RequestMessage msg,
                                                    final ResponseStatusCode code, final Iterator itty) {
-        Map<String,Object> metaData = Collections.emptyMap();
+        Map<String, Object> metaData = Collections.emptyMap();
         if (itty instanceof SideEffectIterator) {
             final SideEffectIterator traversalIterator = (SideEffectIterator) itty;
             final String key = traversalIterator.getSideEffectKey();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
index 43cd114..aeba8ca 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/ElementIdStrategyProcessTest.java
@@ -20,12 +20,13 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.FeatureRequirementSet;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
-import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -65,7 +66,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
     public void shouldGenerateDefaultIdOnGraphAddVWithGeneratedCustomId() throws Exception {
-        final ElementIdStrategy strategy = ElementIdStrategy.build().idMaker(() -> "xxx").create();
+        final ElementIdStrategy strategy = ElementIdStrategy.build().idMaker(new ConstantSupplier<>("xxx")).create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().property("name", "stephen").next();
         assertEquals("stephen", v.value("name"));
@@ -159,7 +160,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
+        final Edge e = sg.withSideEffect("v", v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", sg.E(e).id().next());
         assertEquals("some-id", sg.E("some-id").id().next());
@@ -171,7 +172,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value").next();
+        final Edge e = sg.withSideEffect("v", v).V(v).addE(Direction.OUT, "self", "v", "test", "value").next();
         assertEquals("value", e.value("test"));
         assertNotNull(UUID.fromString(sg.E(e).id().next().toString()));
     }
@@ -182,7 +183,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
+        final Edge e = sg.withSideEffect("v", v).V(v).addE(Direction.OUT, "self", "v", "test", "value", T.id, "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", e.value("name"));
         assertEquals("some-id", sg.E(e).id().next());
@@ -195,7 +196,7 @@ public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
         final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
         final GraphTraversalSource sg = create(strategy);
         final Vertex v = sg.addV().next();
-        final Edge e = sg.withSideEffect("v",() -> v).V(v).addE(Direction.OUT, "self", "v", "test", "value", "name", "some-id").next();
+        final Edge e = sg.withSideEffect("v", v).V(v).addE(Direction.OUT, "self", "v", "test", "value", "name", "some-id").next();
         assertEquals("value", e.value("test"));
         assertEquals("some-id", e.value("name"));
         assertEquals("some-id", sg.E(e).id().next());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
index b7e5dac..5ad7401 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/TranslationStrategy.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine;
 import org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager;
-import org.apache.tinkerpop.gremlin.process.remote.RemoteGraph;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Translator;
@@ -30,6 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 
 import javax.script.Bindings;
@@ -68,9 +68,10 @@ public final class TranslationStrategy extends AbstractTraversalStrategy<Travers
         if (!(traversal.getParent() instanceof EmptyStep))
             return;
 
-        // if the graph is RemoteGraph, RemoteStrategy will send the traversal
-        if (traversal.getGraph().isPresent() && traversal.getGraph().get() instanceof RemoteGraph)
-            return;
+        // verifications to ensure unsupported steps do not exist in the traversal
+        if (Boolean.valueOf(System.getProperty("is.testing", "false")) &&
+                (traversal.getBytecode().toString().contains("$") || traversal.getBytecode().toString().contains("HashSetSupplier")))
+            throw new VerificationException("Test suite does not support profiling nor lambdas", traversal);
 
         final Traversal.Admin<?, ?> translatedTraversal;
         ////////////////

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
index 70dc2f8..1e6645b 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/jsr223/TinkerGraphJavaTranslatorProvider.java
@@ -21,9 +21,12 @@ package org.apache.tinkerpop.gremlin.tinkergraph.process.jsr223;
 
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
@@ -41,6 +44,10 @@ public class TinkerGraphJavaTranslatorProvider extends TinkerGraphProvider {
     private static Set<String> SKIP_TESTS = new HashSet<>(Arrays.asList(
             "testProfileStrategyCallback",
             "testProfileStrategyCallbackSideEffect",
+            TraversalInterruptionTest.class.getCanonicalName(),
+            TraversalInterruptionComputerTest.class.getCanonicalName(),
+            "shouldNeverPropagateANoBulkTraverser",
+            "shouldNeverPropagateANullValuedTraverser",
             ProgramTest.Traversals.class.getCanonicalName()));
 
 
@@ -60,7 +67,7 @@ public class TinkerGraphJavaTranslatorProvider extends TinkerGraphProvider {
             //throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
         else {
             final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new TranslationStrategy(g, JavaTranslator.of(g, __.class)));
+            return g.withStrategies(new TranslationStrategy(g, JavaTranslator.of(g)));
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
index 422abba..452affe 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
@@ -24,9 +24,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 import org.apache.tinkerpop.gremlin.process.traversal.Translator;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
 import org.apache.tinkerpop.gremlin.process.traversal.util.BytecodeHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
 
@@ -59,12 +57,6 @@ final class GraphSONTranslator<S extends TraversalSource, T extends Traversal.Ad
     @Override
     public T translate(final Bytecode bytecode) {
         try {
-            for (final Bytecode.Instruction instruction : bytecode.getStepInstructions()) {
-                for (final Object argument : instruction.getArguments()) {
-                    if (argument.toString().contains("$"))
-                        throw new VerificationException("Lambdas are currently not supported: " + bytecode, EmptyTraversal.instance());
-                }
-            }
             final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
             this.writer.writeObject(outputStream, BytecodeHelper.filterInstructions(bytecode,
                     instruction -> !instruction.getOperator().equals(TraversalSource.Symbols.withStrategies)));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5e2aade8/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
index 4b19804..4b5878f 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
@@ -82,7 +82,7 @@ public class TinkerGraphGraphSONTranslatorProvider extends TinkerGraphProvider {
             //throw new VerificationException("This test current does not work with Gremlin-Python", EmptyTraversal.instance());
         else {
             final GraphTraversalSource g = graph.traversal();
-            return g.withStrategies(new TranslationStrategy(g, new GraphSONTranslator<>(JavaTranslator.of(g, __.class))));
+            return g.withStrategies(new TranslationStrategy(g, new GraphSONTranslator<>(JavaTranslator.of(g))));
         }
     }
 }
\ No newline at end of file