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 2021/01/08 13:27:01 UTC

[tinkerpop] 01/02: TINKERPOP-2500 Added none() to GLVs CTR

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 931a75d3ace5647adc670e7cdb57b760ae09b749
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Fri Jan 8 08:08:07 2021 -0500

    TINKERPOP-2500 Added none() to GLVs CTR
---
 .../gremlin/process/traversal/Traversal.java       |  4 +++-
 .../traversal/dsl/graph/GraphTraversal.java        | 13 +++++++++++
 gremlin-dotnet/glv/generate.groovy                 | 26 +++++++++++-----------
 .../Process/Traversal/GraphTraversal.cs            |  9 ++++++++
 gremlin-javascript/glv/generate.groovy             | 18 +++++++--------
 .../lib/process/graph-traversal.js                 | 10 +++++++++
 gremlin-python/glv/generate.groovy                 | 12 +++++-----
 .../gremlin_python/process/graph_traversal.py      |  4 ++++
 8 files changed, 67 insertions(+), 29 deletions(-)

diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
index 11c12c3..b1b45f3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
@@ -217,7 +217,9 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable, A
     }
 
     /**
-     * Filter all traversers in the traversal.
+     * Filter all traversers in the traversal. This step has narrow use cases and is primarily intended for use as a
+     * signal to remote servers that {@link #iterate()} was called. While it may be directly used, it is often a sign
+     * that a traversal should be re-written in another form.
      *
      * @return the updated traversal with respective {@link NoneStep}.
      */
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index be465c9..ef541eb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -59,6 +59,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.LambdaFilterStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NoneStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.OrStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.PathFilterStep;
@@ -2127,6 +2128,18 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     /**
+     * Filter all traversers in the traversal. This step has narrow use cases and is primarily intended for use as a
+     * signal to remote servers that {@link #iterate()} was called. While it may be directly used, it is often a sign
+     * that a traversal should be re-written in another form.
+     *
+     * @return the updated traversal with respective {@link NoneStep}.
+     */
+    @Override
+    default GraphTraversal<S, E> none() {
+        return (GraphTraversal<S, E>) Traversal.super.none();
+    }
+
+    /**
      * Sets a {@link Property} value and related meta properties if supplied, if supported by the {@link Graph}
      * and if the {@link Element} is a {@link VertexProperty}.  This method is the long-hand version of
      * {@link #property(Object, Object, Object...)} with the difference that the {@link VertexProperty.Cardinality}
diff --git a/gremlin-dotnet/glv/generate.groovy b/gremlin-dotnet/glv/generate.groovy
index a951907..a921a29 100644
--- a/gremlin-dotnet/glv/generate.groovy
+++ b/gremlin-dotnet/glv/generate.groovy
@@ -107,7 +107,7 @@ def getCSharpGenericTypeParam = { typeName ->
 
 def toCSharpType = { name ->
     String typeName = toCSharpTypeMap.getOrDefault(name, name)
-    if (typeName.equals(name) && (typeName.contains("? extends") || typeName.equals("Tree"))) {
+    if (typeName == name && (typeName.contains("? extends") || typeName == "Tree")) {
         typeName = "E2"
     }
     return typeName
@@ -124,10 +124,10 @@ def getJavaGenericTypeParameterTypeNames = { method ->
     return typeArguments.
             collect { (it instanceof Class) ? ((Class)it).simpleName : it.typeName }.
             collect { name ->
-                if (name.equals("A")) {
+                if (name == "A") {
                     name = "object"
                 }
-                else if (name.equals("B")) {
+                else if (name == "B") {
                     name = "E2"
                 }
                 name
@@ -253,12 +253,12 @@ def binding = ["pmethods": P.class.getMethods().
                        unique().
                        sort { a, b -> a <=> b },
                "sourceStepMethods": GraphTraversalSource.getMethods(). // SOURCE STEPS
-                        findAll { GraphTraversalSource.class.equals(it.returnType) }.
+                        findAll { (GraphTraversalSource.class == it.returnType) }.
                         findAll {
-                            !it.name.equals("clone") &&
-                                    !it.name.equals(TraversalSource.Symbols.with) &&
-                                    !it.name.equals(TraversalSource.Symbols.withRemote) &&
-                                    !it.name.equals(TraversalSource.Symbols.withComputer)
+                            it.name != "clone" &&
+                                    it.name != TraversalSource.Symbols.with &&
+                                    it.name != TraversalSource.Symbols.withRemote &&
+                                    it.name != TraversalSource.Symbols.withComputer
                         }.
                 // Select unique combination of C# parameter types and sort by Java parameter type combination
                         sort { a, b -> a.name <=> b.name ?: getJavaParamTypeString(a) <=> getJavaParamTypeString(b) }.
@@ -269,7 +269,7 @@ def binding = ["pmethods": P.class.getMethods().
                             return ["methodName": javaMethod.name, "parameters":parameters, "paramNames":paramNames]
                         },
                "sourceSpawnMethods": GraphTraversalSource.getMethods(). // SPAWN STEPS
-                        findAll { GraphTraversal.class.equals(it.returnType) }.
+                        findAll { (GraphTraversal.class == it.returnType) }.
                 // Select unique combination of C# parameter types and sort by Java parameter type combination
                         sort { a, b -> a.name <=> b.name ?: getJavaParamTypeString(a) <=> getJavaParamTypeString(b) }.
                         unique { a,b -> a.name <=> b.name ?: getCSharpParamTypeString(a) <=> getCSharpParamTypeString(b) }.
@@ -284,8 +284,8 @@ def binding = ["pmethods": P.class.getMethods().
                             return ["methodName": javaMethod.name, "t1":t1, "t2":t2, "tParam":tParam, "parameters":parameters, "paramNames":paramNames, "isArgsCastNecessary":isArgsCastNecessary]
                         },
                "graphStepMethods": GraphTraversal.getMethods().
-                        findAll { GraphTraversal.class.equals(it.returnType) }.
-                        findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
+                        findAll { (GraphTraversal.class == it.returnType) }.
+                        findAll { it.name != "clone" && it.name != "iterate" }.
                 // Select unique combination of C# parameter types and sort by Java parameter type combination
                         sort { a, b -> a.name <=> b.name ?: getJavaParamTypeString(a) <=> getJavaParamTypeString(b) }.
                         unique { a,b -> a.name <=> b.name ?: getCSharpParamTypeString(a) <=> getCSharpParamTypeString(b) }.
@@ -305,9 +305,9 @@ def binding = ["pmethods": P.class.getMethods().
                             return ["methodName": javaMethod.name, "t1":t1, "t2":t2, "tParam":tParam, "parameters":parameters, "paramNames":paramNames, "isArgsCastNecessary":isArgsCastNecessary]
                         },
                "anonStepMethods": __.class.getMethods().
-                        findAll { GraphTraversal.class.equals(it.returnType) }.
+                        findAll { (GraphTraversal.class == it.returnType) }.
                         findAll { Modifier.isStatic(it.getModifiers()) }.
-                        findAll { !it.name.equals("__") && !it.name.equals("start") }.
+                        findAll { it.name != "__" && it.name != "start" }.
                 // Select unique combination of C# parameter types and sort by Java parameter type combination
                         sort { a, b -> a.name <=> b.name ?: getJavaParamTypeString(a) <=> getJavaParamTypeString(b) }.
                         unique { a,b -> a.name <=> b.name ?: getCSharpParamTypeString(a) <=> getCSharpParamTypeString(b) }.
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
index 7394fe8..b6d3a83 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs
@@ -1054,6 +1054,15 @@ namespace Gremlin.Net.Process.Traversal
         }
 
         /// <summary>
+        ///     Adds the none step to this <see cref="GraphTraversal{SType, EType}" />.
+        /// </summary>
+        public GraphTraversal<S, E> None ()
+        {
+            Bytecode.AddStep("none");
+            return Wrap<S, E>(this);
+        }
+
+        /// <summary>
         ///     Adds the not step to this <see cref="GraphTraversal{SType, EType}" />.
         /// </summary>
         public GraphTraversal<S, E> Not (ITraversal notTraversal)
diff --git a/gremlin-javascript/glv/generate.groovy b/gremlin-javascript/glv/generate.groovy
index cfd1be5..2d3e1a1 100644
--- a/gremlin-javascript/glv/generate.groovy
+++ b/gremlin-javascript/glv/generate.groovy
@@ -82,33 +82,33 @@ def binding = ["enums": CoreImports.getClassImports()
                        unique().
                        sort { a, b -> a <=> b },
                "sourceStepMethods": GraphTraversalSource.getMethods(). // SOURCE STEPS
-                       findAll { GraphTraversalSource.class.equals(it.returnType) }.
+                       findAll { (GraphTraversalSource.class == it.returnType) }.
                        findAll {
                            !it.name.equals("clone") &&
                                    // Use hardcoded name to be for forward-compatibility
-                                   !it.name.equals("withBindings") &&
-                                   !it.name.equals(TraversalSource.Symbols.with) &&
-                                   !it.name.equals(TraversalSource.Symbols.withRemote) &&
-                                   !it.name.equals(TraversalSource.Symbols.withComputer)
+                                   it.name != "withBindings" &&
+                                   it.name != TraversalSource.Symbols.with &&
+                                   it.name != TraversalSource.Symbols.withRemote &&
+                                   it.name != TraversalSource.Symbols.withComputer
                        }.
                        collect { it.name }.
                        unique().
                        sort { a, b -> a <=> b },
                "sourceSpawnMethods": GraphTraversalSource.getMethods(). // SPAWN STEPS
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
+                       findAll { (GraphTraversal.class == it.returnType) }.
                        collect { it.name }.
                        unique().
                        sort { a, b -> a <=> b },
                "graphStepMethods": GraphTraversal.getMethods().
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
+                       findAll { (GraphTraversal.class == it.returnType) }.
                        findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
                        collect { it.name }.
                        unique().
                        sort { a, b -> a <=> b },
                "anonStepMethods": __.class.getMethods().
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
+                       findAll { (GraphTraversal.class == it.returnType) }.
                        findAll { Modifier.isStatic(it.getModifiers()) }.
-                       findAll { !it.name.equals("__") && !it.name.equals("start") }.
+                       findAll { !it.name.equals("__") && it.name != "start" }.
                        collect { it.name }.
                        unique().
                        sort { a, b -> a <=> b },
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
index 1e19609..9421730 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/graph-traversal.js
@@ -793,6 +793,16 @@ class GraphTraversal extends Traversal {
   }
   
   /**
+   * Graph traversal none method.
+   * @param {...Object} args
+   * @returns {GraphTraversal}
+   */
+  none(...args) {
+    this.bytecode.addStep('none', args);
+    return this;
+  }
+  
+  /**
    * Graph traversal not method.
    * @param {...Object} args
    * @returns {GraphTraversal}
diff --git a/gremlin-python/glv/generate.groovy b/gremlin-python/glv/generate.groovy
index 214eb2f..5856e81 100644
--- a/gremlin-python/glv/generate.groovy
+++ b/gremlin-python/glv/generate.groovy
@@ -87,7 +87,7 @@ def binding = ["enums": CoreImports.getClassImports()
                        unique().
                        sort { a, b -> a <=> b },
                "sourceStepMethods": GraphTraversalSource.getMethods(). // SOURCE STEPS
-                       findAll { GraphTraversalSource.class.equals(it.returnType) }.
+                       findAll { (GraphTraversalSource.class == it.returnType) }.
                        findAll {
                            !it.name.equals("clone") &&
                                    !it.name.equals(TraversalSource.Symbols.with) &&
@@ -98,20 +98,20 @@ def binding = ["enums": CoreImports.getClassImports()
                        unique().
                        sort { a, b -> a <=> b },
                "sourceSpawnMethods": GraphTraversalSource.getMethods(). // SPAWN STEPS
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
+                       findAll { (GraphTraversal.class == it.returnType) }.
                        collect { toPython(it.name) }.
                        unique().
                        sort { a, b -> a <=> b },
                "graphStepMethods": GraphTraversal.getMethods().
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
-                       findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
+                       findAll { GraphTraversal.class == it.returnType }.
+                       findAll { it.name != "clone" && it.name != "iterate" }.
                        collect { toPython(it.name) }.
                        unique().
                        sort { a, b -> a <=> b },
                "anonStepMethods": __.class.getMethods().
-                       findAll { GraphTraversal.class.equals(it.returnType) }.
+                       findAll { (GraphTraversal.class == it.returnType) }.
                        findAll { Modifier.isStatic(it.getModifiers()) }.
-                       findAll { !it.name.equals("__") && !it.name.equals("start") }.
+                       findAll { it.name != "__" && it.name != "start" }.
                        collect { toPython(it.name) }.
                        unique().
                        sort { a, b -> a <=> b },
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index 545dce0..edf4ddf 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -377,6 +377,10 @@ class GraphTraversal(Traversal):
         self.bytecode.add_step("min", *args)
         return self
 
+    def none(self, *args):
+        self.bytecode.add_step("none", *args)
+        return self
+
     def not_(self, *args):
         self.bytecode.add_step("not", *args)
         return self