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

xiazcy pushed a commit to branch multi-label-experiment
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 93b3b0c9cc90922c1272513ac700e9538b5485fe
Author: Yang Xia <[email protected]>
AuthorDate: Thu Jun 25 10:11:15 2026 -0700

    remove dead edge code
---
 .../traversal/dsl/graph/GraphTraversal.java        |  23 -----
 .../traversal/dsl/graph/GraphTraversalSource.java  |  25 -----
 .../gremlin/process/traversal/dsl/graph/__.java    |   7 --
 .../step/map/AbstractAddEdgeStepPlaceholder.java   |   5 -
 .../traversal/step/map/AddEdgeStartStep.java       |  32 +-----
 .../step/map/AddEdgeStartStepPlaceholder.java      |  10 +-
 .../process/traversal/step/map/AddEdgeStep.java    |  32 +-----
 .../traversal/step/map/AddEdgeStepPlaceholder.java |  10 +-
 .../process/traversal/step/map/MergeEdgeStep.java  | 111 +++------------------
 .../structure/io/graphml/GraphMLWriter.java        |   6 +-
 .../io/graphson/GraphSONSerializersV1.java         |   8 +-
 .../io/graphson/GraphSONSerializersV2.java         |   8 +-
 .../io/graphson/GraphSONSerializersV3.java         |   8 +-
 .../structure/io/gryo/GryoSerializersV3.java       |  10 +-
 14 files changed, 39 insertions(+), 256 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 b402e506a8..3e0a847154 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
@@ -1665,29 +1665,6 @@ public interface GraphTraversal<S, E> extends 
Traversal<S, E> {
         return this.asAdmin().addStep(step);
     }
 
-    /**
-     * Multi-label edge creation.
-     *
-     * @param label1     the first label
-     * @param label2     the second label
-     * @param moreLabels additional labels
-     * @return the traversal with the {@link AddEdgeStepContract} added
-     * @since 4.0.0
-     */
-    public default GraphTraversal<S, Edge> addE(final String label1, final 
String label2, final String... moreLabels) {
-        if (null == label1) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        if (null == label2) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        for (final String l : moreLabels) {
-            if (null == l) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        }
-        this.asAdmin().getGremlinLang().addStep(Symbols.addE, label1, label2, 
moreLabels);
-        final Set<String> allLabels = new LinkedHashSet<>();
-        allLabels.add(label1);
-        allLabels.add(label2);
-        Collections.addAll(allLabels, moreLabels);
-        return this.asAdmin().addStep(new 
AddEdgeStepPlaceholder<>(this.asAdmin(), allLabels));
-    }
-
     /**
      * Provide {@code from()}-modulation to respective steps.
      *
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index bea323f252..ce5286de06 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -432,31 +432,6 @@ public class GraphTraversalSource implements 
TraversalSource {
         return traversal.addStep(new AddEdgeStartStepPlaceholder(traversal, 
label));
     }
 
-    /**
-     * Spawns a {@link GraphTraversal} by adding an edge with multiple labels.
-     *
-     * @param label1     the first label
-     * @param label2     the second label
-     * @param moreLabels additional labels
-     * @return the traversal with the edge added
-     * @since 4.0.0
-     */
-    public GraphTraversal<Edge, Edge> addE(final String label1, final String 
label2, final String... moreLabels) {
-        if (null == label1) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        if (null == label2) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        for (final String l : moreLabels) {
-            if (null == l) throw new IllegalArgumentException("edgeLabel 
cannot be null");
-        }
-        final GraphTraversalSource clone = this.clone();
-        clone.gremlinLang.addStep(GraphTraversal.Symbols.addE, label1, label2, 
moreLabels);
-        final GraphTraversal.Admin<Edge, Edge> traversal = new 
DefaultGraphTraversal<>(clone);
-        final Set<String> allLabels = new LinkedHashSet<>();
-        allLabels.add(label1);
-        allLabels.add(label2);
-        Collections.addAll(allLabels, moreLabels);
-        return traversal.addStep(new AddEdgeStartStepPlaceholder(traversal, 
allLabels));
-    }
-
     /**
      * Spawns a {@link GraphTraversal} by doing a merge (i.e. upsert) style 
operation for an {@link Vertex} using a
      * {@code Map} as an argument. The {@code Map} represents search criteria 
and will match each of the supplied
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 506bc4e91f..421a1f33ad 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -756,13 +756,6 @@ public class __ {
         return __.<A>start().addE(edgeLabel);
     }
 
-    /**
-     * @see GraphTraversal#addE(String, String, String...)
-     */
-    public static <A> GraphTraversal<A, Edge> addE(final String label1, final 
String label2, final String... moreLabels) {
-        return __.<A>start().addE(label1, label2, moreLabels);
-    }
-
     /**
      * @see GraphTraversal#addE(GValue)
      */
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java
index 95d377c317..fb1ce7e8c9 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddEdgeStepPlaceholder.java
@@ -29,7 +29,6 @@ import 
org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex;
 import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 
 public abstract class AbstractAddEdgeStepPlaceholder<S> extends 
AbstractAddElementStepPlaceholder<S, Edge, Event.EdgeAddedEvent> implements 
AddEdgeStepContract<S> {
     protected Traversal.Admin<?, ?> from;
@@ -43,10 +42,6 @@ public abstract class AbstractAddEdgeStepPlaceholder<S> 
extends AbstractAddEleme
         super(traversal, label);
     }
 
-    public AbstractAddEdgeStepPlaceholder(Traversal.Admin traversal, 
Set<String> labels) {
-        super(traversal, labels);
-    }
-
     public AbstractAddEdgeStepPlaceholder(Traversal.Admin traversal, 
Traversal.Admin<S, String> labelTraversal) {
         super(traversal, labelTraversal);
     }
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
index 99ccd7ce9e..628587a509 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStep.java
@@ -19,10 +19,7 @@
 
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -70,15 +67,6 @@ public class AddEdgeStartStep extends AbstractStep<Edge, 
Edge> implements AddEdg
         this.internalParameters.set(this, T.label, edgeLabelTraversal);
     }
 
