Repository: tinkerpop Updated Branches: refs/heads/TRAVIS-TEST 37d7d2953 -> f18cec874
foo Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f18cec87 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f18cec87 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f18cec87 Branch: refs/heads/TRAVIS-TEST Commit: f18cec874268649dad3041ddac5dd596949b3966 Parents: 37d7d29 Author: Daniel Kuppitz <daniel_kupp...@hotmail.com> Authored: Tue Mar 13 11:13:16 2018 -0700 Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com> Committed: Tue Mar 13 11:13:16 2018 -0700 ---------------------------------------------------------------------- .../process/traversal/TraversalSource.java | 23 +++++++++++++++++--- .../decoration/RequirementsStrategy.java | 4 ++++ .../util/DefaultTraversalStrategies.java | 5 +++-- 3 files changed, 27 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f18cec87/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java index 2421a78..f6a4bb2 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java @@ -24,12 +24,16 @@ import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.computer.GraphComputer; import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy; import org.apache.tinkerpop.gremlin.process.remote.RemoteConnection; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.RequirementsStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SackStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SideEffectStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier; import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.function.BinaryOperator; import java.util.function.Supplier; @@ -100,10 +104,23 @@ public interface TraversalSource extends Cloneable, AutoCloseable { * @return a new traversal source with updated strategies */ public default TraversalSource withStrategies(final TraversalStrategy... traversalStrategies) { - final TraversalSource clone = this.clone(); - clone.getStrategies().addStrategies(traversalStrategies); - clone.getBytecode().addSource(TraversalSource.Symbols.withStrategies, traversalStrategies); + final List<TraversalStrategy> strategiesWithDependencies = new ArrayList<>(traversalStrategies.length); + boolean addRequirementStrategy = false, containsRequirementStrategy = false; for (final TraversalStrategy traversalStrategy : traversalStrategies) { + strategiesWithDependencies.add(traversalStrategy); + addRequirementStrategy |= traversalStrategy instanceof SubgraphStrategy; + containsRequirementStrategy |= traversalStrategy instanceof RequirementsStrategy; + } + if (addRequirementStrategy && !containsRequirementStrategy) { + strategiesWithDependencies.add(RequirementsStrategy.instance()); + } + final TraversalStrategy[] allStrategies = strategiesWithDependencies.toArray( + new TraversalStrategy[strategiesWithDependencies.size()]); + + final TraversalSource clone = this.clone(); + clone.getStrategies().addStrategies(allStrategies); + clone.getBytecode().addSource(TraversalSource.Symbols.withStrategies, allStrategies); + for (final TraversalStrategy traversalStrategy : allStrategies) { if (traversalStrategy instanceof VertexProgramStrategy) { ((VertexProgramStrategy) traversalStrategy).addGraphComputerStrategies(clone); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f18cec87/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java ---------------------------------------------------------------------- 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 247835c..aec2706 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 @@ -69,6 +69,10 @@ public final class RequirementsStrategy extends AbstractTraversalStrategy<Traver Collections.addAll(strategy.requirements, requirements); } + public static RequirementsStrategy instance() { + return new RequirementsStrategy(); + } + @Override public Set<Class<? extends DecorationStrategy>> applyPost() { return Collections.singleton(VertexProgramStrategy.class); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f18cec87/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java ---------------------------------------------------------------------- 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 74e84e2..992d998 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 @@ -82,8 +82,9 @@ public class DefaultTraversalStrategies implements TraversalStrategies { @Override public void applyStrategies(final Traversal.Admin<?, ?> traversal) { - for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) { - traversalStrategy.apply(traversal); + //for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) { + for (int i = 0; i < this.traversalStrategies.size(); i++) { + this.traversalStrategies.get(i).apply(traversal); } }