From fed2ee23430f7df43c07cc6e5f94e6afa39dd61d Mon Sep 17 00:00:00 2001
From: Joshua Shinavier <joshsh@uber.com>
Date: Wed, 7 Jun 2017 15:30:24 -0700
Subject: [PATCH] Use lambdas in FramedGraph traversals

---
 .../com/syncleus/ferma/AbstractEdgeFrame.java |  14 +-
 .../syncleus/ferma/AbstractVertexFrame.java   |   8 +-
 .../syncleus/ferma/DelegatingFramedGraph.java |  80 +-------
 .../annotation/AdjacencyMethodHandler.java    | 117 +++++------
 .../annotation/InVertexMethodHandler.java     |   8 +-
 .../annotation/IncidenceMethodHandler.java    |  96 ++-------
 .../annotation/OutVertexMethodHandler.java    |   8 +-
 .../typeresolvers/UntypedTypeResolver.java    |   7 +-
 .../ferma/AbstractElementFrameTest.java       |  27 +--
 .../com/syncleus/ferma/FramedEdgeTest.java    |  51 +----
 .../com/syncleus/ferma/FramedGraphTest.java   | 171 ++++------------
 .../com/syncleus/ferma/FramedVertexTest.java  |   9 +-
 src/test/java/com/syncleus/ferma/Person.java  |  49 +----
 .../ferma/PolymorphicTypeResolverTest.java    |  82 ++------
 .../AdjacencyMethodHandlerTest.java           | 189 ++++--------------
 .../InVertexMethodHandlerTest.java            |   9 +-
 .../IncidenceMethodHandlerTest.java           |  54 ++---
 .../OutVertexMethodHandlerTest.java           |   9 +-
 .../PropertyMethodHandlerTest.java            |  36 +---
 19 files changed, 216 insertions(+), 808 deletions(-)

diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
index 2f0526d3..41b1d2ba 100644
--- a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
@@ -23,17 +23,13 @@
  */
 package com.syncleus.ferma;
 
-import java.util.function.Function;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
 
-import javax.annotation.Nullable;
-import java.util.Iterator;
+import java.util.function.Function;
 
 /**
  * The base class that all edge frames must extend.
@@ -88,13 +84,7 @@ public abstract class AbstractEdgeFrame extends AbstractElementFrame implements
 
     @Override
     public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>> traverser) {
-        return this.getGraph().traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return traverser.apply(input.E(getElement().id()));
-            }
-        });
+        return this.getGraph().traverse(input -> traverser.apply(input.E(getElement().id())));
     }
 
     @Override
diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
index 503f310f..3b2c1ca1 100644
--- a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
@@ -271,13 +271,7 @@ public abstract class AbstractVertexFrame extends AbstractElementFrame implement
 
     @Override
     public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> traverser) {
-        return this.getGraph().traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return traverser.apply(input.V(getElement().id()));
-            }
-        });
+        return this.getGraph().traverse(input -> traverser.apply(input.V(getElement().id())));
     }
 
     @Override
diff --git a/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java b/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java
index 687c20dc..d9a4d554 100644
--- a/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java
+++ b/src/main/java/com/syncleus/ferma/DelegatingFramedGraph.java
@@ -387,113 +387,53 @@ public class DelegatingFramedGraph<G extends Graph> implements WrappedFramedGrap
 
     @Override
     public <T> T getFramedVertex(final Class<T> kind, final Object id) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V(id);
-            }
-        }).next(kind);
+        return this.traverse(input -> input.V(id)).next(kind);
     }
 
     @Override
     public <T> T getFramedVertexExplicit(final Class<T> kind, final Object id) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V(id);
-            }
-        }).nextExplicit(kind);
+        return this.traverse(input -> input.V(id)).nextExplicit(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedVertices(final Class<T> kind) {
-        final Traversable<?, T> result = this.<Traversable<?, T>>traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V();
-            }
-        });
+        final Traversable<?, T> result = this.traverse(input -> input.V());
         return result.frame(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedVertices(final String key, final Object value, final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has(key, value);
-            }
-        }).frame(kind);
+        return this.traverse(input -> input.V().has(key, value)).frame(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedVerticesExplicit(final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V();
-            }
-        }).frameExplicit(kind);
+        return this.traverse(input -> input.V()).frameExplicit(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedVerticesExplicit(final String key, final Object value, final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has(key, value);
-            }
-        }).frameExplicit(kind);
+        return this.traverse(input -> input.V().has(key, value)).frameExplicit(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedEdges(final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.E();
-            }
-        }).frame(kind);
+        return this.traverse(input -> input.E()).frame(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedEdges(final String key, final Object value, final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.E().has(key, value);
-            }
-        }).frame(kind);
+        return this.traverse(input -> input.E().has(key, value)).frame(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedEdgesExplicit(final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.E();
-            }
-        }).frameExplicit(kind);
+        return this.traverse(input -> input.E()).frameExplicit(kind);
     }
 
     @Override
     public <T> Iterator<? extends T> getFramedEdgesExplicit(final String key, final Object value, final Class<T> kind) {
-        return this.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.E().has(key, value);
-            }
-        }).frameExplicit(kind);
+        return this.traverse(input -> input.E().has(key, value)).frameExplicit(kind);
     }
 
     @Override
diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java
index 0b521d16..ab5eebf7 100644
--- a/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java
+++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/AdjacencyMethodHandler.java
@@ -15,27 +15,24 @@
  */
 package com.syncleus.ferma.framefactories.annotation;
 
