Fixed a lambda-leak in SackValueStep where BiFunction could be a real lambda.


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

Branch: refs/heads/TINKERPOP-1743
Commit: 839dd616729e7b11baf044c5bbbbd65723b1f383
Parents: 1e46fc4
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Tue Aug 8 10:12:11 2017 -0600
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 9 07:11:20 2017 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                               | 1 +
 .../gremlin/process/traversal/step/sideEffect/SackValueStep.java | 4 ++++
 .../strategy/verification/LambdaRestrictionStrategy.java         | 3 +++
 .../strategy/verification/LambdaRestrictionStrategyTest.java     | 4 ++++
 4 files changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/839dd616/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 803f3b2..767ba09 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -28,6 +28,7 @@ TinkerPop 3.2.6 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 This release also includes changes from <<release-3-1-8, 3.1.8>>.
 
+* Fixed a lambda-leak in `SackValueStep` where `BiFunction` must be tested for 
true lambda status.
 * Allowed access to `InjectStep.injections` for `TraversalStrategy` analysis.
 * Exceptions that occur during result iteration in Gremlin Server will now 
return `SCRIPT_EVALUATION_EXCEPTION` rather than `SERVER_ERROR`.
 * `AddEdgeStep` attaches detached vertices prior to edge creation.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/839dd616/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
index 7f030d6..3281fa7 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SackValueStep.java
@@ -70,6 +70,10 @@ public final class SackValueStep<S, A, B> extends 
SideEffectStep<S> implements T
         return super.hashCode() ^ this.sackFunction.hashCode() ^ ((null == 
this.sackTraversal) ? "null".hashCode() : this.sackTraversal.hashCode());
     }
 
+    public BiFunction<A,B,A> getSackFunction() {
+        return this.sackFunction;
+    }
+
     @Override
     public Set<TraverserRequirement> getRequirements() {
         return getSelfAndChildRequirements(TraverserRequirement.SACK);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/839dd616/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
index 9828d61..1b925ca 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java
@@ -23,6 +23,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ComparatorHolder;
 import org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder;
+import 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackValueStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.javatuples.Pair;
 
@@ -64,6 +65,8 @@ public final class LambdaRestrictionStrategy extends 
AbstractTraversalStrategy<T
                         throw new VerificationException("The provided step 
contains a lambda comparator: " + step, traversal);
                 }
             }
+            if (step instanceof SackValueStep && (((SackValueStep) 
step).getSackFunction().toString().contains("$$Lambda$")))
+                throw new VerificationException("The provided step contains a 
lambda comparator: " + step, traversal);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/839dd616/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
index 4efca84..9bb251c 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
@@ -33,6 +33,7 @@ import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
 
+import static org.apache.tinkerpop.gremlin.process.traversal.Operator.sum;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -59,6 +60,9 @@ public class LambdaRestrictionStrategyTest {
                 {"order(local).by(values,decr)", 
__.order(Scope.local).by(Column.values, Order.decr), true},
                 {"order().by(label,decr)", __.order().by(T.label, Order.decr), 
true},
                 {"groupCount().by(label)", __.groupCount().by(T.label), true},
+                //
+                {"sack(sum).by('age')", __.sack(sum).by("age"), true},
+                {"sack{a,b -> a+b}.by('age')", __.sack((a, b) -> (int) a + 
(int) b).by("age"), false},
         });
     }
 

Reply via email to