This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/3.8-dev by this push:
new d4a48bee9b CTR: Update CONCRETE_STEPS list for all step contracts
d4a48bee9b is described below
commit d4a48bee9b1aff021f82b0a493153bc33f1579b0
Author: Cole-Greer <[email protected]>
AuthorDate: Tue Sep 30 17:34:05 2025 -0700
CTR: Update CONCRETE_STEPS list for all step contracts
---
.../tinkerpop/gremlin/process/traversal/P.java | 2 --
.../traversal/dsl/graph/GraphTraversal.java | 4 ++--
.../gremlin/process/traversal/step/GValue.java | 17 ----------------
.../traversal/step/filter/IsStepContract.java | 6 ++++++
.../step/filter/RangeGlobalStepContract.java | 6 ++++++
.../step/filter/TailGlobalStepContract.java | 7 +++++++
.../traversal/step/map/AddEdgeStepContract.java | 4 +---
.../traversal/step/map/AddElementStepContract.java | 11 ++++++++++-
.../traversal/step/map/AddVertexStepContract.java | 7 +++++++
.../traversal/step/map/CallStepContract.java | 7 +++++++
.../traversal/step/map/MergeStepContract.java | 7 +++++++
.../process/traversal/step/map/RangeLocalStep.java | 1 -
.../{filter => map}/RangeLocalStepContract.java | 9 ++++++++-
.../{filter => map}/RangeLocalStepPlaceholder.java | 4 +---
.../process/traversal/step/map/TailLocalStep.java | 1 -
.../{filter => map}/TailLocalStepContract.java | 10 +++++++++-
.../{filter => map}/TailLocalStepPlaceholder.java | 5 +----
.../traversal/step/map/VertexStepContract.java | 7 +++++++
.../step/sideEffect/AddPropertyStepContract.java | 7 +++++++
.../optimization/InlineFilterStrategy.java | 2 +-
.../process/traversal/util/TraversalHelper.java | 23 +++++++++++++++++++++-
.../traversal/step/map/RangeLocalStepTest.java | 1 -
.../traversal/step/map/TailLocalStepTest.java | 1 -
23 files changed, 109 insertions(+), 40 deletions(-)
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 6b32e762cd..776981dc68 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
@@ -30,9 +30,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
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 bed433ed61..482d4d9e49 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
@@ -51,9 +51,9 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
import org.apache.tinkerpop.gremlin.process.traversal.step.Configuring;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStepPlaceholder;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStepPlaceholder;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeLocalStepPlaceholder;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStepPlaceholder;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailLocalStepPlaceholder;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStepPlaceholder;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStepPlaceholder;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStepPlaceholder;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStepPlaceholder;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.CallStepPlaceholder;
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
index 35dda09348..348b3a7c7b 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GValue.java
@@ -340,23 +340,6 @@ public class GValue<V> implements Serializable, Cloneable {
return values;
}
- /**
- * Converts possible {@link GValue} objects argument array to their values
to prevent them from leaking to the Graph API.
- * Providers extending from this step should use this method to get actual
values to prevent any {@link GValue}
- * objects from leaking to the Graph API.
- */
- public static Object[] resolveToValues(final Object[] gvalues) {
- final Object[] values = new Object[gvalues.length];
- for (int i = 0; i < gvalues.length; i++) {
- values[i] = gvalues[i] instanceof GValue ? ((GValue<?>)
gvalues[i]).get() : gvalues[i];
- if (values[i] instanceof GValueConstantTraversal) {
- // TODO:: This seems out of place here, find a better home for
this.
- values[i] = ((GValueConstantTraversal<?, ?>)
values[i]).getConstantTraversal();
- }
- }
- return values;
- }
-
/**
* Tests if any of the objects are GValues.
*/
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepContract.java
index d44cefb239..178be81c22 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/IsStepContract.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import java.util.List;
import java.util.Set;
/**
@@ -29,6 +30,11 @@ import java.util.Set;
*/
public interface IsStepContract<S> extends Step<S, S> {
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(IsStep.class,
IsStepPlaceholder.class);
+
/**
* Retrieves the step's predicate.
*
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepContract.java
index cf75b0324a..f8dfb628e7 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStepContract.java
@@ -29,6 +29,7 @@ import
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSe
import
org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.List;
import java.util.NoSuchElementException;
/**
@@ -36,6 +37,11 @@ import java.util.NoSuchElementException;
*/
public interface RangeGlobalStepContract<S> extends Step<S, S>,
FilteringBarrier<TraverserSet<S>>, Ranging, Bypassing {
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS =
List.of(RangeGlobalStep.class, RangeGlobalStepPlaceholder.class);
+
/**
* Retrieves the lower bound of the range.
*
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepContract.java
index e4f04bdcd9..79f0393d63 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStepContract.java
@@ -27,9 +27,16 @@ import
org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSe
import
org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.List;
import java.util.NoSuchElementException;
public interface TailGlobalStepContract<S> extends Step<S, S>, Bypassing,
FilteringBarrier<TraverserSet<S>> {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(TailGlobalStep.class,
TailGlobalStepPlaceholder.class);
+
Long getLimit();
default GValue<Long> getLimitAsGValue() {
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepContract.java
index 446747379d..d99f01484d 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepContract.java
@@ -18,8 +18,6 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.map;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
@@ -40,7 +38,7 @@ public interface AddEdgeStepContract<S> extends
AddElementStepContract<S, Edge>,
/**
* Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
*/
- List<Class<? extends Step>> CONCRETE_STEPS =
Collections.unmodifiableList(Arrays.asList(AddEdgeStep.class,
AddEdgeStepPlaceholder.class));
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(AddEdgeStep.class,
AddEdgeStepPlaceholder.class, AddEdgeStartStep.class,
AddEdgeStartStepPlaceholder.class);
/**
* Gets the "from" vertex for the edge to be added. If the "from" vertex
was added as a {@link Vertex}, ID, {@link GValue},
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddElementStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddElementStepContract.java
index 826225a16b..2ec26a594c 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddElementStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddElementStepContract.java
@@ -20,14 +20,23 @@ package
org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.step.Configuring;
-import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.PropertiesHolder;
import org.apache.tinkerpop.gremlin.process.traversal.step.Scoping;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import java.util.HashSet;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public interface AddElementStepContract<S, E> extends Step<S, E>,
PropertiesHolder, TraversalParent, Scoping, Configuring {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS =
Stream.of(AddVertexStepContract.CONCRETE_STEPS,
AddEdgeStepContract.CONCRETE_STEPS)
+ .flatMap(List::stream).collect(Collectors.toList());
+
Object getLabel();
default Object getLabelWithGValue() {
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepContract.java
index c97845b1f0..1f64f98138 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepContract.java
@@ -23,7 +23,14 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.Writing;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
import org.apache.tinkerpop.gremlin.structure.Vertex;
+import java.util.List;
+
public interface AddVertexStepContract<S> extends Step<S, Vertex>,
AddElementStepContract<S, Vertex>, Writing<Event.VertexAddedEvent> {
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(AddVertexStep.class,
AddVertexStepPlaceholder.class, AddVertexStartStep.class,
AddVertexStartStepPlaceholder.class);
+
boolean hasUserProvidedLabel();
}
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepContract.java
index 3e4bf03224..dc0c127416 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/CallStepContract.java
@@ -25,9 +25,16 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.structure.service.Service;
import org.apache.tinkerpop.gremlin.structure.service.ServiceRegistry;
+import java.util.List;
import java.util.Map;
public interface CallStepContract<S, E> extends Step<S, E>, Configuring,
TraversalParent {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(CallStep.class,
CallStepContract.class);
+
Service<S, E> service();
default Service<S, E> serviceGValueSafe() {
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepContract.java
index 77c3879472..7379888648 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MergeStepContract.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Merge;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.Deleting;
@@ -29,11 +30,17 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.Writing;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
import
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import java.util.List;
import java.util.Map;
import java.util.Set;
public interface MergeStepContract<S, E, C> extends Writing<Event>,
Deleting<Event>, TraversalOptionParent<Merge, S, C>, PropertiesHolder {
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS =
List.of(MergeVertexStep.class, MergeVertexStepPlaceholder.class,
MergeEdgeStep.class, MergeEdgeStepPlaceholder.class);
+
Traversal.Admin<S, Map> getMergeTraversal();
/**
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStep.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStep.java
index d3d12bcf15..d62a25af2d 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStep.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStep.java
@@ -21,7 +21,6 @@ package
org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeLocalStepContract;
import
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepContract.java
similarity index 87%
rename from
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepContract.java
rename to
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepContract.java
index b58f31950a..8f15f0b2c3 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepContract.java
@@ -16,17 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.Ranging;
+import java.util.List;
+
/**
* Defines the contract for {@code range} related steps.
*/
public interface RangeLocalStepContract<S> extends Step<S, S>, Ranging {
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(RangeLocalStep.class,
RangeLocalStepPlaceholder.class);
+
/**
* Retrieves the lower bound of the range.
*
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepPlaceholder.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepPlaceholder.java
similarity index 95%
rename from
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepPlaceholder.java
rename to
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepPlaceholder.java
index 72fdcfe870..f36b2a4c9c 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeLocalStepPlaceholder.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepPlaceholder.java
@@ -16,14 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ScalarMapStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.Collection;
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStep.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStep.java
index 472304720f..6458657d25 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStep.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStep.java
@@ -22,7 +22,6 @@ package
org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailLocalStepContract;
import
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepContract.java
similarity index 77%
rename from
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepContract.java
rename to
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepContract.java
index e7357b33d3..120207db4c 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepContract.java
@@ -16,12 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
+import java.util.List;
+
public interface TailLocalStepContract<S> extends Step<S, S> {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(TailLocalStep.class,
TailLocalStepPlaceholder.class);
+
Long getLimit();
default GValue<Long> getLimitAsGValue() {
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepPlaceholder.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepPlaceholder.java
similarity index 91%
rename from
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepPlaceholder.java
rename to
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepPlaceholder.java
index 29d8bf6da0..82f27cab8c 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailLocalStepPlaceholder.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepPlaceholder.java
@@ -16,15 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+package org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.ScalarMapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.Collection;
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepContract.java
index b7c86f2f09..fae70cda09 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexStepContract.java
@@ -26,9 +26,16 @@ import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.util.Arrays;
+import java.util.List;
import java.util.Set;
public interface VertexStepContract<E extends Element> extends Step<Vertex,
E>, AutoCloseable {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS = List.of(VertexStep.class,
VertexStepPlaceholder.class);
+
Direction getDirection();
String[] getEdgeLabels();
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepContract.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepContract.java
index 446f8ae9bb..5ea7443cf7 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepContract.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStepContract.java
@@ -30,9 +30,16 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import java.util.HashSet;
+import java.util.List;
public interface AddPropertyStepContract<S> extends Step<S, S>,
TraversalParent, Scoping, PropertiesHolder,
Writing<Event.ElementPropertyChangedEvent>,
Deleting<Event.ElementPropertyChangedEvent>, Configuring {
+
+ /**
+ * Concrete implementations of this contract that can be referenced as
TinkerPop implementations.
+ */
+ List<Class<? extends Step>> CONCRETE_STEPS =
List.of(AddPropertyStep.class, AddPropertyStepPlaceholder.class);
+
VertexProperty.Cardinality getCardinality();
@Override
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
index 3dc679bcdd..70a6a4604b 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
@@ -140,7 +140,7 @@ public final class InlineFilterStrategy extends
AbstractTraversalStrategy<Traver
step.removeHasContainer(hasContainer);
} else if (hasContainer.getBiPredicate() ==
Contains.within &&
hasContainer.getValue() instanceof Collection &&
- ((Collection)
hasContainer.getValue()).containsAll(Arrays.asList(GValue.resolveToValues(edgeLabelGValues.toArray()))))
{
+ ((Collection)
hasContainer.getValue()).containsAll(Arrays.asList(GValue.resolveToValues(edgeLabelGValues.stream().toArray(GValue[]::new)))))
{
edgeLabelGValues.addAll(hasContainer.getPredicate().isParameterized() ?
hasContainer.getPredicate().getGValues() :
Arrays.asList(GValue.ensureGValues(((Collection<String>)
hasContainer.getValue()).toArray())));
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index 156f92bdb1..c3cc3db5f6 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -38,20 +38,30 @@ import
org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStepContract;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStepContract;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.WherePredicateStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereTraversalStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeStepContract;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddElementStepContract;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStepContract;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.CallStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.MergeStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertyMapStep;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStepContract;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStepContract;
+import
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AddPropertyStepContract;
import
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
@@ -89,8 +99,19 @@ public final class TraversalHelper {
* This registry is intentionally simple and local to TraversalHelper.
*/
private static final Map<Class<?>, List<Class<? extends Step>>>
STEP_CONTRACT_REGISTRY = new HashMap<>() {{
- put(GraphStepContract.class, GraphStepContract.CONCRETE_STEPS);
put(AddEdgeStepContract.class, AddEdgeStepContract.CONCRETE_STEPS);
+ put(AddElementStepContract.class,
AddElementStepContract.CONCRETE_STEPS);
+ put(AddPropertyStepContract.class,
AddPropertyStepContract.CONCRETE_STEPS);
+ put(AddVertexStepContract.class, AddVertexStepContract.CONCRETE_STEPS);
+ put(CallStepContract.class, CallStepContract.CONCRETE_STEPS);
+ put(GraphStepContract.class, GraphStepContract.CONCRETE_STEPS);
+ put(IsStepContract.class, IsStepContract.CONCRETE_STEPS);
+ put(MergeStepContract.class, MergeStepContract.CONCRETE_STEPS);
+ put(RangeGlobalStepContract.class,
RangeGlobalStepContract.CONCRETE_STEPS);
+ put(RangeLocalStepContract.class,
RangeLocalStepContract.CONCRETE_STEPS);
+ put(TailGlobalStepContract.class,
TailGlobalStepContract.CONCRETE_STEPS);
+ put(TailLocalStepContract.class, TailLocalStepContract.CONCRETE_STEPS);
+ put(VertexStepContract.class, VertexStepContract.CONCRETE_STEPS);
}};
private TraversalHelper() { }
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepTest.java
index ffe3e804b7..17ba5977fb 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/RangeLocalStepTest.java
@@ -31,7 +31,6 @@ import
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueStepTest;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeLocalStepPlaceholder;
import org.junit.Test;
import static
org.apache.tinkerpop.gremlin.process.traversal.step.map.RangeLocalStep.applyRange;
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepTest.java
index f47f7f989c..56d861351e 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/TailLocalStepTest.java
@@ -28,7 +28,6 @@ import
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueStepTest;
-import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailLocalStepPlaceholder;
import org.junit.Test;
import static org.junit.Assert.assertEquals;