From 6b3a372dd6f0ca898c6f899088c5b234b27fc8eb Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Mon, 25 Sep 2017 19:52:08 -0400
Subject: [PATCH] refactor: removed upper bound restriction on generics
 parameter in traverse method.

---
 CHANGELOG.md                                              | 2 ++
 src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java   | 2 +-
 src/main/java/com/syncleus/ferma/AbstractVertexFrame.java | 2 +-
 src/main/java/com/syncleus/ferma/EdgeFrame.java           | 2 +-
 src/main/java/com/syncleus/ferma/VertexFrame.java         | 2 +-
 src/test/java/com/syncleus/ferma/FramedVertexTest.java    | 3 +--
 6 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 48bdd905..e1e6ac68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,8 @@
   vertex in the users custom model.
 * Methods annotated with the `@Incidence` annotation can now return a `List` or a `Set` in addition to the usual
   `Iterator` return type.
+* Removed the upper bound on traversal generics. The travese function's argument has changed from
+  `GraphTraversal<? extends Vertex, ? extends Vertex>` to `GraphTraversal<Vertex, Vertex>`.
 
 ## 3.1.0
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
index 41b1d2ba..f94ae158 100644
--- a/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractEdgeFrame.java
@@ -83,7 +83,7 @@ public abstract class AbstractEdgeFrame extends AbstractElementFrame implements
     }
 
     @Override
-    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>> traverser) {
+    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<Edge, Edge>, GraphTraversal<?, ?>> traverser) {
         return this.getGraph().traverse(input -> traverser.apply(input.E(getElement().id())));
     }
 
diff --git a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
index f00568b7..98c66d08 100644
--- a/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/AbstractVertexFrame.java
@@ -268,7 +268,7 @@ public abstract class AbstractVertexFrame extends AbstractElementFrame implement
     }
 
     @Override
-    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> traverser) {
+    public <T extends Traversable<?, ?>> T traverse(final Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> traverser) {
         return this.getGraph().traverse(input -> traverser.apply(input.V(getElement().id())));
     }
 
diff --git a/src/main/java/com/syncleus/ferma/EdgeFrame.java b/src/main/java/com/syncleus/ferma/EdgeFrame.java
index e4cc82ac..69d60098 100644
--- a/src/main/java/com/syncleus/ferma/EdgeFrame.java
+++ b/src/main/java/com/syncleus/ferma/EdgeFrame.java
@@ -56,7 +56,7 @@ public interface EdgeFrame extends ElementFrame {
      */
     <T> T reframeExplicit(Class<T> kind);
 
-    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<? extends Edge, ? extends Edge>, GraphTraversal<?, ?>> traverser);
+    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<Edge, Edge>, GraphTraversal<?, ?>> traverser);
 
     GraphTraversal<? extends Edge, ? extends Edge> getRawTraversal();
 }
diff --git a/src/main/java/com/syncleus/ferma/VertexFrame.java b/src/main/java/com/syncleus/ferma/VertexFrame.java
index 3bf85d51..a556d71a 100644
--- a/src/main/java/com/syncleus/ferma/VertexFrame.java
+++ b/src/main/java/com/syncleus/ferma/VertexFrame.java
@@ -421,7 +421,7 @@ public interface VertexFrame extends ElementFrame {
      */
     <T> T reframeExplicit(Class<T> kind);
 
-    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<? extends Vertex, ? extends Vertex>, GraphTraversal<?, ?>> traverser);
+    <T extends Traversable<?, ?>> T traverse(Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> traverser);
 
     GraphTraversal<? extends Vertex, ? extends Vertex> getRawTraversal();
 }
diff --git a/src/test/java/com/syncleus/ferma/FramedVertexTest.java b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
index 76fb8903..ff056a9e 100644
--- a/src/test/java/com/syncleus/ferma/FramedVertexTest.java
+++ b/src/test/java/com/syncleus/ferma/FramedVertexTest.java
@@ -32,8 +32,7 @@ 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 = input -> input.out();
+    private static final Function<GraphTraversal<Vertex, Vertex>, GraphTraversal<?, ?>> OUT_TRAVERSAL = input -> input.out();
 
     private FramedGraph fg;
     private Person p1;
-- 
GitLab