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

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

commit 03e798f5054266e2dab26fa10c51af8bba8be2ef
Author: Yang Xia <55853655+xia...@users.noreply.github.com>
AuthorDate: Fri Nov 17 10:46:54 2023 -0800

    CTR add null check to concat() constructor
---
 .../tinkerpop/gremlin/process/traversal/step/map/ConcatStep.java | 9 ++++++---
 .../gremlin/process/traversal/step/map/ConcatStepTest.java       | 5 +++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStep.java
index f473561d92..04811d823b 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStep.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -53,14 +54,16 @@ public final class ConcatStep<S> extends ScalarMapStep<S, 
String> implements Tra
 
     public ConcatStep(final Traversal.Admin traversal, final String... 
concatStrings) {
         super(traversal);
-        this.concatStrings = 
Collections.unmodifiableList(Arrays.asList(concatStrings));
+        this.concatStrings = null == concatStrings? null : 
Collections.unmodifiableList(Arrays.asList(concatStrings));
         this.stringArgsResult = processStrings(concatStrings);
     }
 
     public ConcatStep(final Traversal.Admin traversal, final Traversal<?, 
String> concatTraversal, final Traversal<?, String>... otherConcatTraversals) {
         super(traversal);
-        this.concatTraversals = new 
ArrayList<>(Collections.singletonList((Traversal.Admin<S, String>) 
concatTraversal.asAdmin()));
-        this.concatTraversals.addAll(Stream.of(otherConcatTraversals).map(ct 
-> (Traversal.Admin<S, String>) ct.asAdmin()).collect(Collectors.toList()));
+        this.concatTraversals = null == concatTraversal? new ArrayList<>() : 
new ArrayList<>(Collections.singletonList((Traversal.Admin<S, String>) 
concatTraversal.asAdmin()));
+        if (null != otherConcatTraversals) {
+            
this.concatTraversals.addAll(Stream.of(otherConcatTraversals).filter(Objects::nonNull).map(ct
 -> (Traversal.Admin<S, String>) ct.asAdmin()).collect(Collectors.toList()));
+        }
         this.concatTraversals.forEach(this::integrateChild);
     }
 
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStepTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStepTest.java
index 4229aa6418..476a696c06 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStepTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ConcatStepTest.java
@@ -59,6 +59,11 @@ public class ConcatStepTest extends StepTest {
                 __.__("a", "b", "c", "d").as("letters").
                         constant("Hello ").concat(__.constant("Mr."), 
__.select("letters")).toList().toArray());
 
+        assertNull(__.inject(null).concat(null).next());
+        assertNull(__.inject(null).concat(__.constant(null)).next());
+        assertArrayEquals(new String[]{"hi"},
+                __.__(null).concat(null, null, 
__.constant("hi")).toList().toArray());
+
         String nullStr = null;
         assertNull(__.inject(null).concat(nullStr).next());
         assertArrayEquals(new String[]{"a", "b", null},

Reply via email to