-    public AddEdgeStartStep(final Traversal.Admin traversal, final Set<String> 
labels) {
-        super(traversal);
-        if (labels == null || labels.isEmpty()) {
-            this.internalParameters.set(this, T.label, Edge.DEFAULT_LABEL);
-        } else {
-            this.internalParameters.set(this, T.label, labels);
-        }
-    }
-
     @Override
     public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() {
         return this.internalParameters.getTraversals();
@@ -133,21 +121,7 @@ public class AddEdgeStartStep extends AbstractStep<Edge, 
Edge> implements AddEdg
             // a dead traverser to trigger the traversal
             final Traverser.Admin traverser = generator.generate(1, (Step) 
this, 1);
 
-            final Object labelParam = this.internalParameters.get(traverser, 
T.label, () -> Edge.DEFAULT_LABEL).get(0);
-            final String edgeLabel;
-            final Set<String> additionalLabels;
-            if (labelParam instanceof Set) {
-                final Set<String> labelSet = (Set<String>) labelParam;
-                final Iterator<String> iter = labelSet.iterator();
-                edgeLabel = iter.next();
-                additionalLabels = new LinkedHashSet<>();
-                while (iter.hasNext()) {
-                    additionalLabels.add(iter.next());
-                }
-            } else {
-                edgeLabel = (String) labelParam;
-                additionalLabels = Collections.emptySet();
-            }
+            final String edgeLabel = (String) 
this.internalParameters.get(traverser, T.label, () -> 
Edge.DEFAULT_LABEL).get(0);
 
             // FROM/TO must be set and must be vertices
             Object theTo = this.internalParameters.get(traverser, TO, () -> 
null).get(0);
@@ -191,10 +165,6 @@ public class AddEdgeStartStep extends AbstractStep<Edge, 
Edge> implements AddEdg
             }
 
             final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, 
