This is an automated email from the ASF dual-hosted git repository. xiazcy pushed a commit to branch steps-taking-traversal-poc in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 96e921c5ea4e7775f95b5e70f193810c6e092793 Author: Yang Xia <[email protected]> AuthorDate: Mon May 25 15:10:35 2026 -0700 Add error throwing for mixed cases instead of silent failure --- .../tinkerpop/gremlin/process/traversal/P.java | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 29d882fa9b..24b7016ae1 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -636,6 +636,12 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { } return new P(Contains.within, traversals); } + // Reject mixed traversals and literals — would silently produce wrong results. + if (values != null && values.length > 1 && anyTraversals(values)) { + throw new IllegalArgumentException( + "Cannot mix traversals and literal values in within(). " + + "Use within(__.constant(val1), __.constant(val2)) to wrap all values as traversals."); + } final V[] v = null == values ? (V[]) new Object[] { null } : (V[]) values; return P.within(Arrays.asList(v)); } @@ -681,6 +687,12 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { } return new P(Contains.without, traversals); } + // Reject mixed traversals and literals + if (values != null && values.length > 1 && anyTraversals(values)) { + throw new IllegalArgumentException( + "Cannot mix traversals and literal values in without(). " + + "Use without(__.constant(val1), __.constant(val2)) to wrap all values as traversals."); + } final V[] v = null == values ? (V[]) new Object[] { null } : values; return P.without(Arrays.asList(v)); } @@ -872,4 +884,17 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { } return true; } + + /** + * Checks if any element in the array is a {@link Traversal} instance (specifically + * {@link org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal}). + */ + private static <V> boolean anyTraversals(final V[] values) { + for (final V v : values) { + if (v instanceof org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal) { + return true; + } + } + return false; + } }
