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/10/22 18:54:27 UTC
[tinkerpop] 02/02: TINKERPOP-1568 Refactored strategy application a
bit.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-1568
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 64eb2a75ccfeb3f8596b67905f3a6153728330fe
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Tue Oct 22 14:43:09 2019 -0400
TINKERPOP-1568 Refactored strategy application a bit.
Removed TraversalStrategies.applyStrategies() as its completely unused. Strategies get applied by way of the Traversal not independently from the TraversalStrategies. I think that's a holdover from the early days of 3.x. Provided a way to get an Iterator of strategies to avoid immutable List creation.
---
.../gremlin/process/traversal/TraversalStrategies.java | 16 +++++++---------
.../gremlin/process/traversal/util/DefaultTraversal.java | 12 ++++++------
.../traversal/util/DefaultTraversalStrategies.java | 14 ++++++--------
.../process/traversal/util/EmptyTraversalStrategies.java | 10 ++++------
4 files changed, 23 insertions(+), 29 deletions(-)
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 6ee9cff..0689bc8 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
@@ -49,6 +49,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -69,11 +70,16 @@ public interface TraversalStrategies extends Serializable, Cloneable {
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} singleton instances associated with this {@link TraversalStrategies}.
+ * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}.
*/
public List<TraversalStrategy<?>> toList();
/**
+ * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}.
+ */
+ public Iterator<TraversalStrategy<?>> toIterator();
+
+ /**
* Return the {@link TraversalStrategy} instance associated with the provided class.
*
* @param traversalStrategyClass the class of the strategy to get
@@ -85,14 +91,6 @@ public interface TraversalStrategies extends Serializable, Cloneable {
}
/**
- * Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal}. This method must ensure that the
- * strategies are sorted prior to application.
- *
- * @param traversal the traversal to apply the strategies to
- */
- public void applyStrategies(final Traversal.Admin<?, ?> traversal);
-
- /**
* Add all the provided {@link TraversalStrategy} instances to the current collection.
* When all the provided strategies have been added, the collection is resorted.
*
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 faa80e8..0800d2c 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
@@ -125,7 +125,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
public void applyStrategies() throws IllegalStateException {
if (this.locked) throw Traversal.Exceptions.traversalIsLocked();
TraversalHelper.reIdSteps(this.stepPosition, this);
- boolean hasGraph = null != this.graph;
+ final boolean hasGraph = null != this.graph;
if (this.getParent() instanceof EmptyStep || this.getParent() instanceof VertexProgramStep) {
TraversalHelper.applyTraversalRecursively(t -> {
@@ -133,15 +133,15 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
t.setSideEffects(this.sideEffects);
}, this);
- for (final TraversalStrategy strategy : this.strategies.toList()) {
- TraversalHelper.applyTraversalRecursively(t -> {
- if (hasGraph) t.setGraph(this.graph);
- strategy.apply(t);
- }, this);
+ final Iterator<TraversalStrategy<?>> strategyIterator = this.strategies.toIterator();
+ while (strategyIterator.hasNext()) {
+ final TraversalStrategy<?> strategy = strategyIterator.next();
+ TraversalHelper.applyTraversalRecursively(strategy::apply, this);
}
// don't need to re-apply strategies to "this" - leads to endless recursion in GraphComputer.
TraversalHelper.applyTraversalRecursively(t -> {
+ if (hasGraph) t.setGraph(this.graph);
if(!(t.getParent() instanceof EmptyStep) && t != this && !t.isLocked()) {
t.setStrategies(new DefaultTraversalStrategies());
t.applyStrategies();
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 4a7d527..e41762a 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
@@ -18,13 +18,13 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.util;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
@@ -70,6 +70,11 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
}
@Override
+ public Iterator<TraversalStrategy<?>> toIterator() {
+ return this.traversalStrategies.iterator();
+ }
+
+ @Override
public <T extends TraversalStrategy> Optional<T> getStrategy(final Class<T> traversalStrategyClass) {
for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) {
if (traversalStrategyClass.isAssignableFrom(traversalStrategy.getClass()))
@@ -79,13 +84,6 @@ public class DefaultTraversalStrategies implements TraversalStrategies {
}
@Override
- public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
- for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) {
- traversalStrategy.apply(traversal);
- }
- }
-
- @Override
public DefaultTraversalStrategies clone() {
try {
final DefaultTraversalStrategies clone = (DefaultTraversalStrategies) super.clone();
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 127df4d..f9e1e62 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
@@ -18,14 +18,11 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.util;
-import org.apache.tinkerpop.gremlin.process.traversal.Translator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.DefaultTraverserGeneratorFactory;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
/**
@@ -43,9 +40,10 @@ public final class EmptyTraversalStrategies implements TraversalStrategies {
return Collections.emptyList();
}
- @Override
- public void applyStrategies(final Traversal.Admin<?, ?> traversal) {
+ @Override
+ public Iterator<TraversalStrategy<?>> toIterator() {
+ return toList().iterator();
}
@Override