this.internalParameters.getKeyValues(traverser, TO, FROM, T.label));
-            if (!additionalLabels.isEmpty()) {
-                final String[] extra = additionalLabels.toArray(new String[0]);
-                edge.addLabel(extra[0], Arrays.copyOfRange(extra, 1, 
extra.length));
-            }
             EventUtil.registerEdgeCreation(callbackRegistry, getTraversal(), 
edge);
             return generator.generate(edge, this, 1L);
         } else
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java
index bbf4d429f3..6042823e17 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepPlaceholder.java
@@ -24,8 +24,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTrave
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 
-import java.util.Set;
-
 public class AddEdgeStartStepPlaceholder extends 
AbstractAddEdgeStepPlaceholder<Edge> {
 
     public AddEdgeStartStepPlaceholder(final Traversal.Admin traversal, final 
String edgeLabel) {
@@ -42,16 +40,10 @@ public class AddEdgeStartStepPlaceholder extends 
AbstractAddEdgeStepPlaceholder<
                 (Traversal.Admin<Edge, String>) edgeLabelTraversal);
     }
 
-    public AddEdgeStartStepPlaceholder(final Traversal.Admin traversal, final 
Set<String> labels) {
-        super(traversal, labels);
-    }
-
     @Override
     public AddEdgeStartStep asConcreteStep() {
         AddEdgeStartStep step;
-        if (label instanceof Set) {
-            step = new AddEdgeStartStep(traversal, (Set<String>) label);
-        } else if (label instanceof Traversal) {
+        if (label instanceof Traversal) {
             step = new AddEdgeStartStep(traversal, ((Traversal<?, String>) 
label).asAdmin());
         } else if (label instanceof GValue) {
             step = new AddEdgeStartStep(traversal, ((GValue<String>) 
label).get());
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index 7073a7e80f..753d9ae993 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -18,10 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
-import java.util.Arrays;
 import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -65,15 +62,6 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> 
implements AddEdgeSte
         this.internalParameters.set(this, T.label, edgeLabelTraversal);
     }
 
-    public AddEdgeStep(final Traversal.Admin traversal, final Set<String> 
labels) {
-        super(traversal);
-        if (labels == null || labels.isEmpty()) {
-            this.internalParameters.set(this, T.label, Edge.DEFAULT_LABEL);
-        } else {
-            this.internalParameters.set(this, T.label, labels);
-        }
-    }
-
     @Override
     public <S, E> List<Traversal.Admin<S, E>> getLocalChildren() {
         return this.internalParameters.getTraversals();
@@ -121,21 +109,7 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> 
implements AddEdgeSte
 
     @Override
     protected Edge map(final Traverser.Admin<S> traverser) {
-        final Object labelParam = this.internalParameters.get(traverser, 
T.label, () -> Edge.DEFAULT_LABEL).get(0);
-        final String edgeLabel;
-        final Set<String> additionalLabels;
-        if (labelParam instanceof Set) {
-            final Set<String> labelSet = (Set<String>) labelParam;
-            final Iterator<String> iter = labelSet.iterator();
-            edgeLabel = iter.next();
-            additionalLabels = new LinkedHashSet<>();
-            while (iter.hasNext()) {
-                additionalLabels.add(iter.next());
-            }
-        } else {
-            edgeLabel = (String) labelParam;
-            additionalLabels = Collections.emptySet();
-        }
+        final String edgeLabel = this.internalParameters.get(traverser, 
T.label, () -> Edge.DEFAULT_LABEL).get(0);
 
         Vertex toVertex = getAdjacentVertex(this.internalParameters, TO, 
traverser, edgeLabel);
         Vertex fromVertex = getAdjacentVertex(this.internalParameters, FROM, 
traverser, edgeLabel);
@@ -161,10 +135,6 @@ public class AddEdgeStep<S> extends ScalarMapStep<S, Edge> 
implements AddEdgeSte
         }
 
         final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, 
this.internalParameters.getKeyValues(traverser, TO, FROM, T.label));
-        if (!additionalLabels.isEmpty()) {
-            final String[] extra = additionalLabels.toArray(new String[0]);
-            edge.addLabel(extra[0], Arrays.copyOfRange(extra, 1, 
extra.length));
-        }
         EventUtil.registerEdgeCreation(callbackRegistry, getTraversal(), edge);
         return edge;
     }
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java
index a992a1314a..a6a5a4466a 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepPlaceholder.java
@@ -24,8 +24,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTrave
 import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 
-import java.util.Set;
-
 public class AddEdgeStepPlaceholder<S> extends 
AbstractAddEdgeStepPlaceholder<S> {
 
     public AddEdgeStepPlaceholder(final Traversal.Admin traversal, final 
String edgeLabel) {
@@ -41,16 +39,10 @@ public class AddEdgeStepPlaceholder<S> extends 
AbstractAddEdgeStepPlaceholder<S>
                 new ConstantTraversal<>(Edge.DEFAULT_LABEL) : 
edgeLabelTraversal);
     }
 
-    public AddEdgeStepPlaceholder(final Traversal.Admin traversal, final 
Set<String> labels) {
-        super(traversal, labels);
-    }
-
     @Override
     public AddEdgeStep<S> asConcreteStep() {
         AddEdgeStep<S> step;
-        if (label instanceof Set) {
-            step = new AddEdgeStep<>(traversal, (Set<String>) label);
-        } else if (label instanceof Traversal) {
+        if (label instanceof Traversal) {
             step = new AddEdgeStep<>(traversal, ((Traversal<S, String>) 
label).asAdmin());
         } else if (label instanceof GValue) {
             step = new AddEdgeStep<>(traversal, ((GValue<String>) 
label).get());
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java
index 9bc4e59f78..3535143192 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeEdgeStep.java
@@ -20,7 +20,6 @@ package 
org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -167,21 +166,17 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
         final Graph graph = getGraph();
 
         final Object edgeId = search.get(T.id);
-        final Object labelValue = search.get(T.label);
+        final String edgeLabel = (String) search.get(T.label);
         final Object fromId = search.get(Direction.OUT);
         final Object toId = search.get(Direction.IN);
 
-        // Extract a single label string for use in outE(label)/inE(label) 
calls.
-        // For multi-label (collection), we use hasLabel() chaining instead.
-        final String singleLabel = labelValue instanceof String ? (String) 
labelValue : null;
-        final boolean hasLabelConstraint = labelValue != null;
-
         GraphTraversal t;
         if (edgeId != null) {
 
             // 
g.E(eid).hasLabel(label).where(outV().hasId(fromId)).where(inV().hasId(toId));
             t = graph.traversal().E(edgeId);
-            t = applyLabelConstraint(t, labelValue);
+            if (edgeLabel != null)
+                t = t.hasLabel(edgeLabel);
             if (fromId != null)
                 t = t.where(outV().hasId(fromId));
             if (toId != null)
@@ -191,14 +186,10 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
 
             // g.V(fromId).outE(label).where(inV().hasId(toId));
             t = graph.traversal().V(fromId);
-            if (singleLabel != null)
-                t = t.outE(singleLabel);
-            else {
+            if (edgeLabel != null)
+                t = t.outE(edgeLabel);
+            else
                 t = t.outE();
-                // apply multi-label constraint after outE() if it's a 
collection
-                if (hasLabelConstraint && singleLabel == null)
-                    t = applyLabelConstraint(t, labelValue);
-            }
             if (toId != null)
                 t = t.where(inV().hasId(toId));
 
@@ -206,20 +197,17 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
 
             // g.V(toId).inE(edgeLabel);
             t = graph.traversal().V(toId);
-            if (singleLabel != null)
-                t = t.inE(singleLabel);
-            else {
+            if (edgeLabel != null)
+                t = t.inE(edgeLabel);
+            else
                 t = t.inE();
-                // apply multi-label constraint after inE() if it's a 
collection
-                if (hasLabelConstraint && singleLabel == null)
-                    t = applyLabelConstraint(t, labelValue);
-            }
 
         } else {
 
             // g.E().hasLabel(label)
             t = graph.traversal().E();
-            t = applyLabelConstraint(t, labelValue);
+            if (edgeLabel != null)
+                t = t.hasLabel(edgeLabel);
 
         }
 
@@ -234,26 +222,6 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
         return CloseableIterator.of(t);
     }
 
-    /**
-     * Apply label constraint(s) to the traversal. Supports both single String 
labels and
-     * Collection labels with AND semantics (edge must have ALL specified 
labels).
-     */
-    protected GraphTraversal applyLabelConstraint(GraphTraversal t, final 
Object labelValue) {
-        if (labelValue == null) {
-            return t;
-        }
-        if (labelValue instanceof String) {
-            return t.hasLabel((String) labelValue);
-        } else if (labelValue instanceof java.util.Collection) {
-            // Multi-label: AND semantics - must have ALL specified labels
-            for (final Object label : (java.util.Collection<?>) labelValue) {
-                t = t.hasLabel((String) label);
-            }
-            return t;
-        }
-        return t;
-    }
-
     protected Map<?,?> resolveVertices(final Map map, final Traverser.Admin<S> 
traverser) {
         resolveVertex(Merge.outV, Direction.OUT, map, traverser, 
outVTraversal);
         resolveVertex(Merge.inV, Direction.IN, map, traverser, inVTraversal);
@@ -311,32 +279,14 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
                 traverser.set((S) e);
 
                 // assume good input from GraphTraversal - folks might drop in 
a T here even though it is immutable
-                final Map onMatchMap = materializeMap(traverser, 
onMatchTraversal);
+                final Map<String, ?> onMatchMap = materializeMap(traverser, 
onMatchTraversal);
                 validateMapInput(onMatchMap, true);
 
                 onMatchMap.forEach((key, value) -> {
-                    // Handle T.label for multi-label support: append only 
(addLabel semantics)
-                    // No label removal via onMatch — follows cardinality 
exceptions
-                    if (T.label.equals(key) || 
T.label.getAccessor().equals(key)) {
-                        if (value instanceof String) {
-                            e.addLabel((String) value);
-                        } else if (value instanceof java.util.Collection) {
-                            final java.util.Collection<?> labels = 
(java.util.Collection<?>) value;
-                            if (!labels.isEmpty()) {
-                                final String[] labelArray = labels.stream()
-                                        .map(l -> (String) l)
-                                        .toArray(String[]::new);
-                                e.addLabel(labelArray[0],
-                                        Arrays.copyOfRange(labelArray, 1, 
labelArray.length));
-                            }
-                        }
-                        return;
-                    }
-
                     // trigger callbacks for eventing - in this case, it's a 
EdgePropertyChangedEvent. if there's no
                     // registry/callbacks then just set the property
-                    EventUtil.registerEdgePropertyChange(callbackRegistry, 
getTraversal(), e, (String) key, value);
-                    e.property((String) key, value);
+                    EventUtil.registerEdgePropertyChange(callbackRegistry, 
getTraversal(), e, key, value);
+                    e.property(key, value);
                 });
 
             });
@@ -367,30 +317,7 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
 
         final Vertex fromV = resolveVertex(onCreateMap.get(Direction.OUT));
         final Vertex toV = resolveVertex(onCreateMap.get(Direction.IN));
-        final Object labelValue = onCreateMap.getOrDefault(T.label, 
Edge.DEFAULT_LABEL);
-        final String primaryLabel;
-        final java.util.Collection<String> additionalLabels;
-
-        if (labelValue instanceof String) {
-            primaryLabel = (String) labelValue;
-            additionalLabels = Collections.emptyList();
-        } else if (labelValue instanceof java.util.Collection) {
-            final java.util.Collection<?> labelCollection = 
(java.util.Collection<?>) labelValue;
-            if (labelCollection.isEmpty()) {
-                primaryLabel = Edge.DEFAULT_LABEL;
-                additionalLabels = Collections.emptyList();
-            } else {
-                final Iterator<?> iter = labelCollection.iterator();
-                primaryLabel = (String) iter.next();
-                additionalLabels = new ArrayList<>();
-                while (iter.hasNext()) {
-                    additionalLabels.add((String) iter.next());
-                }
-            }
-        } else {
-            primaryLabel = Edge.DEFAULT_LABEL;
-            additionalLabels = Collections.emptyList();
-        }
+        final String label = (String) onCreateMap.getOrDefault(T.label, 
Edge.DEFAULT_LABEL);
 
         final List<Object> properties = new ArrayList<>();
 
@@ -402,13 +329,7 @@ public class MergeEdgeStep<S> extends MergeElementStep<S, 
Edge, Map<Object, Obje
             properties.add(e.getValue());
         }
 
-        final Edge edge = fromV.addEdge(primaryLabel, toV, 
properties.toArray());
-
-        // add any additional labels from a multi-label collection
-        if (!additionalLabels.isEmpty()) {
-            final String[] extraLabels = additionalLabels.toArray(new 
String[0]);
-            edge.addLabel(extraLabels[0], Arrays.copyOfRange(extraLabels, 1, 
extraLabels.length));
-        }
+        final Edge edge = fromV.addEdge(label, toV, properties.toArray());
 
         // trigger callbacks for eventing - in this case, it's a 
VertexAddedEvent
         
EventUtil.registerEdgeCreationWithGenericEventRegistry(callbackRegistry, 
getTraversal(), edge);
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
index 0c75805f3a..cae0f9c987 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLWriter.java
@@ -266,7 +266,7 @@ public final class GraphMLWriter implements GraphWriter {
 
                     writer.writeStartElement(GraphMLTokens.DATA);
                     writer.writeAttribute(GraphMLTokens.KEY, 
this.edgeLabelKey);
-                    writer.writeCharacters(edge.label() == null ? "" : 
edge.label());
+                    writer.writeCharacters(edge.label());
                     writer.writeEndElement();
 
                     final List<String> keys = new ArrayList<>(edge.keys());
@@ -296,7 +296,7 @@ public final class GraphMLWriter implements GraphWriter {
 
                     writer.writeStartElement(GraphMLTokens.DATA);
                     writer.writeAttribute(GraphMLTokens.KEY, 
this.edgeLabelKey);
-                    writer.writeCharacters(edge.label() == null ? "" : 
edge.label());
+                    writer.writeCharacters(edge.label());
                     writer.writeEndElement();
 
                     for (String key : edge.keys()) {
@@ -328,7 +328,7 @@ public final class GraphMLWriter implements GraphWriter {
 
             writer.writeStartElement(GraphMLTokens.DATA);
             writer.writeAttribute(GraphMLTokens.KEY, this.vertexLabelKey);
-            writer.writeCharacters(vertex.label() == null ? "" : 
vertex.label());
+            writer.writeCharacters(vertex.label());
             writer.writeEndElement();
 
             for (String key : keys) {
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
index feb49e9487..db4d4a8d60 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1.java
@@ -139,10 +139,10 @@ final class GraphSONSerializersV1 {
             if (typeSerializer != null) 
jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
             GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), 
jsonGenerator, serializerProvider, typeSerializer);
 
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() 
== null ? "" : edge.label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
             jsonGenerator.writeStringField(GraphSONTokens.TYPE, 
GraphSONTokens.EDGE);
-            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label() == null ? "" : edge.inVertex().label());
-            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label() == null ? "" : edge.outVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label());
             GraphSONUtil.writeWithType(GraphSONTokens.IN, 
edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
             GraphSONUtil.writeWithType(GraphSONTokens.OUT, 
edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
             writeProperties(edge, jsonGenerator, serializerProvider, 
typeSerializer);
@@ -195,7 +195,7 @@ final class GraphSONSerializersV1 {
             jsonGenerator.writeStartObject();
             if (typeSerializer != null) 
jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
             GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), 
jsonGenerator, serializerProvider, typeSerializer);
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label() == null ? "" : vertex.label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label());
             jsonGenerator.writeStringField(GraphSONTokens.TYPE, 
GraphSONTokens.VERTEX);
             writeProperties(vertex, jsonGenerator, serializerProvider, 
typeSerializer);
             jsonGenerator.writeEndObject();
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
index 745d9ceb90..c3113ebfe4 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2.java
@@ -100,7 +100,7 @@ class GraphSONSerializersV2 {
             jsonGenerator.writeStartObject();
 
             jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id());
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label() == null ? "" : vertex.label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label());
             writeProperties(vertex, jsonGenerator);
 
             jsonGenerator.writeEndObject();
@@ -149,9 +149,9 @@ class GraphSONSerializersV2 {
             jsonGenerator.writeStartObject();
 
             jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id());
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() 
== null ? "" : edge.label());
-            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label() == null ? "" : edge.inVertex().label());
-            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label() == null ? "" : edge.outVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label());
             jsonGenerator.writeObjectField(GraphSONTokens.IN, 
edge.inVertex().id());
             jsonGenerator.writeObjectField(GraphSONTokens.OUT, 
edge.outVertex().id());
             writeProperties(edge, jsonGenerator);
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
index 650d8e599f..b6761dc529 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3.java
@@ -101,7 +101,7 @@ class GraphSONSerializersV3 {
             jsonGenerator.writeStartObject();
 
             jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id());
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label() == null ? "" : vertex.label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, 
vertex.label());
             writeTypeForGraphObjectIfUntyped(jsonGenerator, typeInfo, 
GraphSONTokens.VERTEX);
             writeProperties(vertex, jsonGenerator, serializerProvider);
 
