the plot thickens with BulkSet and Tree needing special handling during detachment. @spmallette was right about the rabbit hole. Fortuantely, we have lots of test cases that failed cause of not handling these collections correctly. So that is a win.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c01b27ea Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c01b27ea Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c01b27ea Branch: refs/heads/tp32 Commit: c01b27ea870b15464a263254248b177a8bd0d9d4 Parents: 12de6fb Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Tue Jun 27 14:56:48 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Tue Jun 27 14:56:48 2017 -0600 ---------------------------------------------------------------------- .../gremlin/structure/util/detached/DetachedFactory.java | 10 +++++++++- .../structure/util/reference/ReferenceFactory.java | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c01b27ea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java index 775e5c6..710511c 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedFactory.java @@ -19,6 +19,8 @@ package org.apache.tinkerpop.gremlin.structure.util.detached; import org.apache.tinkerpop.gremlin.process.traversal.Path; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.Property; @@ -86,6 +88,12 @@ public class DetachedFactory { list.add(DetachedFactory.detach(item, withProperties)); } return (D) list; + } else if (object instanceof BulkSet) { + final BulkSet set = new BulkSet(); + for (Map.Entry<Object, Long> entry : ((BulkSet<Object>) object).asBulk().entrySet()) { + set.add(DetachedFactory.detach(entry.getKey(),withProperties),entry.getValue()); + } + return (D) set; } else if (object instanceof Set) { final Set set = object instanceof LinkedHashSet ? new LinkedHashSet() : new HashSet(); for (final Object item : (Set) object) { @@ -93,7 +101,7 @@ public class DetachedFactory { } return (D) set; } else if (object instanceof Map) { - final Map map = object instanceof LinkedHashMap ? new LinkedHashMap() : new HashMap(); + final Map map = object instanceof Tree ? new Tree() : object instanceof LinkedHashMap ? new LinkedHashMap() : new HashMap(); for (final Map.Entry<Object, Object> entry : ((Map<Object, Object>) object).entrySet()) { map.put(DetachedFactory.detach(entry.getKey(), withProperties), DetachedFactory.detach(entry.getValue(), withProperties)); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c01b27ea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java index 749e424..a703ada 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/reference/ReferenceFactory.java @@ -19,6 +19,8 @@ package org.apache.tinkerpop.gremlin.structure.util.reference; import org.apache.tinkerpop.gremlin.process.traversal.Path; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Element; import org.apache.tinkerpop.gremlin.structure.Property; @@ -86,6 +88,12 @@ public class ReferenceFactory { list.add(ReferenceFactory.detach(item)); } return (D) list; + } else if (object instanceof BulkSet) { + final BulkSet set = new BulkSet(); + for (Map.Entry<Object, Long> entry : ((BulkSet<Object>) object).asBulk().entrySet()) { + set.add(ReferenceFactory.detach(entry.getKey()), entry.getValue()); + } + return (D) set; } else if (object instanceof Set) { final Set set = object instanceof LinkedHashSet ? new LinkedHashSet() : new HashSet(); for (final Object item : (Set) object) { @@ -93,7 +101,7 @@ public class ReferenceFactory { } return (D) set; } else if (object instanceof Map) { - final Map map = object instanceof LinkedHashMap ? new LinkedHashMap() : new HashMap(); + final Map map = object instanceof Tree ? new Tree() : object instanceof LinkedHashMap ? new LinkedHashMap() : new HashMap(); for (final Map.Entry<Object, Object> entry : ((Map<Object, Object>) object).entrySet()) { map.put(ReferenceFactory.detach(entry.getKey()), ReferenceFactory.detach(entry.getValue())); }