Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1972 2a2e47ebd -> dee155e50
TINKERPOP-1972 Fix arg handling for inject step To be precise, this affects all steps that have a params array with a generic type parameter as the member type but currently inject is the only step in Gremlin.Net that has such an array as an argument. The arguments passed as such a params array were incorrectly wrapped in one array before instead of individual arguments. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/dee155e5 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/dee155e5 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/dee155e5 Branch: refs/heads/TINKERPOP-1972 Commit: dee155e50eab747afa1d302ed0c027c8c3629e2b Parents: 2a2e47e Author: Florian Hockmann <f...@florian-hockmann.de> Authored: Fri Oct 5 17:32:09 2018 +0200 Committer: Florian Hockmann <f...@florian-hockmann.de> Committed: Fri Oct 5 17:32:09 2018 +0200 ---------------------------------------------------------------------- gremlin-dotnet/glv/GraphTraversal.template | 5 +++-- gremlin-dotnet/glv/GraphTraversalSource.template | 5 +++-- gremlin-dotnet/glv/generate.groovy | 16 +++++++--------- .../Gremlin.Net/Process/Traversal/GraphTraversal.cs | 5 +++-- .../Process/Traversal/GraphTraversalSource.cs | 5 +++-- .../BytecodeGeneration/BytecodeGenerationTests.cs | 12 ++++++++++++ 6 files changed, 31 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/glv/GraphTraversal.template ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/GraphTraversal.template b/gremlin-dotnet/glv/GraphTraversal.template index 6738467..9e4b284 100644 --- a/gremlin-dotnet/glv/GraphTraversal.template +++ b/gremlin-dotnet/glv/GraphTraversal.template @@ -22,6 +22,7 @@ #endregion using System.Collections.Generic; +using System.Linq; using Gremlin.Net.Structure; // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml @@ -68,8 +69,8 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal<$method.t1, $method.t2> <%= toCSharpMethodName.call(method.methodName) %><%= method.tParam %> (<%= method.parameters %>) { <% if (method.parameters.contains("params ")) { - %> var args = new List<$method.argsListType>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; - args.AddRange(<%= method.paramNames.last() %>); + %> var args = new List<object>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; + args.AddRange(<%= method.paramNames.last() %><% if (method.isArgsCastNecessary) { %>.Cast<object>()<% } %>); Bytecode.AddStep("<%= method.methodName %>", args.ToArray());<% } else { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/glv/GraphTraversalSource.template ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/GraphTraversalSource.template b/gremlin-dotnet/glv/GraphTraversalSource.template index afa4297..bbc3684 100644 --- a/gremlin-dotnet/glv/GraphTraversalSource.template +++ b/gremlin-dotnet/glv/GraphTraversalSource.template @@ -23,6 +23,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Gremlin.Net.Process.Remote; using Gremlin.Net.Process.Traversal.Strategy.Decoration; using Gremlin.Net.Structure; @@ -131,8 +132,8 @@ namespace Gremlin.Net.Process.Traversal { var traversal = new GraphTraversal<$method.typeNameString>(TraversalStrategies, new Bytecode(Bytecode)); <% if (method.parameters.contains("params ")) { - %>var args = new List<$method.argsListType>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; - args.AddRange(<%= method.paramNames.last() %>); + %>var args = new List<object>(<%= method.paramNames.init().size() %> + <%= method.paramNames.last() %>.Length) {<%= method.paramNames.init().join(", ") %>}; + args.AddRange(<%= method.paramNames.last() %><% if (method.isArgsCastNecessary) { %>.Cast<object>()<% } %>); traversal.Bytecode.AddStep("<%= method.methodName %>", args.ToArray());<% } else { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/glv/generate.groovy ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/generate.groovy b/gremlin-dotnet/glv/generate.groovy index 29f9ec7..2d8b005 100644 --- a/gremlin-dotnet/glv/generate.groovy +++ b/gremlin-dotnet/glv/generate.groovy @@ -191,14 +191,12 @@ def getParamNames = { parameters -> } } -def getArgsListType = { parameterString -> - def argsListType = "object" +def isParamsArgCastNecessary = { parameterString -> if (parameterString.contains("params ")) { def paramsType = parameterString.substring(parameterString.indexOf("params ") + "params ".length(), parameterString.indexOf("[]")) - if (paramsType == "E" || paramsType == "S") - argsListType = paramsType + return paramsType == "E" || paramsType == "S" } - argsListType + return false } def hasMethodNoGenericCounterPartInGraphTraversal = { method -> @@ -270,8 +268,8 @@ def binding = ["pmethods": P.class.getMethods(). def tParam = getCSharpGenericTypeParam(t2) def parameters = getCSharpParamString(javaMethod, true) def paramNames = getParamNames(javaMethod.parameters) - def argsListType = getArgsListType(parameters) - return ["methodName": javaMethod.name, "typeNameString": typeNameString, "tParam":tParam, "parameters":parameters, "paramNames":paramNames, "argsListType":argsListType] + def isArgsCastNecessary = isParamsArgCastNecessary(parameters) + return ["methodName": javaMethod.name, "typeNameString": typeNameString, "tParam":tParam, "parameters":parameters, "paramNames":paramNames, "isArgsCastNecessary":isArgsCastNecessary] }, "graphStepMethods": GraphTraversal.getMethods(). findAll { GraphTraversal.class.equals(it.returnType) }. @@ -286,8 +284,8 @@ def binding = ["pmethods": P.class.getMethods(). def tParam = getCSharpGenericTypeParam(t2) def parameters = getCSharpParamString(javaMethod, true) def paramNames = getParamNames(javaMethod.parameters) - def argsListType = getArgsListType(parameters) - return ["methodName": javaMethod.name, "t1":t1, "t2":t2, "tParam":tParam, "parameters":parameters, "paramNames":paramNames, "argsListType":argsListType] + def isArgsCastNecessary = isParamsArgCastNecessary(parameters) + 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) }. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs index c8708df..81d3c62 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs @@ -22,6 +22,7 @@ #endregion using System.Collections.Generic; +using System.Linq; using Gremlin.Net.Structure; // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml @@ -870,8 +871,8 @@ namespace Gremlin.Net.Process.Traversal /// </summary> public GraphTraversal<S, E> Inject (params E[] injections) { - var args = new List<E>(0 + injections.Length) {}; - args.AddRange(injections); + var args = new List<object>(0 + injections.Length) {}; + args.AddRange(injections.Cast<object>()); Bytecode.AddStep("inject", args.ToArray()); return Wrap<S, E>(this); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs index 7115016..9f735f4 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversalSource.cs @@ -23,6 +23,7 @@ using System; using System.Collections.Generic; +using System.Linq; using Gremlin.Net.Process.Remote; using Gremlin.Net.Process.Traversal.Strategy.Decoration; using Gremlin.Net.Structure; @@ -307,8 +308,8 @@ namespace Gremlin.Net.Process.Traversal public GraphTraversal<S, S> Inject<S>(params S[] starts) { var traversal = new GraphTraversal<S, S>(TraversalStrategies, new Bytecode(Bytecode)); - var args = new List<S>(0 + starts.Length) {}; - args.AddRange(starts); + var args = new List<object>(0 + starts.Length) {}; + args.AddRange(starts.Cast<object>()); traversal.Bytecode.AddStep("inject", args.ToArray()); return traversal; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dee155e5/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs index 266e3c6..4b13bde 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs @@ -77,6 +77,18 @@ namespace Gremlin.Net.IntegrationTest.Process.Traversal.BytecodeGeneration } [Fact] + public void g_InjectX1_2_3X() + { + var g = new Graph().Traversal(); + + var bytecode = g.Inject(1, 2, 3).Bytecode; + + Assert.Equal(1, bytecode.StepInstructions.Count); + Assert.Equal("inject", bytecode.StepInstructions[0].OperatorName); + Assert.Equal(3, bytecode.StepInstructions[0].Arguments.Length); + } + + [Fact] public void AnonymousTraversal_Start_EmptyBytecode() { var bytecode = __.Start().Bytecode;