done for day. minor clean up push. nothing major.

Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9dee11d6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9dee11d6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9dee11d6

Branch: refs/heads/TINKERPOP-1602
Commit: 9dee11d6534943e1953016a3e0a92549609d7252
Parents: 989237f
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Thu Jan 26 15:10:49 2017 -0700
Committer: Marko A. Rodriguez <okramma...@gmail.com>
Committed: Fri Jan 27 14:24:18 2017 -0700

----------------------------------------------------------------------
 .../optimization/SingleIterationStrategy.java   | 56 +++++++++-----------
 1 file changed, 25 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9dee11d6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/optimization/SingleIterationStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/optimization/SingleIterationStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/optimization/SingleIterationStrategy.java
index 19d9854..eed1104 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/optimization/SingleIterationStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/optimization/SingleIterationStrategy.java
@@ -28,7 +28,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import 
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
-import org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder;
 import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectCapable;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.LocalStep;
@@ -91,36 +90,31 @@ public final class SingleIterationStrategy extends 
AbstractTraversalStrategy<Tra
                         break;
                     }
                 }
-            } // if the traversal doesn't message pass, then don't try and 
localize it as its just wasted computation
-            if (doesMessagePass) {
-                final boolean beyondStarGraph =
-                        
TraversalHelper.hasStepOfAssignableClassRecursively(Scope.global, 
LambdaHolder.class, computerTraversal) ||
-                                
!TraversalHelper.isLocalStarGraph(computerTraversal);
-                if (!beyondStarGraph &&                                        
                                                         // if we move beyond 
the star graph, then localization is not possible.
-                        (computerTraversal.getStartStep() instanceof 
GraphStep) &&                                                      // while 
GraphComputer requires GraphStep starts, this is just a precaution when 
inject() starts are supported
-                        !(computerTraversal.getStartStep().getNextStep() 
instanceof EmptyStep) &&                                       // if its just a 
g.V()/E(), then don't localize
-                        !(computerTraversal.getStartStep().getNextStep() 
instanceof LocalStep) &&                                       // removes the 
potential for the infinite recursive application of the traversal
-                        !(computerTraversal.getStartStep().getNextStep() 
instanceof Barrier) &&                                         // if the second 
step is a barrier, no point in trying to localize anything
-                        
!computerTraversal.getTraverserRequirements().contains(TraverserRequirement.LABELED_PATH)
 &&                    // this is to alleviate issues with DetachedElement in 
paths (TODO: when detachment is dynamic, remove this)
-                        
!computerTraversal.getTraverserRequirements().contains(TraverserRequirement.PATH)
 &&                            // this is to alleviate issues with 
DetachedElement in paths (TODO: when detachment is dynamic, remove this)
-                        
TraversalHelper.getStepsOfAssignableClassRecursively(SideEffectCapable.class, 
computerTraversal).isEmpty() &&   // this is to alleviate issues with 
DetachedElement in paths (TODO: when detachment is dynamic, remove this)
-                        
!(TraversalHelper.getStepsOfAssignableClass(TraversalParent.class, 
computerTraversal).                          // this is a strict precaution 
that could be loosed with deeper logic on barriers in global children
-                                stream().
-                                filter(parent -> 
!parent.getGlobalChildren().isEmpty()).findAny().isPresent())) {
-
-                    final Traversal.Admin<?, ?> newComputerTraversal = 
step.computerTraversal.getPure();
-                    final Traversal.Admin localTraversal = new 
DefaultGraphTraversal<>();
-                    final Step barrier = (Step) 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
newComputerTraversal).orElse(null);
-                    if (null == barrier || !(barrier instanceof 
TraversalParent && (barrier.getPreviousStep() instanceof VertexStep || 
barrier.getPreviousStep() instanceof EdgeVertexStep))) {
-                        
TraversalHelper.removeToTraversal(newComputerTraversal.getStartStep().getNextStep(),
 null == barrier ? EmptyStep.instance() : barrier, localTraversal);
-                        assert !localTraversal.getSteps().isEmpty(); // given 
the if() constraints, this is impossible
-                        if (localTraversal.getSteps().size() > 1) {  // if its 
just a single step, a local wrap will not alter its locus of computation
-                            if (null == barrier)
-                                TraversalHelper.insertTraversal(0, 
(Traversal.Admin) __.local(localTraversal), newComputerTraversal);
-                            else
-                                
TraversalHelper.insertTraversal(barrier.getPreviousStep(), (Traversal.Admin) 
__.local(localTraversal), newComputerTraversal);
-                            step.setComputerTraversal(newComputerTraversal);
-                        }
+            }
+            if (doesMessagePass &&                                             
                                                     // if the traversal 
doesn't message pass, then don't try and localize it as its just wasted 
computation
+                    TraversalHelper.isLocalStarGraph(computerTraversal) &&     
                                                     // if we move beyond the 
star graph, then localization is not possible.
+                    (computerTraversal.getStartStep() instanceof GraphStep) && 
                                                     // while GraphComputer 
requires GraphStep starts, this is just a precaution when inject() starts are 
supported
+                    !(computerTraversal.getStartStep().getNextStep() 
instanceof EmptyStep) &&                                       // if its just a 
g.V()/E(), then don't localize
+                    !(computerTraversal.getStartStep().getNextStep() 
instanceof LocalStep) &&                                       // removes the 
potential for the infinite recursive application of the traversal
+                    !(computerTraversal.getStartStep().getNextStep() 
instanceof Barrier) &&                                         // if the second 
step is a barrier, no point in trying to localize anything
+                    
!computerTraversal.getTraverserRequirements().contains(TraverserRequirement.LABELED_PATH)
 &&                    // this is to alleviate issues with DetachedElement in 
paths (TODO: when detachment is dynamic, remove this)
+                    
!computerTraversal.getTraverserRequirements().contains(TraverserRequirement.PATH)
 &&                            // this is to alleviate issues with 
DetachedElement in paths (TODO: when detachment is dynamic, remove this)
+                    
TraversalHelper.getStepsOfAssignableClassRecursively(SideEffectCapable.class, 
computerTraversal).isEmpty() &&   // this is to alleviate issues with 
DetachedElement in paths (TODO: when detachment is dynamic, remove this)
+                    
!(TraversalHelper.getStepsOfAssignableClass(TraversalParent.class, 
computerTraversal).                          // this is a strict precaution 
that could be loosed with deeper logic on barriers in global children
+                            stream().
+                            filter(parent -> 
!parent.getGlobalChildren().isEmpty()).findAny().isPresent())) {
+                final Traversal.Admin<?, ?> newComputerTraversal = 
step.computerTraversal.getPure();
+                final Traversal.Admin localTraversal = new 
DefaultGraphTraversal<>();
+                final Step barrier = (Step) 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
newComputerTraversal).orElse(null);
+                if (null == barrier || !(barrier instanceof TraversalParent && 
(barrier.getPreviousStep() instanceof VertexStep || barrier.getPreviousStep() 
instanceof EdgeVertexStep))) {
+                    
TraversalHelper.removeToTraversal(newComputerTraversal.getStartStep().getNextStep(),
 null == barrier ? EmptyStep.instance() : barrier, localTraversal);
+                    assert !localTraversal.getSteps().isEmpty(); // given the 
if() constraints, this is impossible
+                    if (localTraversal.getSteps().size() > 1) {  // if its 
just a single step, a local wrap will not alter its locus of computation
+                        if (null == barrier)
+                            TraversalHelper.insertTraversal(0, 
(Traversal.Admin) __.local(localTraversal), newComputerTraversal);
+                        else
+                            
TraversalHelper.insertTraversal(barrier.getPreviousStep(), (Traversal.Admin) 
__.local(localTraversal), newComputerTraversal);
+                        step.setComputerTraversal(newComputerTraversal);
                     }
                 }
             }

Reply via email to