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;
     }
 

Reply via email to