This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 5ee753a6aa75e5762a404fafbc6427eca6091828 Author: Stephen Mallette <[email protected]> AuthorDate: Fri Sep 12 09:03:29 2025 -0400 Fixed clone for placeholder step --- .../map/AbstractAddElementStepPlaceholder.java | 28 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java index 7783711d5b..49d8fded06 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java @@ -293,9 +293,31 @@ public abstract class AbstractAddElementStepPlaceholder<S, E extends Element, X if (label != null) { clone.label = label.clone(); } - clone.properties.putAll(properties); - clone.elementId = elementId; - clone.scopeKeys.addAll(scopeKeys); + + // deep clone properties + clone.properties = new HashMap<>(); + for (Map.Entry<Object, List<Object>> entry : this.properties.entrySet()) { + final Object key = entry.getKey(); + final List<Object> oldValues = entry.getValue(); + final List<Object> newValues = new ArrayList<>(oldValues.size()); + for (Object v : oldValues) { + if (v instanceof Traversal) { + newValues.add(((Traversal<?, ?>) v).asAdmin().clone()); + } else if (v instanceof GValue) { + try { + newValues.add(((GValue) v).clone()); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + } else { + newValues.add(v); + } + } + clone.properties.put(key, newValues); + } + + clone.elementId = this.elementId; + clone.scopeKeys = new HashSet<>(this.scopeKeys); return clone; }
