This is an automated email from the ASF dual-hosted git repository.

colegreer pushed a commit to branch traversal-parents
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/traversal-parents by this push:
     new 6b7445ddd5 fix cloning in AbstractMergeElementStepPlaceholder
6b7445ddd5 is described below

commit 6b7445ddd5a6356f939ae73e47b5bdc761e71a37
Author: Cole-Greer <[email protected]>
AuthorDate: Thu Sep 18 09:35:36 2025 -0700

    fix cloning in AbstractMergeElementStepPlaceholder
---
 .../map/AbstractMergeElementStepPlaceholder.java   | 34 +++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractMergeElementStepPlaceholder.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractMergeElementStepPlaceholder.java
index 45b475b13b..ca3d8ae105 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractMergeElementStepPlaceholder.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractMergeElementStepPlaceholder.java
@@ -67,7 +67,39 @@ public abstract class AbstractMergeElementStepPlaceholder<S, 
E> extends Abstract
 
     @Override
     public AbstractMergeElementStepPlaceholder<S, E> clone() {
-        return (AbstractMergeElementStepPlaceholder<S, E>) super.clone();
+        AbstractMergeElementStepPlaceholder<S, E> clone = 
(AbstractMergeElementStepPlaceholder<S, E>) super.clone();
+        if (mergeTraversal != null){
+            clone.setMerge(mergeTraversal.clone());
+        }
+        if (onMatchTraversal != null) {
+            clone.setOnMatch(onMatchTraversal.clone());
+        }
+        if (onCreateTraversal != null) {
+            clone.setOnCreate(onCreateTraversal.clone());
+        }
+
+        // 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);
+        }
+        return clone;
     }
 
     @Override

Reply via email to