TINKERPOP-1866 Avoid using reflection for T deserialization Expose GetByValue() static method on EnumWrapper implementation to try to expose the same functionality as if it were an enum.
Use the GetByValue() to deserialize a T instance. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/69eb333a Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/69eb333a Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/69eb333a Branch: refs/heads/tp33 Commit: 69eb333af04357238b2fa5ce16c80a5f10cca39e Parents: 4016c80 Author: Jorge Bay Gondra <jorgebaygon...@gmail.com> Authored: Fri Mar 23 12:07:25 2018 +0100 Committer: Jorge Bay Gondra <jorgebaygon...@gmail.com> Committed: Fri Mar 23 12:07:25 2018 +0100 ---------------------------------------------------------------------- gremlin-dotnet/glv/Enum.template | 37 +++++++++-- gremlin-dotnet/glv/generate.groovy | 15 +---- .../Gremlin.Net/Process/Traversal/Barrier.cs | 27 +++++++- .../Process/Traversal/Cardinality.cs | 35 ++++++++-- .../src/Gremlin.Net/Process/Traversal/Column.cs | 31 +++++++-- .../Gremlin.Net/Process/Traversal/Direction.cs | 35 ++++++++-- .../Process/Traversal/GraphSONVersion.cs | 35 ++++++++-- .../Process/Traversal/GryoVersion.cs | 31 +++++++-- .../Gremlin.Net/Process/Traversal/Operator.cs | 67 ++++++++++++++++---- .../src/Gremlin.Net/Process/Traversal/Order.cs | 35 ++++++++-- .../src/Gremlin.Net/Process/Traversal/Pick.cs | 31 +++++++-- .../src/Gremlin.Net/Process/Traversal/Pop.cs | 39 ++++++++++-- .../src/Gremlin.Net/Process/Traversal/Scope.cs | 31 +++++++-- .../src/Gremlin.Net/Process/Traversal/T.cs | 39 ++++++++++-- .../Structure/IO/GraphSON/TDeserializer.cs | 8 +-- .../Gherkin/CommonSteps.cs | 3 +- 16 files changed, 409 insertions(+), 90 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/glv/Enum.template ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/Enum.template b/gremlin-dotnet/glv/Enum.template index 1f11076..e785cd0 100644 --- a/gremlin-dotnet/glv/Enum.template +++ b/gremlin-dotnet/glv/Enum.template @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,11 +33,37 @@ namespace Gremlin.Net.Process.Traversal { private <%= enumClass.simpleName %>(string enumValue) : base("<%= enumClass.simpleName %>", enumValue) - { + { + } +<% + def toCSharpName = { enumClass, itemName -> + if (enumClass.equals(directionClass)) { + itemName = itemName.toLowerCase() + } + + return itemName.substring(0, 1).toUpperCase() + itemName.substring(1) + } + constants.each { value -> %> + public static ${enumClass.simpleName} ${toCSharpName(enumClass, value.name())} => new ${enumClass.simpleName}("${value.name()}"); +<% }%> + private static readonly IDictionary<string, <%= enumClass.simpleName %>> Properties = new Dictionary<string, <%= enumClass.simpleName %>> + {<% constants.each { value -> %> + { "${value.name()}", ${toCSharpName(enumClass, value.name())} },<% }%> + }; + + /// <summary> + /// Gets the <%= enumClass.simpleName %> enumeration by value. + /// </summary> + public static <%= enumClass.simpleName %> GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException(\$"No matching <%= enumClass.simpleName%> for value '{value}'"); + } + return property; } -<% constants.each { constant -> %> - <%= constant %><%}%> } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/glv/generate.groovy ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/glv/generate.groovy b/gremlin-dotnet/glv/generate.groovy index bf7f03b..91f9b94 100644 --- a/gremlin-dotnet/glv/generate.groovy +++ b/gremlin-dotnet/glv/generate.groovy @@ -321,14 +321,6 @@ def pTemplate = engine.createTemplate(new File("${projectBaseDir}/glv/P.template def pFile = new File("${projectBaseDir}/src/Gremlin.Net/Process/Traversal/P.cs") pFile.newWriter().withWriter{ it << pTemplate } -// Process enums -def toCSharpName = { enumClass, itemName -> - if (enumClass.equals(Direction.class)) { - itemName = itemName.toLowerCase() - } - - return itemName.substring(0, 1).toUpperCase() + itemName.substring(1) -} def createEnum = { enumClass -> def b = ["enumClass": enumClass, @@ -341,11 +333,8 @@ def createEnum = { enumClass -> return toCSharpTypeMap[typeName] }.join(", "), "constants": enumClass.getEnumConstants(). - sort { a, b -> a.name() <=> b.name() }. - collect { value -> - def csharpName = toCSharpName(enumClass, value.name()) - return "public static ${enumClass.simpleName} ${csharpName} => new ${enumClass.simpleName}(\"${value.name()}\");" - }] + sort { a, b -> a.name() <=> b.name() }, + "directionClass": Direction.class ] def enumTemplate = engine.createTemplate(new File("${projectBaseDir}/glv/Enum.template")).make(b) def enumFile = new File("${projectBaseDir}/src/Gremlin.Net/Process/Traversal/" + enumClass.getSimpleName() + ".cs") http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs index df6d349..0f86f32 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Barrier.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,11 +33,29 @@ namespace Gremlin.Net.Process.Traversal { private Barrier(string enumValue) : base("Barrier", enumValue) - { + { } - + public static Barrier NormSack => new Barrier("normSack"); + + private static readonly IDictionary<string, Barrier> Properties = new Dictionary<string, Barrier> + { + { "normSack", NormSack }, + }; + + /// <summary> + /// Gets the Barrier enumeration by value. + /// </summary> + public static Barrier GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Barrier for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs index d2cbcf2..caced7d 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Cardinality.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,13 +33,35 @@ namespace Gremlin.Net.Process.Traversal { private Cardinality(string enumValue) : base("Cardinality", enumValue) - { + { } - - public static Cardinality List => new Cardinality("list"); - public static Cardinality Set => new Cardinality("set"); + + public static Cardinality List => new Cardinality("list"); + + public static Cardinality Set => new Cardinality("set"); + public static Cardinality Single => new Cardinality("single"); + + private static readonly IDictionary<string, Cardinality> Properties = new Dictionary<string, Cardinality> + { + { "list", List }, + { "set", Set }, + { "single", Single }, + }; + + /// <summary> + /// Gets the Cardinality enumeration by value. + /// </summary> + public static Cardinality GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Cardinality for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs index 9e0451e..cacf886 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Column.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,12 +33,32 @@ namespace Gremlin.Net.Process.Traversal { private Column(string enumValue) : base("Column", enumValue) - { + { } - - public static Column Keys => new Column("keys"); + + public static Column Keys => new Column("keys"); + public static Column Values => new Column("values"); + + private static readonly IDictionary<string, Column> Properties = new Dictionary<string, Column> + { + { "keys", Keys }, + { "values", Values }, + }; + + /// <summary> + /// Gets the Column enumeration by value. + /// </summary> + public static Column GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Column for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs index 5a93f0a..92d9416 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Direction.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,13 +33,35 @@ namespace Gremlin.Net.Process.Traversal { private Direction(string enumValue) : base("Direction", enumValue) - { + { } - - public static Direction Both => new Direction("BOTH"); - public static Direction In => new Direction("IN"); + + public static Direction Both => new Direction("BOTH"); + + public static Direction In => new Direction("IN"); + public static Direction Out => new Direction("OUT"); + + private static readonly IDictionary<string, Direction> Properties = new Dictionary<string, Direction> + { + { "BOTH", Both }, + { "IN", In }, + { "OUT", Out }, + }; + + /// <summary> + /// Gets the Direction enumeration by value. + /// </summary> + public static Direction GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Direction for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs index e55be6b..366c48c 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphSONVersion.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,13 +33,35 @@ namespace Gremlin.Net.Process.Traversal { private GraphSONVersion(string enumValue) : base("GraphSONVersion", enumValue) - { + { } - - public static GraphSONVersion V1_0 => new GraphSONVersion("V1_0"); - public static GraphSONVersion V2_0 => new GraphSONVersion("V2_0"); + + public static GraphSONVersion V1_0 => new GraphSONVersion("V1_0"); + + public static GraphSONVersion V2_0 => new GraphSONVersion("V2_0"); + public static GraphSONVersion V3_0 => new GraphSONVersion("V3_0"); + + private static readonly IDictionary<string, GraphSONVersion> Properties = new Dictionary<string, GraphSONVersion> + { + { "V1_0", V1_0 }, + { "V2_0", V2_0 }, + { "V3_0", V3_0 }, + }; + + /// <summary> + /// Gets the GraphSONVersion enumeration by value. + /// </summary> + public static GraphSONVersion GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching GraphSONVersion for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GryoVersion.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GryoVersion.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GryoVersion.cs index 93fc369..01d2a99 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GryoVersion.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GryoVersion.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,12 +33,32 @@ namespace Gremlin.Net.Process.Traversal { private GryoVersion(string enumValue) : base("GryoVersion", enumValue) - { + { } - - public static GryoVersion V1_0 => new GryoVersion("V1_0"); + + public static GryoVersion V1_0 => new GryoVersion("V1_0"); + public static GryoVersion V3_0 => new GryoVersion("V3_0"); + + private static readonly IDictionary<string, GryoVersion> Properties = new Dictionary<string, GryoVersion> + { + { "V1_0", V1_0 }, + { "V3_0", V3_0 }, + }; + + /// <summary> + /// Gets the GryoVersion enumeration by value. + /// </summary> + public static GryoVersion GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching GryoVersion for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Operator.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Operator.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Operator.cs index 8f0c9b3..8b87e40 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Operator.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Operator.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,21 +33,59 @@ namespace Gremlin.Net.Process.Traversal { private Operator(string enumValue) : base("Operator", enumValue) - { + { } - - public static Operator AddAll => new Operator("addAll"); - public static Operator And => new Operator("and"); - public static Operator Assign => new Operator("assign"); - public static Operator Div => new Operator("div"); - public static Operator Max => new Operator("max"); - public static Operator Min => new Operator("min"); - public static Operator Minus => new Operator("minus"); - public static Operator Mult => new Operator("mult"); - public static Operator Or => new Operator("or"); - public static Operator Sum => new Operator("sum"); + + public static Operator AddAll => new Operator("addAll"); + + public static Operator And => new Operator("and"); + + public static Operator Assign => new Operator("assign"); + + public static Operator Div => new Operator("div"); + + public static Operator Max => new Operator("max"); + + public static Operator Min => new Operator("min"); + + public static Operator Minus => new Operator("minus"); + + public static Operator Mult => new Operator("mult"); + + public static Operator Or => new Operator("or"); + + public static Operator Sum => new Operator("sum"); + public static Operator SumLong => new Operator("sumLong"); + + private static readonly IDictionary<string, Operator> Properties = new Dictionary<string, Operator> + { + { "addAll", AddAll }, + { "and", And }, + { "assign", Assign }, + { "div", Div }, + { "max", Max }, + { "min", Min }, + { "minus", Minus }, + { "mult", Mult }, + { "or", Or }, + { "sum", Sum }, + { "sumLong", SumLong }, + }; + + /// <summary> + /// Gets the Operator enumeration by value. + /// </summary> + public static Operator GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Operator for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Order.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Order.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Order.cs index c6a1817..2430114 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Order.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Order.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,13 +33,35 @@ namespace Gremlin.Net.Process.Traversal { private Order(string enumValue) : base("Order", enumValue) - { + { } - - public static Order Decr => new Order("decr"); - public static Order Incr => new Order("incr"); + + public static Order Decr => new Order("decr"); + + public static Order Incr => new Order("incr"); + public static Order Shuffle => new Order("shuffle"); + + private static readonly IDictionary<string, Order> Properties = new Dictionary<string, Order> + { + { "decr", Decr }, + { "incr", Incr }, + { "shuffle", Shuffle }, + }; + + /// <summary> + /// Gets the Order enumeration by value. + /// </summary> + public static Order GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Order for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pick.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pick.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pick.cs index d4132ea..b7dd8c2 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pick.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pick.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,12 +33,32 @@ namespace Gremlin.Net.Process.Traversal { private Pick(string enumValue) : base("Pick", enumValue) - { + { } - - public static Pick Any => new Pick("any"); + + public static Pick Any => new Pick("any"); + public static Pick None => new Pick("none"); + + private static readonly IDictionary<string, Pick> Properties = new Dictionary<string, Pick> + { + { "any", Any }, + { "none", None }, + }; + + /// <summary> + /// Gets the Pick enumeration by value. + /// </summary> + public static Pick GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Pick for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pop.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pop.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pop.cs index d1915fc..1210f5c 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pop.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Pop.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,14 +33,38 @@ namespace Gremlin.Net.Process.Traversal { private Pop(string enumValue) : base("Pop", enumValue) - { + { } - - public static Pop All => new Pop("all"); - public static Pop First => new Pop("first"); - public static Pop Last => new Pop("last"); + + public static Pop All => new Pop("all"); + + public static Pop First => new Pop("first"); + + public static Pop Last => new Pop("last"); + public static Pop Mixed => new Pop("mixed"); + + private static readonly IDictionary<string, Pop> Properties = new Dictionary<string, Pop> + { + { "all", All }, + { "first", First }, + { "last", Last }, + { "mixed", Mixed }, + }; + + /// <summary> + /// Gets the Pop enumeration by value. + /// </summary> + public static Pop GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Pop for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Scope.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Scope.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Scope.cs index ee67c39..2df6a95 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Scope.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Scope.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,12 +33,32 @@ namespace Gremlin.Net.Process.Traversal { private Scope(string enumValue) : base("Scope", enumValue) - { + { } - - public static Scope Global => new Scope("global"); + + public static Scope Global => new Scope("global"); + public static Scope Local => new Scope("local"); + + private static readonly IDictionary<string, Scope> Properties = new Dictionary<string, Scope> + { + { "global", Global }, + { "local", Local }, + }; + + /// <summary> + /// Gets the Scope enumeration by value. + /// </summary> + public static Scope GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching Scope for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/T.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/T.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/T.cs index bae1314..80ca0ec 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/T.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/T.cs @@ -22,6 +22,9 @@ #endregion // THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml +using System; +using System.Collections.Generic; + namespace Gremlin.Net.Process.Traversal { #pragma warning disable 1591 @@ -30,14 +33,38 @@ namespace Gremlin.Net.Process.Traversal { private T(string enumValue) : base("T", enumValue) - { + { } - - public static T Id => new T("id"); - public static T Key => new T("key"); - public static T Label => new T("label"); + + public static T Id => new T("id"); + + public static T Key => new T("key"); + + public static T Label => new T("label"); + public static T Value => new T("value"); + + private static readonly IDictionary<string, T> Properties = new Dictionary<string, T> + { + { "id", Id }, + { "key", Key }, + { "label", Label }, + { "value", Value }, + }; + + /// <summary> + /// Gets the T enumeration by value. + /// </summary> + public static T GetByValue(string value) + { + if (!Properties.TryGetValue(value, out var property)) + { + throw new ArgumentException($"No matching T for value '{value}'"); + } + return property; + } } - + + #pragma warning restore 1591 } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs index e79783c..a3d972f 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/TDeserializer.cs @@ -21,9 +21,6 @@ #endregion -using System; -using System.Linq; -using System.Reflection; using Gremlin.Net.Process.Traversal; using Newtonsoft.Json.Linq; @@ -33,10 +30,7 @@ namespace Gremlin.Net.Structure.IO.GraphSON { public dynamic Objectify(JToken graphsonObject, GraphSONReader reader) { - var tValue = graphsonObject.ToString(); - return typeof(T).GetProperties() - .First(p => string.Equals(p.Name, tValue, StringComparison.OrdinalIgnoreCase)) - .GetValue(null); + return T.GetByValue(graphsonObject.ToString()); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/69eb333a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs index 31948f4..6e21bd2 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs @@ -240,8 +240,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin private static object ToT(string enumName, string graphName) { - return typeof(T).GetProperties() - .First(p => string.Equals(p.Name, enumName, StringComparison.OrdinalIgnoreCase)).GetValue(null); + return T.GetByValue(enumName); } private static object ToNumber(string stringNumber, string graphName)