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

spmallette pushed a commit to branch gvalue
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit e329a7bcc3de2a482851e69013ab4e878579d7e3
Author: Stephen Mallette <[email protected]>
AuthorDate: Mon Aug 26 15:15:20 2024 -0400

    wip - fixup after rebase
---
 .../process/traversal/dsl/graph/GraphTraversal.java   |  4 ++--
 .../process/traversal/step/map/MergeElementStep.java  | 14 +++++++++++---
 .../gremlin/process/traversal/step/map/MergeStep.java | 19 ++++++++++++++-----
 3 files changed, 27 insertions(+), 10 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 375a9993b8..6342c981c6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -590,13 +590,13 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
         /**
          * Merges the list traverser and list argument. Also known as union.
          *
-         * @return the traversal with an appended {@link TraversalMergeStep}.
+         * @return the traversal with an appended {@link MergeStep}.
          * @see <a 
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#merge-step";
 target="_blank">Reference Documentation - Merge Step</a>
          * @since 3.7.3
          */
         public default <E2> GraphTraversal<S, E2> merge(final GValue<Object> 
values) {
             this.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.merge, 
values);
-            return this.asAdmin().addStep(new 
TraversalMergeStep<>(this.asAdmin(), values));
+            return this.asAdmin().addStep(new MergeStep<>(this.asAdmin(), 
values));
         }
 
         /**
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java
index 44e954fb31..6835387c5e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeElementStep.java
@@ -35,6 +35,8 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Deleting;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GType;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Writing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Parameters;
@@ -80,6 +82,11 @@ public abstract class MergeElementStep<S, E, C> extends 
FlatMapStep<S, E>
         validate(mergeMap, false);
     }
 
+    public MergeElementStep(final Traversal.Admin traversal, final boolean 
isStart, final GValue<Map> mergeMap) {
+        this(traversal, isStart, new ConstantTraversal<>(mergeMap));
+        validate(mergeMap.get(), false);
+    }
+
     public MergeElementStep(final Traversal.Admin traversal, final boolean 
isStart,
                             final Traversal.Admin mergeTraversal) {
         super(traversal);
@@ -279,7 +286,7 @@ public abstract class MergeElementStep<S, E, C> extends 
FlatMapStep<S, E>
                             op, allowedTokens, k));
                 }
                 if (k == T.label) {
-                    if (!(v instanceof String)) {
+                    if (!(GValue.instanceOf(v, GType.STRING))) {
                         throw new IllegalArgumentException(String.format(
                                 "%s() and option(onCreate) args expect T.label 
value to be of String - found: %s", op,
                                 v.getClass().getSimpleName()));
@@ -318,7 +325,8 @@ public abstract class MergeElementStep<S, E, C> extends 
FlatMapStep<S, E>
      * null Map == empty Map
      */
     protected Map materializeMap(final Traverser.Admin<S> traverser, 
Traversal.Admin<S, ?> mapTraversal) {
-        Map map = (Map) TraversalUtil.apply(traverser, mapTraversal);
+        final Object o = TraversalUtil.apply(traverser, mapTraversal);
+        Map map = GValue.getFrom(o);
 
         // PartitionStrategy uses parameters as a mechanism for setting the 
partition key. trying to be as specific
         // as possible here wrt parameters usage to avoid misuse
@@ -360,7 +368,7 @@ public abstract class MergeElementStep<S, E, C> extends 
FlatMapStep<S, E>
         return id != null ? graph.traversal().V(id) : graph.traversal().V();
     }
 
-    protected GraphTraversal searchVerticesLabelConstraint(GraphTraversal t, 
final String label) {
+    protected GraphTraversal searchVerticesLabelConstraint(final 
GraphTraversal t, final String label) {
         return label != null ? t.hasLabel(label) : t;
     }
 
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java
index d11fdf0894..e40d11c71b 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStep.java
@@ -20,6 +20,7 @@ package 
org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ListFunction;
@@ -40,7 +41,7 @@ import java.util.Set;
  */
 public final class MergeStep<S, E> extends ScalarMapStep<S, E> implements 
TraversalParent, ListFunction {
     private Traversal.Admin<S, E> valueTraversal;
-    private Object parameterItems;
+    private GValue<Object> parameterItems;
 
     public MergeStep(final Traversal.Admin traversal, final Object values) {
         super(traversal);
@@ -48,10 +49,18 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, 
E> implements Traver
         if (values instanceof Traversal) {
             valueTraversal = integrateChild(((Traversal<S, E>) 
values).asAdmin());
         } else {
-            parameterItems = values;
+            parameterItems = GValue.of(values);;
         }
     }
 
+    public Traversal.Admin<S, E> getValueTraversal() {
+        return valueTraversal;
+    }
+
+    public GValue<Object> getParameterItems() {
+        return parameterItems;
+    }
+
     @Override
     public String getStepName() { return "merge"; }
 
@@ -61,7 +70,7 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, 
E> implements Traver
 
         final Map mapA = (incoming instanceof Map) ? (Map) incoming : null;
         if (mapA != null) {
-            final Object mapB = (valueTraversal != null) ? 
TraversalUtil.apply(traverser, valueTraversal) : parameterItems;
+            final Object mapB = (valueTraversal != null) ? 
TraversalUtil.apply(traverser, valueTraversal) : parameterItems.get();
             if (!(mapB instanceof Map)) {
                 throw new IllegalArgumentException(
                         String.format(
@@ -76,13 +85,13 @@ public final class MergeStep<S, E> extends ScalarMapStep<S, 
E> implements Traver
         } else {
             final Collection listA = convertTraverserToCollection(traverser);
 
-            if (parameterItems instanceof Map) {
+            if (parameterItems != null && parameterItems.get() instanceof Map) 
{
                 throw new IllegalArgumentException(getStepName() + " step type 
mismatch: expected argument to be Iterable but got Map");
             }
             final Collection listB =
                     (null != valueTraversal)
                             ? convertTraversalToCollection(traverser, 
valueTraversal)
-                            : convertArgumentToCollection(parameterItems);
+                            : 
convertArgumentToCollection(parameterItems.get());
 
             final Set elements = new HashSet();
 

Reply via email to