Repository: tinkerpop Updated Branches: refs/heads/tp31 6d2939422 -> 2720b97d6
TINKERPOP-1397 Fix StarGraph.addEdge For self-loops, StarGraph.addEdge used to put a single StarOutEdge into both its inEdges and outEdges maps, potentially causing problems in applyGraphFilter. This change makes StarGraph.addEdge put the appropriate type of edge (Star(Out/In)Edge) in the associated map. The IDs for each edge instance are kept in agreement. This change is @okram's, who suggested it in PR #372. I merely reviewed it and added a couple of comments. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/0022b7f6 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/0022b7f6 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/0022b7f6 Branch: refs/heads/tp31 Commit: 0022b7f6be25eb7d3c778b137beb6e8a7d2784ca Parents: 4571061 Author: Dan LaRocque <dal...@hopcount.org> Authored: Wed Aug 10 18:52:13 2016 -0400 Committer: Dan LaRocque <dal...@hopcount.org> Committed: Wed Aug 10 19:10:39 2016 -0400 ---------------------------------------------------------------------- .../gremlin/structure/util/star/StarGraph.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0022b7f6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java index f516630..2089c42 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java @@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -290,14 +291,16 @@ public final class StarGraph implements Graph, Serializable { public Edge addEdge(final String label, final Vertex inVertex, final Object... keyValues) { final Edge edge = this.addOutEdge(label, inVertex, keyValues); if (inVertex.equals(this)) { - if(null == this.inEdges) - this.inEdges = new HashMap<>(); - List<Edge> inE = this.inEdges.get(label); - if (null == inE) { - inE = new ArrayList<>(); - this.inEdges.put(label, inE); + if (ElementHelper.getIdValue(keyValues).isPresent()) { + // reuse edge ID from method params + this.addInEdge(label, this, keyValues); + } else { + // copy edge ID that we just allocated with addOutEdge + final Object[] keyValuesWithId = Arrays.copyOf(keyValues, keyValues.length + 2); + keyValuesWithId[keyValuesWithId.length - 2] = T.id; + keyValuesWithId[keyValuesWithId.length - 1] = edge.id(); + this.addInEdge(label, this, keyValuesWithId); } - inE.add(edge); } return edge; }