@@ -161,10 +161,10 @@ class GraphSONSerializersV3 {
             jsonGenerator.writeStartObject();
 
             jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id());
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label() 
== null ? "" : edge.label());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
             writeTypeForGraphObjectIfUntyped(jsonGenerator, typeInfo, 
GraphSONTokens.EDGE);
-            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label() == null ? "" : edge.inVertex().label());
-            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label() == null ? "" : edge.outVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, 
edge.inVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, 
edge.outVertex().label());
             jsonGenerator.writeObjectField(GraphSONTokens.IN, 
edge.inVertex().id());
             jsonGenerator.writeObjectField(GraphSONTokens.OUT, 
edge.outVertex().id());
             writeProperties(edge, jsonGenerator);
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
index a54239972d..0b748813f5 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoSerializersV3.java
@@ -75,7 +75,7 @@ public final class GryoSerializersV3 {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, 
final O output, final Edge edge) {
             kryo.writeClassAndObject(output, edge.id());
-            output.writeString(edge.label() == null ? "" : edge.label());
+            output.writeString(edge.label());
             kryo.writeClassAndObject(output, edge.inVertex().id());
 
             // temporary try/catch perhaps? need this to get 
SparkSingleIterationStrategyTest to work. Trying to grab
@@ -85,8 +85,7 @@ public final class GryoSerializersV3 {
             //
             // ghetto
             try {
-                final String inLabel = edge.inVertex().label();
-                output.writeString(inLabel == null ? Vertex.DEFAULT_LABEL : 
inLabel);
+                output.writeString(edge.inVertex().label());
             } catch (Exception ex) {
                 output.writeString(Vertex.DEFAULT_LABEL);
             }
@@ -95,8 +94,7 @@ public final class GryoSerializersV3 {
 
             // same nonsense as above for a default label
             try {
-                final String outLabel = edge.outVertex().label();
-                output.writeString(outLabel == null ? Vertex.DEFAULT_LABEL : 
outLabel);
+                output.writeString(edge.outVertex().label());
             } catch (Exception ex) {
                 output.writeString(Vertex.DEFAULT_LABEL);
             }
@@ -135,7 +133,7 @@ public final class GryoSerializersV3 {
         @Override
         public <O extends OutputShim> void write(final KryoShim<?, O> kryo, 
final O output, final Vertex vertex) {
             kryo.writeClassAndObject(output, vertex.id());
-            output.writeString(vertex.label() == null ? "" : vertex.label());
+            output.writeString(vertex.label());
 
             final Iterator<? extends VertexProperty> properties = 
vertex.properties();
             output.writeBoolean(properties.hasNext());


Reply via email to