This is an automated email from the ASF dual-hosted git repository. kenhuuu pushed a commit to branch g2-param in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit d00c2b7f8cb412ccc8115b7b15ef504f2055ee57 Author: Cole-Greer <[email protected]> AuthorDate: Wed Nov 27 17:43:15 2024 -0800 fix failing feature tests --- .../language/grammar/TraversalMethodVisitor.java | 2 ++ .../grammar/TraversalSourceSpawnMethodVisitor.java | 4 ++++ .../traversal/dsl/graph/GraphTraversal.java | 27 ++++++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java index 55c74aeea8..d9c4702a5e 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java @@ -143,6 +143,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal> final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return graphTraversal.mergeE((GValue<Map<Object, Object>>) literalOrVar); + else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && ((GValue) literalOrVar).get() == null) + return graphTraversal.mergeE(GValue.ofMap(((GValue) literalOrVar).getName(), null)); else return graphTraversal.mergeE((Map) literalOrVar); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java index c65b283b0a..4c57cd4a67 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java @@ -134,6 +134,8 @@ public class TraversalSourceSpawnMethodVisitor extends DefaultGremlinBaseVisitor final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return this.traversalSource.mergeV((GValue) literalOrVar); + else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && ((GValue) literalOrVar).get() == null) + return this.traversalSource.mergeV((GValue) GValue.ofMap(((GValue) literalOrVar).getName(), null)); else return this.traversalSource.mergeV((Map) literalOrVar); } @@ -162,6 +164,8 @@ public class TraversalSourceSpawnMethodVisitor extends DefaultGremlinBaseVisitor final Object literalOrVar = antlr.argumentVisitor.visitGenericLiteralMapNullableArgument(ctx.genericLiteralMapNullableArgument()); if (GValue.valueInstanceOf(literalOrVar, GType.MAP)) return this.traversalSource.mergeE((GValue) literalOrVar); + else if (GValue.valueInstanceOf(literalOrVar, GType.UNKNOWN) && ((GValue) literalOrVar).get() == null) + return this.traversalSource.mergeE((GValue) GValue.ofMap(((GValue) literalOrVar).getName(), null)); else return this.traversalSource.mergeE((Map) literalOrVar); } 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 624e3cfb2e..06a382d179 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 @@ -208,7 +208,6 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty; import org.apache.tinkerpop.gremlin.util.CollectionUtil; import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; -import java.lang.reflect.Array; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Arrays; @@ -2888,7 +2887,31 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { // be turned into array first if (otherIds != null) { for (final Object i : otherIds) { - if (id instanceof Object[]) { + // to retain existing behavior, GValue's containing collections are unrolled by 1 layer. + // For example, GValue.of([1, 2]) is processed to [GValue.of(1), GValue.of(2)] + if(i instanceof GValue) { + Object value = ((GValue) i).get(); + if (i instanceof Object[]) { + for (Object o : (Object[]) value) { + if(o instanceof GValue) { + ids.add(o); + } else { + ids.add(GValue.of(null, o)); + } + } + } else if(value instanceof Collection) { + for (Object o : (Collection<?>) value) { + if(o instanceof GValue) { + ids.add(o); + } else { + ids.add(GValue.of(null, o)); + } + } + } else { + ids.add(i); + } + } + else if (i instanceof Object[]) { Collections.addAll(ids, (Object[]) i); } else if (i instanceof Collection) { ids.addAll((Collection<?>) i);
