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