-import java.util.function.Function;
-import com.syncleus.ferma.typeresolvers.TypeResolver;
-import com.syncleus.ferma.*;
+import com.syncleus.ferma.ClassInitializer;
+import com.syncleus.ferma.VertexFrame;
 import com.syncleus.ferma.annotations.Adjacency;
+import com.syncleus.ferma.typeresolvers.TypeResolver;
 import net.bytebuddy.dynamic.DynamicType;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-import java.util.function.Consumer;
-
-import net.bytebuddy.matcher.ElementMatchers;
 import net.bytebuddy.implementation.MethodDelegation;
 import net.bytebuddy.implementation.bind.annotation.Argument;
 import net.bytebuddy.implementation.bind.annotation.Origin;
 import net.bytebuddy.implementation.bind.annotation.RuntimeType;
 import net.bytebuddy.implementation.bind.annotation.This;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import net.bytebuddy.matcher.ElementMatchers;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import javax.annotation.Nullable;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.function.Consumer;
 
 /**
  * A method handler that implemented the Adjacency Annotation.
@@ -165,20 +162,16 @@ public class AdjacencyMethodHandler implements MethodHandler {
             final Direction direction = annotation.direction();
             final String label = annotation.label();
 
-            return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?,?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?,?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                    switch(direction) {
-                        case IN:
-                            return input.in(label);
-                        case OUT:
-                            return input.out(label);
-                        case BOTH:
-                            return input.both(label);
-                        default:
-                            throw new IllegalStateException("Direction not recognized.");
-                    }
+            return thiz.traverse(input -> {
+                switch(direction) {
+                    case IN:
+                        return input.in(label);
+                    case OUT:
+                        return input.out(label);
+                    case BOTH:
+                        return input.both(label);
+                    default:
+                        throw new IllegalStateException("Direction not recognized.");
                 }
             }).frame(VertexFrame.class);
         }
@@ -194,20 +187,16 @@ public class AdjacencyMethodHandler implements MethodHandler {
             final String label = annotation.label();
             final TypeResolver resolver = thiz.getGraph().getTypeResolver();
 
-            return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?,?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?,?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                    switch(direction) {
-                        case IN:
-                            return resolver.hasType(input.in(label), type);
-                        case OUT:
-                            return resolver.hasType(input.out(label), type);
-                        case BOTH:
-                            return resolver.hasType(input.both(label), type);
-                        default:
-                            throw new IllegalStateException("Direction not recognized.");
-                    }
+            return thiz.traverse(input -> {
+                switch(direction) {
+                    case IN:
+                        return resolver.hasType(input.in(label), type);
+                    case OUT:
+                        return resolver.hasType(input.out(label), type);
+                    case BOTH:
+                        return resolver.hasType(input.both(label), type);
+                    default:
+                        throw new IllegalStateException("Direction not recognized.");
                 }
             }).frame(type);
         }
@@ -222,20 +211,16 @@ public class AdjacencyMethodHandler implements MethodHandler {
             final Direction direction = annotation.direction();
             final String label = annotation.label();
 
-            return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?,?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?,?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                    switch(direction) {
-                        case IN:
-                            return input.in(label);
-                        case OUT:
-                            return input.out(label);
-                        case BOTH:
-                            return input.both(label);
-                        default:
-                            throw new IllegalStateException("Direction not recognized.");
-                    }
+            return thiz.traverse(input -> {
+                switch(direction) {
+                    case IN:
+                        return input.in(label);
+                    case OUT:
+                        return input.out(label);
+                    case BOTH:
+                        return input.both(label);
+                    default:
+                        throw new IllegalStateException("Direction not recognized.");
                 }
             }).next(VertexFrame.class);
         }
@@ -251,20 +236,16 @@ public class AdjacencyMethodHandler implements MethodHandler {
             final String label = annotation.label();
             final TypeResolver resolver = thiz.getGraph().getTypeResolver();
 
-            return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?,?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?,?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                    switch(direction) {
-                        case IN:
-                            return resolver.hasType(input.in(label), type);
-                        case OUT:
-                            return resolver.hasType(input.out(label), type);
-                        case BOTH:
-                            return resolver.hasType(input.both(label), type);
-                        default:
-                            throw new IllegalStateException("Direction not recognized.");
-                    }
+            return thiz.traverse(input -> {
+                switch(direction) {
+                    case IN:
+                        return resolver.hasType(input.in(label), type);
+                    case OUT:
+                        return resolver.hasType(input.out(label), type);
+                    case BOTH:
+                        return resolver.hasType(input.both(label), type);
+                    default:
+                        throw new IllegalStateException("Direction not recognized.");
                 }
             }).next(type);
         }
diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/InVertexMethodHandler.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/InVertexMethodHandler.java
index 4d01ce4f..d91dff24 100644
--- a/src/main/java/com/syncleus/ferma/framefactories/annotation/InVertexMethodHandler.java
+++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/InVertexMethodHandler.java
@@ -67,13 +67,7 @@ public class InVertexMethodHandler implements MethodHandler {
 
         @RuntimeType
         public static Object getVertex(@This final EdgeFrame thiz, @Origin final Method method) {
-            return thiz.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                    return input.inV();
-                }
-            }).next(method.getReturnType());
+            return thiz.traverse(GraphTraversal::inV).next(method.getReturnType());
         }
     }
 }
diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/IncidenceMethodHandler.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/IncidenceMethodHandler.java
index f63b4cc9..9899968a 100644
--- a/src/main/java/com/syncleus/ferma/framefactories/annotation/IncidenceMethodHandler.java
+++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/IncidenceMethodHandler.java
@@ -274,29 +274,11 @@ public class IncidenceMethodHandler implements MethodHandler {
 
             switch (direction) {
                 case BOTH:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.bothE(label);
-                        }
-                    }).frame(VertexFrame.class);
+                    return thiz.traverse(input -> input.bothE(label)).frame(VertexFrame.class);
                 case IN:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.inE(label);
-                        }
-                    }).frame(VertexFrame.class);
+                    return thiz.traverse(input -> input.inE(label)).frame(VertexFrame.class);
                 case OUT:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.outE(label);
-                        }
-                    }).frame(VertexFrame.class);
+                    return thiz.traverse(input -> input.outE(label)).frame(VertexFrame.class);
                 default:
                     throw new IllegalStateException(method.getName() + " is annotated with a direction other than BOTH, IN, or OUT.");
             }
@@ -315,29 +297,11 @@ public class IncidenceMethodHandler implements MethodHandler {
 
             switch (direction) {
                 case BOTH:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.bothE(label), type);
-                        }
-                    }).frame(type);
+                    return thiz.traverse(input -> resolver.hasType(input.bothE(label), type)).frame(type);
                 case IN:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.inE(label), type);
-                        }
-                    }).frame(type);
+                    return thiz.traverse(input -> resolver.hasType(input.inE(label), type)).frame(type);
                 case OUT:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.outE(label), type);
-                        }
-                    }).frame(type);
+                    return thiz.traverse(input -> resolver.hasType(input.outE(label), type)).frame(type);
                 default:
                     throw new IllegalStateException(method.getName() + " is annotated with a direction other than BOTH, IN, or OUT.");
             }
@@ -355,29 +319,11 @@ public class IncidenceMethodHandler implements MethodHandler {
 
             switch (direction) {
                 case BOTH:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.bothE(label);
-                        }
-                    }).next(VertexFrame.class);
+                    return thiz.traverse(input -> input.bothE(label)).next(VertexFrame.class);
                 case IN:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.inE(label);
-                        }
-                    }).next(VertexFrame.class);
+                    return thiz.traverse(input -> input.inE(label)).next(VertexFrame.class);
                 case OUT:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return input.outE(label);
-                        }
-                    }).next(VertexFrame.class);
+                    return thiz.traverse(input -> input.outE(label)).next(VertexFrame.class);
                 default:
                     throw new IllegalStateException(method.getName() + " is annotated with a direction other than BOTH, IN, or OUT.");
             }
@@ -396,29 +342,11 @@ public class IncidenceMethodHandler implements MethodHandler {
 
             switch (direction) {
                 case BOTH:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.bothE(label), type);
-                        }
-                    }).next(type);
+                    return thiz.traverse(input -> resolver.hasType(input.bothE(label), type)).next(type);
                 case IN:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.inE(label), type);
-                        }
-                    }).next(type);
+                    return thiz.traverse(input -> resolver.hasType(input.inE(label), type)).next(type);
                 case OUT:
-                    return thiz.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-                        @Nullable
-                        @Override
-                        public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                            return resolver.hasType(input.outE(label), type);
-                        }
-                    }).next(type);
+                    return thiz.traverse(input -> resolver.hasType(input.outE(label), type)).next(type);
                 default:
                     throw new IllegalStateException(method.getName() + " is annotated with a direction other than BOTH, IN, or OUT.");
             }
diff --git a/src/main/java/com/syncleus/ferma/framefactories/annotation/OutVertexMethodHandler.java b/src/main/java/com/syncleus/ferma/framefactories/annotation/OutVertexMethodHandler.java
index ae6f51aa..6a4be2c0 100644
--- a/src/main/java/com/syncleus/ferma/framefactories/annotation/OutVertexMethodHandler.java
+++ b/src/main/java/com/syncleus/ferma/framefactories/annotation/OutVertexMethodHandler.java
@@ -67,13 +67,7 @@ public class OutVertexMethodHandler implements MethodHandler {
 
         @RuntimeType
         public static Object getVertex(@This final EdgeFrame thiz, @Origin final Method method) {
-            return thiz.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-                @Nullable
-                @Override
-                public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                    return input.outV();
-                }
-            }).next(method.getReturnType());
+            return thiz.traverse(GraphTraversal::outV).next(method.getReturnType());
         }
     }
 }
diff --git a/src/main/java/com/syncleus/ferma/typeresolvers/UntypedTypeResolver.java b/src/main/java/com/syncleus/ferma/typeresolvers/UntypedTypeResolver.java
index 664f7a63..30028b85 100644
--- a/src/main/java/com/syncleus/ferma/typeresolvers/UntypedTypeResolver.java
+++ b/src/main/java/com/syncleus/ferma/typeresolvers/UntypedTypeResolver.java
@@ -56,12 +56,7 @@ public class UntypedTypeResolver implements TypeResolver {
 
     @Override
     public <P extends Element, T extends Element> GraphTraversal<P, T> hasType(final GraphTraversal<P, T> traverser, final Class<?> type) {
-        return traverser.filter(new Predicate<Traverser<T>>() {
-            @Override
-            public boolean test(final Traverser<T> unused) {
-                return false;
-            }
-        });
+        return traverser.filter(unused -> false);
     }
 
     @Override
diff --git a/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java b/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
index eefdd371..c2594436 100644
--- a/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
+++ b/src/test/java/com/syncleus/ferma/AbstractElementFrameTest.java
@@ -90,13 +90,8 @@ public class AbstractElementFrameTest {
 
     @Test
     public void testVById() {
-        final Person person = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V(p1.<Long>getId());
-            }
-        }).next(Person.class);
+        final Person person = fg.traverse(
+            input -> input.V(p1.<Long>getId())).next(Person.class);
         Assert.assertEquals(p1, person);
     }
 
@@ -115,25 +110,15 @@ public class AbstractElementFrameTest {
 
     @Test
     public void testVByIdExplicit() {
-        final Person person = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V(p1.<Long>getId());
-            }
-        }).nextExplicit(Person.class);
+        final Person person = fg.traverse(
+            input -> input.V(p1.<Long>getId())).nextExplicit(Person.class);
         Assert.assertEquals(p1, person);
     }
 
     @Test
     public void testEByIdExplicit() {
-        final Knows knows = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.E(e1.<Long>getId());
-            }
-        }).nextExplicit(Knows.class);
+        final Knows knows = fg.traverse(
+            input -> input.E(e1.<Long>getId())).nextExplicit(Knows.class);
         Assert.assertEquals(e1, knows);
     }
 
diff --git a/src/test/java/com/syncleus/ferma/FramedEdgeTest.java b/src/test/java/com/syncleus/ferma/FramedEdgeTest.java
index 29555201..07bd1df4 100644
--- a/src/test/java/com/syncleus/ferma/FramedEdgeTest.java
+++ b/src/test/java/com/syncleus/ferma/FramedEdgeTest.java
@@ -54,73 +54,40 @@ public class FramedEdgeTest {
 
     @Test
     public void testInV() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.inV();
-            }
-        }).next(Person.class);
+        final Person person = e1.traverse(
+            GraphTraversal::inV).next(Person.class);
         Assert.assertEquals(p2, person);
     }
 
     @Test
     public void testOutV() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.outV();
-            }
-        }).next(Person.class);
+        final Person person = e1.traverse(
+            GraphTraversal::outV).next(Person.class);
         Assert.assertEquals(p1, person);
     }
 
     @Test
     public void testBothV() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.bothV();
-            }
-        }).next(Person.class);
+        final Person person = e1.traverse(
+            GraphTraversal::bothV).next(Person.class);
         Assert.assertEquals(p1, person);
     }
 
     @Test
     public void testInVExplicit() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.inV();
-            }
-        }).nextExplicit(Person.class);
+        final Person person = e1.traverse(GraphTraversal::inV).nextExplicit(Person.class);
         Assert.assertEquals(p2, person);
     }
 
     @Test
     public void testOutVExplicit() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.outV();
-            }
-        }).nextExplicit(Person.class);
+        final Person person = e1.traverse(GraphTraversal::outV).nextExplicit(Person.class);
         Assert.assertEquals(p1, person);
     }
 
     @Test
     public void testBothVExplicit() {
-        final Person person = e1.traverse(new Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Edge, ? extends Edge> input) {
-                return input.bothV();
-            }
-        }).nextExplicit(Person.class);
+        final Person person = e1.traverse(GraphTraversal::bothV).nextExplicit(Person.class);
         Assert.assertEquals(p1, person);
     }
 }
diff --git a/src/test/java/com/syncleus/ferma/FramedGraphTest.java b/src/test/java/com/syncleus/ferma/FramedGraphTest.java
index 52b29e78..e8437236 100644
--- a/src/test/java/com/syncleus/ferma/FramedGraphTest.java
+++ b/src/test/java/com/syncleus/ferma/FramedGraphTest.java
@@ -56,13 +56,8 @@ public class FramedGraphTest {
         final Knows knows = p1.addKnows(p2);
         knows.setYears(15);
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
 
 
         Assert.assertEquals("Bryn", bryn.getName());
@@ -84,13 +79,8 @@ public class FramedGraphTest {
         final Knows knows = p1.addKnows(p2);
         knows.setYears(15);
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
 
 
         Assert.assertEquals("Bryn", bryn.getName());
@@ -112,13 +102,8 @@ public class FramedGraphTest {
         final Knows knows = p1.addKnowsExplicit(p2);
         knows.setYears(15);
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).nextExplicit(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).nextExplicit(Person.class);
 
 
         Assert.assertEquals("Bryn", bryn.getName());
@@ -139,13 +124,8 @@ public class FramedGraphTest {
         final Knows knows = p1.addKnowsExplicit(p2);
         knows.setYears(15);
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).nextExplicit(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).nextExplicit(Person.class);
 
 
         Assert.assertEquals("Bryn", bryn.getName());
@@ -180,13 +160,8 @@ public class FramedGraphTest {
         assertEquals((Long) 5L, hasNotPersonCount);
         assertEquals((Long) 0L, noPersonCount);
 
-        final Iterator<? extends Person> persons = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return fg.getTypeResolver().hasType(input.V(), Person.class);
-            }
-        }).frameExplicit(Person.class);
+        final Iterator<? extends Person> persons = fg.traverse(
+            input -> fg.getTypeResolver().hasType(input.V(), Person.class)).frameExplicit(Person.class);
 
         final List<Person> personList = Lists.newArrayList(persons);
         assertEquals(11, personList.size());
@@ -210,20 +185,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertex(Person.DEFAULT_INITIALIZER);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Programmer.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -243,20 +208,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertex(Person.class);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Programmer.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -276,20 +231,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertexExplicit(Person.DEFAULT_INITIALIZER);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -309,20 +254,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertexExplicit(Person.class);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -342,20 +277,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertex(Person.DEFAULT_INITIALIZER);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).nextExplicit(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).nextExplicit(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).nextExplicit(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).nextExplicit(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -375,20 +300,10 @@ public class FramedGraphTest {
         final Person p2 = fg.addFramedVertex(Person.class);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).nextExplicit(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).nextExplicit(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).nextExplicit(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).nextExplicit(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -473,13 +388,8 @@ public class FramedGraphTest {
         final TEdge knows = p1.addFramedEdge("knows", p2);
         knows.setProperty("years", 15);
 
-        final VertexFrame bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(VertexFrame.class);
+        final VertexFrame bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(VertexFrame.class);
 
 
         Assert.assertEquals("Bryn", bryn.getProperty("name"));
@@ -501,13 +411,8 @@ public class FramedGraphTest {
         final TEdge knows = p1.addFramedEdgeExplicit("knows", p2);
         knows.setProperty("years", 15);
 
-        final VertexFrame bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(VertexFrame.class);
+        final VertexFrame bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(VertexFrame.class);
 
 
         Assert.assertEquals("Bryn", bryn.getProperty("name"));
diff --git a/src/test/java/com/syncleus/ferma/FramedVertexTest.java b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
index 4d87482f..76fb8903 100644
--- a/src/test/java/com/syncleus/ferma/FramedVertexTest.java
+++ b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
@@ -32,13 +32,8 @@ import com.google.common.collect.Lists;
 import javax.annotation.Nullable;
 
 public class FramedVertexTest {
-    private static final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> OUT_TRAVERSAL =  new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-        @Nullable
-        @Override
-        public GraphTraversal<?, ?> apply(@Nullable GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-            return input.out();
-        }
-    };
+    private static final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>
+        OUT_TRAVERSAL = input -> input.out();
 
     private FramedGraph fg;
     private Person p1;
diff --git a/src/test/java/com/syncleus/ferma/Person.java b/src/test/java/com/syncleus/ferma/Person.java
index 7291124d..108cbf9b 100644
--- a/src/test/java/com/syncleus/ferma/Person.java
+++ b/src/test/java/com/syncleus/ferma/Person.java
@@ -37,43 +37,19 @@ public class Person extends AbstractVertexFrame {
     }
 
     public Iterator<? extends Person> getKnows() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.out("knows");
-            }
-        }).frame(Person.class);
+        return this.traverse(input -> input.out("knows")).frame(Person.class);
     }
 
     public Iterator<? extends Person> getKnowsExplicit() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.out("knows");
-            }
-        }).frameExplicit(Person.class);
+        return this.traverse(input -> input.out("knows")).frameExplicit(Person.class);
     }
 
     public List<? extends Knows> getKnowsList() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.outE("knows");
-            }
-        }).toList(Knows.class);
+        return this.traverse(input -> input.outE("knows")).toList(Knows.class);
     }
 
     public List<? extends Knows> getKnowsListExplicit() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.outE("knows");
-            }
-        }).toListExplicit(Knows.class);
+        return this.traverse(input -> input.outE("knows")).toListExplicit(Knows.class);
     }
 
     public List<? extends Person> getKnowsCollectionVertices() {
@@ -85,23 +61,11 @@ public class Person extends AbstractVertexFrame {
     }
 
     public Person getFirst() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.out("knows");
-            }
-        }).next(Person.class);
+        return this.traverse(input -> input.out("knows")).next(Person.class);
     }
 
     public Person getFirstExplicit() {
-        return this.traverse(new Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversal<? extends Vertex, ? extends Vertex> input) {
-                return input.out("knows");
-            }
-        }).nextExplicit(Person.class);
+        return this.traverse(input -> input.out("knows")).nextExplicit(Person.class);
     }
 
     public Knows addKnows(final Person friend) {
@@ -111,5 +75,4 @@ public class Person extends AbstractVertexFrame {
     public Knows addKnowsExplicit(final Person friend) {
         return addFramedEdgeExplicit("knows", friend, Knows.DEFAULT_INITIALIZER);
     }
-
 }
diff --git a/src/test/java/com/syncleus/ferma/PolymorphicTypeResolverTest.java b/src/test/java/com/syncleus/ferma/PolymorphicTypeResolverTest.java
index 2cea0299..dd671de4 100644
--- a/src/test/java/com/syncleus/ferma/PolymorphicTypeResolverTest.java
+++ b/src/test/java/com/syncleus/ferma/PolymorphicTypeResolverTest.java
@@ -43,26 +43,14 @@ public class PolymorphicTypeResolverTest {
         framedGraph.addFramedVertex(Programmer.class);
 
         //make sure the newly added node is actually a programmer
-        final Person programmer = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V();
-            }
-        }).next(Person.class);
+        final Person programmer = framedGraph.traverse(input -> input.V()).next(Person.class);
         Assert.assertTrue(programmer instanceof Programmer);
 
         //change the type resolution to person
         programmer.setTypeResolution(Person.class);
 
         //make sure the newly added node is not actually a programmer
-        final Person person = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V();
-            }
-        }).next(Person.class);
+        final Person person = framedGraph.traverse(input -> input.V()).next(Person.class);
         Assert.assertFalse(person instanceof Programmer);
     }
     
@@ -78,20 +66,10 @@ public class PolymorphicTypeResolverTest {
         final Person p2 = fg.addFramedVertex(Person.DEFAULT_INITIALIZER);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(
+            input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(
+            input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Programmer.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -114,20 +92,8 @@ public class PolymorphicTypeResolverTest {
         final Person p2 = fg.addFramedVertex(Person.class);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Programmer.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -150,20 +116,8 @@ public class PolymorphicTypeResolverTest {
         final Person p2 = fg.addFramedVertexExplicit(Person.DEFAULT_INITIALIZER);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
@@ -186,20 +140,8 @@ public class PolymorphicTypeResolverTest {
         final Person p2 = fg.addFramedVertexExplicit(Person.class);
         p2.setName("Julia");
 
-        final Person bryn = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Bryn");
-            }
-        }).next(Person.class);
-        final Person julia = fg.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "Julia");
-            }
-        }).next(Person.class);
+        final Person bryn = fg.traverse(input -> input.V().has("name", "Bryn")).next(Person.class);
+        final Person julia = fg.traverse(input -> input.V().has("name", "Julia")).next(Person.class);
 
         Assert.assertEquals(Person.class, bryn.getClass());
         Assert.assertEquals(Person.class, julia.getClass());
diff --git a/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java
index 2b351fe5..32545ac3 100644
--- a/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java
+++ b/src/test/java/com/syncleus/ferma/annotations/AdjacencyMethodHandlerTest.java
@@ -38,13 +38,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -67,13 +62,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -96,13 +86,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -125,13 +110,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends GodAlternative> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(GodAlternative.class);
+        final List<? extends GodAlternative> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(GodAlternative.class);
 
         final GodAlternative father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -155,13 +135,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends GodAlternative> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(GodAlternative.class);
+        final List<? extends GodAlternative> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(GodAlternative.class);
 
         final GodAlternative father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -179,13 +154,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -207,13 +177,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -235,13 +200,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -259,13 +219,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -285,13 +240,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -313,13 +263,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -339,13 +284,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -367,13 +307,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -398,13 +333,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -433,13 +363,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -467,13 +392,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentClass> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentClass.class);
+        final List<? extends BadGetSonsArgumentClass> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentClass.class);
 
         final BadGetSonsArgumentClass father = gods.iterator().next();
     }
@@ -488,13 +408,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentInterface.class);
+        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentInterface.class);
 
         final BadGetSonsArgumentInterface father = gods.iterator().next();
     }
@@ -509,13 +424,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentInterface.class);
+        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentInterface.class);
 
         final BadGetSonsArgumentInterface father = gods.iterator().next();
     }
@@ -530,13 +440,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentInterface.class);
+        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentInterface.class);
 
         final BadGetSonsArgumentInterface father = gods.iterator().next();
     }
@@ -551,13 +456,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentInterface.class);
+        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentInterface.class);
 
         final BadGetSonsArgumentInterface father = gods.iterator().next();
     }
@@ -572,13 +472,8 @@ public class AdjacencyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, exceptionTypes);
 
-        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(BadGetSonsArgumentInterface.class);
+        final List<? extends BadGetSonsArgumentInterface> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(BadGetSonsArgumentInterface.class);
 
         final BadGetSonsArgumentInterface father = gods.iterator().next();
     }
diff --git a/src/test/java/com/syncleus/ferma/annotations/InVertexMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/InVertexMethodHandlerTest.java
index a60478a5..5a398b7f 100644
--- a/src/test/java/com/syncleus/ferma/annotations/InVertexMethodHandlerTest.java
+++ b/src/test/java/com/syncleus/ferma/annotations/InVertexMethodHandlerTest.java
@@ -39,13 +39,8 @@ public class InVertexMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         God father = gods.iterator().next();
         Assert.assertTrue(father != null);
diff --git a/src/test/java/com/syncleus/ferma/annotations/IncidenceMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/IncidenceMethodHandlerTest.java
index 1aa04b3d..90415445 100644
--- a/src/test/java/com/syncleus/ferma/annotations/IncidenceMethodHandlerTest.java
+++ b/src/test/java/com/syncleus/ferma/annotations/IncidenceMethodHandlerTest.java
@@ -41,13 +41,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -67,13 +62,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -95,13 +85,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -124,13 +109,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -148,13 +128,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -174,13 +149,8 @@ public class IncidenceMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
diff --git a/src/test/java/com/syncleus/ferma/annotations/OutVertexMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/OutVertexMethodHandlerTest.java
index 9cc30202..2a66681a 100644
--- a/src/test/java/com/syncleus/ferma/annotations/OutVertexMethodHandlerTest.java
+++ b/src/test/java/com/syncleus/ferma/annotations/OutVertexMethodHandlerTest.java
@@ -39,13 +39,8 @@ public class OutVertexMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
diff --git a/src/test/java/com/syncleus/ferma/annotations/PropertyMethodHandlerTest.java b/src/test/java/com/syncleus/ferma/annotations/PropertyMethodHandlerTest.java
index 602163b1..fe60332a 100644
--- a/src/test/java/com/syncleus/ferma/annotations/PropertyMethodHandlerTest.java
+++ b/src/test/java/com/syncleus/ferma/annotations/PropertyMethodHandlerTest.java
@@ -40,13 +40,8 @@ public class PropertyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        final List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        final List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -62,13 +57,8 @@ public class PropertyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         God father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -76,13 +66,8 @@ public class PropertyMethodHandlerTest {
         Assert.assertEquals(fatherVertex.getProperty("name"), "jupiter");
         father.setName("joopiter");
 
-        gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "joopiter");
-            }
-        }).toList(God.class);
+        gods = framedGraph.traverse(
+            input -> input.V().has("name", "joopiter")).toList(God.class);
 
         father = gods.iterator().next();
         Assert.assertTrue(father != null);
@@ -97,13 +82,8 @@ public class PropertyMethodHandlerTest {
 
         final FramedGraph framedGraph = new DelegatingFramedGraph(godGraph, TEST_TYPES);
 
-        List<? extends God> gods = framedGraph.traverse(new Function<GraphTraversalSource, GraphTraversal<?, ?>>() {
-            @Nullable
-            @Override
-            public GraphTraversal<?, ?> apply(@Nullable final GraphTraversalSource input) {
-                return input.V().has("name", "jupiter");
-            }
-        }).toList(God.class);
+        List<? extends God> gods = framedGraph.traverse(
+            input -> input.V().has("name", "jupiter")).toList(God.class);
 
         final God father = gods.iterator().next();
         Assert.assertTrue(father != null);
-- 
GitLab