You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2019/11/07 00:30:32 UTC
[tinkerpop] 01/01: TINKERPOP-2311 Implemented Iterable on
TraversalStrategies
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-2311
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 1e06e3067f3abb01f10bab124bdf92e4de33a759
Author: stephen <sp...@gmail.com>
AuthorDate: Wed Nov 6 19:27:48 2019 -0500
TINKERPOP-2311 Implemented Iterable on TraversalStrategies
Minor refactoring to polish up toList() usage a bit in favor of foreach and Iterator usage where sensible.
---
CHANGELOG.asciidoc | 1 +
.../computer/traversal/TraversalVertexProgram.java | 2 +-
.../traversal/step/map/TraversalVertexProgramStep.java | 2 +-
.../strategy/decoration/VertexProgramStrategy.java | 4 ++--
.../gremlin/process/traversal/TraversalStrategies.java | 17 +++++++++++------
.../strategy/decoration/RequirementsStrategy.java | 2 +-
.../strategy/decoration/SideEffectStrategy.java | 2 +-
.../verification/StandardVerificationStrategy.java | 4 ++--
.../process/traversal/util/DefaultTraversal.java | 2 +-
.../traversal/util/DefaultTraversalStrategies.java | 2 +-
.../traversal/util/EmptyTraversalStrategies.java | 2 +-
.../process/traversal/util/TraversalExplanation.java | 2 +-
.../gremlin/process/traversal/util/TraversalHelper.java | 2 +-
.../gremlin/process/TraversalStrategiesTest.java | 17 +++++++++--------
.../gremlin/process/traversal/step/map/ProfileTest.java | 11 +++++------
.../optimization/EarlyLimitStrategyProcessTest.java | 2 +-
.../interceptor/SparkStarBarrierInterceptor.java | 2 +-
.../optimization/SparkInterceptorStrategyTest.java | 8 ++++----
.../optimization/SparkSingleIterationStrategyTest.java | 12 ++++++------
19 files changed, 51 insertions(+), 45 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 50fa442..11a097b 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -30,6 +30,7 @@ This release also includes changes from <<release-3-4-3, 3.4.3>>.
* Renamed `StoreStep` to `AggregateLocalStep`.
* Renamed `AggregateStep` to `AggregateGlobalStep`.
* Renamed `SERVER_ERROR_SCRIPT_EVALUATION` to `SERVER_ERROR_EVALUATION` given that this response code applies to remote traversals as well as scripts.
+* Refactored `TraversalStrategies` to implement `Iterable`.
* Configured GraphBinary as the default binary serialization format for the Java Driver.
* Configured GraphSON 3.0 as the default text serialization format when no serializer can be determined.
* Upgraded to Neo4j 3.4.11.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 4cc7238..a5f9dfe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -178,7 +178,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
this.traversal.get().getParent().asStep().getNextStep().getNextStep() instanceof ComputerResultStep));
// determine how to store halted traversers
- final Iterator<?> itty = IteratorUtils.filter(this.traversal.get().getStrategies().toList(), strategy -> strategy instanceof HaltedTraverserStrategy).iterator();
+ final Iterator<?> itty = IteratorUtils.filter(this.traversal.get().getStrategies(), strategy -> strategy instanceof HaltedTraverserStrategy).iterator();
this.haltedTraverserStrategy = itty.hasNext() ? (HaltedTraverserStrategy) itty.next() : HaltedTraverserStrategy.reference();
// register traversal side-effects in memory
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
index 30cfee5..3fa36a9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java
@@ -74,7 +74,7 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen
final Traversal.Admin<?, ?> computerSpecificTraversal = this.computerTraversal.getPure();
final TraversalStrategies computerSpecificStrategies = this.getTraversal().getStrategies().clone();
- IteratorUtils.filter(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()).toList(),
+ IteratorUtils.filter(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()),
s -> s instanceof TraversalStrategy.ProviderOptimizationStrategy).forEach(computerSpecificStrategies::addStrategies);
computerSpecificTraversal.setStrategies(computerSpecificStrategies);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
index 2d63510..8c2e28a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java
@@ -162,8 +162,8 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
}
public static Optional<Computer> getComputer(final TraversalStrategies strategies) {
- final Optional<TraversalStrategy<?>> optional = strategies.toList().stream().filter(strategy -> strategy instanceof VertexProgramStrategy).findAny();
- return optional.isPresent() ? Optional.of(((VertexProgramStrategy) optional.get()).computer) : Optional.empty();
+ final Optional<VertexProgramStrategy> optional = strategies.getStrategy(VertexProgramStrategy.class);
+ return optional.isPresent() ? Optional.of(optional.get().computer) : Optional.empty();
}
public void addGraphComputerStrategies(final TraversalSource traversalSource) {
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 0689bc8..f336908 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -41,6 +41,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Stan
import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.gremlin.util.tools.MultiMap;
import java.io.Serializable;
@@ -65,19 +66,22 @@ import java.util.stream.Collectors;
* @author Marko A. Rodriguez (http://markorodriguez.com)
* @author Matthias Broecheler (me@matthiasb.com)
*/
-public interface TraversalStrategies extends Serializable, Cloneable {
+public interface TraversalStrategies extends Serializable, Cloneable, Iterable<TraversalStrategy<?>> {
static List<Class<? extends TraversalStrategy>> STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class));
/**
- * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}.
+ * Return an immutable list of the {@link TraversalStrategy} instances.
*/
- public List<TraversalStrategy<?>> toList();
+ public default List<TraversalStrategy<?>> toList() {
+ return Collections.unmodifiableList(IteratorUtils.list(iterator()));
+ }
/**
- * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}.
+ * Return an {@code Iterator} of the {@link TraversalStrategy} instances.
*/
- public Iterator<TraversalStrategy<?>> toIterator();
+ @Override
+ public Iterator<TraversalStrategy<?>> iterator();
/**
* Return the {@link TraversalStrategy} instance associated with the provided class.
@@ -87,7 +91,8 @@ public interface TraversalStrategies extends Serializable, Cloneable {
* @return an optional containing the strategy instance or not
*/
public default <T extends TraversalStrategy> Optional<T> getStrategy(final Class<T> traversalStrategyClass) {
- return (Optional) toList().stream().filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny();
+ return (Optional<T>) IteratorUtils.stream(iterator()).
+ filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny();
}
/**
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
index 09d1806..cd9d663 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java
@@ -49,7 +49,7 @@ public final class RequirementsStrategy extends AbstractTraversalStrategy<Traver
}
public static void addRequirements(final TraversalStrategies traversalStrategies, final TraverserRequirement... requirements) {
- RequirementsStrategy strategy = (RequirementsStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof RequirementsStrategy).findAny().orElse(null);
+ RequirementsStrategy strategy = (RequirementsStrategy) traversalStrategies.getStrategy(RequirementsStrategy.class).orElse(null);
if (null == strategy) {
strategy = new RequirementsStrategy();
traversalStrategies.addStrategies(strategy);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
index f3f5d4b..6be1cb4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
@@ -50,7 +50,7 @@ public final class SideEffectStrategy extends AbstractTraversalStrategy<Traversa
}
public static <A> void addSideEffect(final TraversalStrategies traversalStrategies, final String key, final A value, final BinaryOperator<A> reducer) {
- SideEffectStrategy strategy = (SideEffectStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof SideEffectStrategy).findAny().orElse(null);
+ SideEffectStrategy strategy = traversalStrategies.getStrategy(SideEffectStrategy.class).orElse(null);
if (null == strategy) {
strategy = new SideEffectStrategy();
traversalStrategies.addStrategies(strategy);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
index fc33c69..5a41c92 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
@@ -51,8 +51,8 @@ public final class StandardVerificationStrategy extends AbstractTraversalStrateg
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
- if (!traversal.getStrategies().toList().contains(ComputerFinalizationStrategy.instance()) &&
- !traversal.getStrategies().toList().contains(ComputerVerificationStrategy.instance())) {
+ if (!traversal.getStrategies().getStrategy(ComputerFinalizationStrategy.class).isPresent() &&
+ !traversal.getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent()) {
if (!TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal).isEmpty())
throw new VerificationException("VertexComputing steps must be executed with a GraphComputer: " + TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal), traversal);
}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index 592f46c..78b49eb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -138,7 +138,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
// moving side-effect setting after actual recursive strategy application we save a loop and by
// consequence also fix a problem where strategies might reset something in sideeffects which seems to
// happen in TranslationStrategy.
- final Iterator<TraversalStrategy<?>> strategyIterator = this.strategies.toIterator();
+ final Iterator<TraversalStrategy<?>> strategyIterator = this.strategies.iterator();
while (strategyIterator.hasNext()) {
final TraversalStrategy<?> strategy = strategyIterator.next();
TraversalHelper.applyTraversalRecursively(strategy::apply, this);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
index e41762a..3e39d1b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java
@@ -70,7 +70,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
}
@Override
- public Iterator<TraversalStrategy<?>> toIterator() {
+ public Iterator<TraversalStrategy<?>> iterator() {
return this.traversalStrategies.iterator();
}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
index f9e1e62..f99d4bc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java
@@ -42,7 +42,7 @@ public final class EmptyTraversalStrategies implements TraversalStrategies {
@Override
- public Iterator<TraversalStrategy<?>> toIterator() {
+ public Iterator<TraversalStrategy<?>> iterator() {
return toList().iterator();
}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java
index 1ef5e97..c793a95 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java
@@ -52,7 +52,7 @@ public class TraversalExplanation extends AbstractExplanation implements Seriali
public TraversalExplanation(final Traversal.Admin<?, ?> traversal) {
this.traversal = traversal.clone();
final TraversalStrategies mutatingStrategies = new DefaultTraversalStrategies();
- for (final TraversalStrategy strategy : this.traversal.getStrategies().toList()) {
+ for (final TraversalStrategy strategy : this.traversal.getStrategies()) {
final Traversal.Admin<?, ?> mutatingTraversal = this.traversal.clone();
mutatingStrategies.addStrategies(strategy);
mutatingTraversal.setStrategies(mutatingStrategies);
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 c406ee8..120b2ec 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
@@ -687,7 +687,7 @@ public final class TraversalHelper {
childTraversal.setStrategies(parentTraversal.getStrategies());
childTraversal.setSideEffects(parentTraversal.getSideEffects());
parentTraversal.getGraph().ifPresent(childTraversal::setGraph);
- for (final TraversalStrategy<?> strategy : parentTraversal.getStrategies().toList()) {
+ for (final TraversalStrategy<?> strategy : parentTraversal.getStrategies()) {
strategy.apply(childTraversal);
if (null != stopAfterStrategy && stopAfterStrategy.isInstance(strategy))
break;
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
index e2d625c..1247986 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java
@@ -66,10 +66,11 @@ public class TraversalStrategiesTest {
TestGraph graph = new TestGraph();
TraversalStrategies strategies = graph.traversal().getStrategies();
assertFalse(TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList().isEmpty());
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()) {
+ assertTrue(TraversalStrategies.GlobalCache.getStrategies(Graph.class).iterator().hasNext());
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class)) {
assertTrue(strategies.getStrategy(strategy.getClass()).isPresent());
}
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class)) {
assertFalse(strategies.getStrategy(strategy.getClass()).isPresent());
}
assertTrue(strategies.getStrategy(StrategyA.class).isPresent());
@@ -83,10 +84,10 @@ public class TraversalStrategiesTest {
///
graph = new TestGraph();
strategies = graph.traversal().getStrategies();
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class)) {
assertTrue(strategies.getStrategy(strategy.getClass()).isPresent());
}
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class)) {
assertFalse(strategies.getStrategy(strategy.getClass()).isPresent());
}
assertFalse(strategies.getStrategy(StrategyA.class).isPresent());
@@ -98,10 +99,10 @@ public class TraversalStrategiesTest {
//////////////////////
strategies = TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class);
assertFalse(TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList().isEmpty());
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class)) {
assertTrue(strategies.getStrategy(strategy.getClass()).isPresent());
}
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class)) {
assertFalse(strategies.getStrategy(strategy.getClass()).isPresent());
}
assertFalse(strategies.getStrategy(StrategyA.class).isPresent());
@@ -112,10 +113,10 @@ public class TraversalStrategiesTest {
//
strategies = TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class);
assertFalse(TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList().isEmpty());
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class)) {
assertTrue(strategies.getStrategy(strategy.getClass()).isPresent());
}
- for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class).toList()) {
+ for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class)) {
assertFalse(strategies.getStrategy(strategy.getClass()).isPresent());
}
assertFalse(strategies.getStrategy(StrategyA.class).isPresent());
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java
index ae8df07..839b47d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java
@@ -55,7 +55,6 @@ import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
import static org.hamcrest.core.IsEqual.equalTo;
-import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
@@ -258,8 +257,8 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest {
final TraversalMetrics traversalMetrics = traversal.next();
validate_g_V_repeat_both_modern_profile(traversalMetrics,
- traversal.asAdmin().getStrategies().toList().contains(RepeatUnrollStrategy.instance()) &&
- !traversal.asAdmin().getStrategies().toList().contains(ComputerVerificationStrategy.instance()));
+ traversal.asAdmin().getStrategies().getStrategy(RepeatUnrollStrategy.class).isPresent() &&
+ !traversal.asAdmin().getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent());
}
@Test
@@ -270,8 +269,8 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest {
traversal.iterate();
final TraversalMetrics traversalMetrics = traversal.asAdmin().getSideEffects().get(METRICS_KEY);
validate_g_V_repeat_both_modern_profile(traversalMetrics,
- traversal.asAdmin().getStrategies().toList().contains(RepeatUnrollStrategy.instance()) &&
- !traversal.asAdmin().getStrategies().toList().contains(ComputerVerificationStrategy.instance()));
+ traversal.asAdmin().getStrategies().getStrategy(RepeatUnrollStrategy.class).isPresent() &&
+ !traversal.asAdmin().getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent());
}
private void validate_g_V_repeat_both_modern_profile(final TraversalMetrics traversalMetrics, final boolean withRepeatUnrollStrategy) {
@@ -326,7 +325,7 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest {
assertEquals(1, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(1, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
- if (traversal.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof CountStrategy)) {
+ if (traversal.asAdmin().getStrategies().getStrategy(CountStrategy.class).isPresent()) {
assertEquals("Metrics 1 should have 4 nested metrics.", 4, metrics.getNested().size());
} else {
assertEquals("Metrics 1 should have 3 nested metrics.", 3, metrics.getNested().size());
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java
index 8a640e2..33d18c1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java
@@ -90,7 +90,7 @@ public class EarlyLimitStrategyProcessTest extends AbstractGremlinProcessTest {
assumeTrue("The following assertions apply to TinkerGraph only as provider strategies can alter the " +
"steps to not comply with expectations", graph.getClass().getSimpleName().equals("TinkerGraph"));
- if (t.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof EarlyLimitStrategy)) {
+ if (t.asAdmin().getStrategies().getStrategy(EarlyLimitStrategy.class).isPresent()) {
assertEquals(10, metrics.getMetrics().size());
assertTrue(metrics.getMetrics(5).getName().endsWith("@[d]"));
assertEquals("RangeGlobalStep(0,1)", metrics.getMetrics(6).getName());
diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java
index de42525..7eb12d4 100644
--- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java
@@ -163,7 +163,7 @@ public final class SparkStarBarrierInterceptor implements SparkVertexProgramInte
final Step<?, ?> startStep = traversal.getStartStep();
final Step<?, ?> endStep = traversal.getEndStep();
// right now this is not supported because of how the SparkStarBarrierInterceptor mutates the traversal prior to local evaluation
- if (traversal.getStrategies().toList().stream().filter(strategy -> strategy instanceof SubgraphStrategy).findAny().isPresent())
+ if (traversal.getStrategies().getStrategy(SubgraphStrategy.class).isPresent())
return false;
if (!startStep.getClass().equals(GraphStep.class) || ((GraphStep) startStep).returnsEdge())
return false;
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java
index 302c8f9..b1d58a6 100644
--- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java
@@ -69,9 +69,9 @@ public class SparkInterceptorStrategyTest extends AbstractSparkTest {
///
Graph graph = GraphFactory.open(configuration);
GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkSingleIterationStrategy.class);
- assertFalse(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance()));
+ assertFalse(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent());
assertFalse(g.V().count().explain().toString().contains(SparkSingleIterationStrategy.class.getSimpleName()));
- assertTrue(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance()));
+ assertTrue(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent());
assertTrue(g.V().count().explain().toString().contains(SparkInterceptorStrategy.class.getSimpleName()));
/// groupCount(m)-test
Traversal.Admin<Vertex, Long> traversal = g.V().groupCount("m").by(T.label).count().asAdmin();
@@ -97,9 +97,9 @@ public class SparkInterceptorStrategyTest extends AbstractSparkTest {
///
Graph graph = GraphFactory.open(configuration);
GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkSingleIterationStrategy.class);
- assertFalse(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance()));
+ assertFalse(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent());
assertFalse(g.V().count().explain().toString().contains(SparkSingleIterationStrategy.class.getSimpleName()));
- assertTrue(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance()));
+ assertTrue(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent());
assertTrue(g.V().count().explain().toString().contains(SparkInterceptorStrategy.class.getSimpleName()));
/// SparkCountInterceptor matches
test(SparkStarBarrierInterceptor.class, 6l, g.V().count());
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java
index df15a19..6202f33 100644
--- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java
@@ -88,11 +88,11 @@ public class SparkSingleIterationStrategyTest extends AbstractSparkTest {
Graph graph = GraphFactory.open(configuration);
GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkInterceptorStrategy.class, MessagePassingReductionStrategy.class);
- assertFalse(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance()));
+ assertFalse(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent());
assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkInterceptorStrategy).findAny().isPresent());
- assertFalse(g.getStrategies().toList().contains(MessagePassingReductionStrategy.instance()));
+ assertFalse(g.getStrategies().getStrategy(MessagePassingReductionStrategy.class).isPresent());
assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof MessagePassingReductionStrategy).findAny().isPresent());
- assertTrue(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance()));
+ assertTrue(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent());
assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkSingleIterationStrategy).findAny().isPresent());
test(true, g.V().limit(10));
@@ -116,11 +116,11 @@ public class SparkSingleIterationStrategyTest extends AbstractSparkTest {
graph = GraphFactory.open(configuration);
g = graph.traversal().withComputer().withoutStrategies(SparkInterceptorStrategy.class).withStrategies(MessagePassingReductionStrategy.instance());
- assertFalse(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance()));
+ assertFalse(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent());
assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkInterceptorStrategy).findAny().isPresent());
- assertTrue(g.getStrategies().toList().contains(MessagePassingReductionStrategy.instance()));
+ assertTrue(g.getStrategies().getStrategy(MessagePassingReductionStrategy.class).isPresent());
assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof MessagePassingReductionStrategy).findAny().isPresent());
- assertTrue(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance()));
+ assertTrue(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent());
assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkSingleIterationStrategy).findAny().isPresent());
test(true, g.V().limit(10));