AVRO-3953: Prefixing enum member identifiers instead of throwing (#2783)
* AVRO-3953
Signed-off-by: Clemens Vasters <clemens@vasters.com>
* Unit test added. Removed local check for symbol.
---------
Signed-off-by: Clemens Vasters <clemens@vasters.com>
diff --git a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
index 7e79362..73b9585 100644
--- a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
+++ b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
@@ -474,8 +474,6 @@
/// <exception cref="CodeGenException">
/// Unable to cast schema into an enum
/// or
- /// Enum symbol " + symbol + " is a C# reserved keyword
- /// or
/// Namespace required for enum schema " + enumschema.Name.
/// </exception>
protected virtual void processEnum(Schema schema)
@@ -498,11 +496,6 @@
foreach (string symbol in enumschema.Symbols)
{
- if (CodeGenUtil.Instance.ReservedKeywords.Contains(symbol))
- {
- throw new CodeGenException("Enum symbol " + symbol + " is a C# reserved keyword");
- }
-
CodeMemberField field = new CodeMemberField(typeof(int), symbol);
ctd.Members.Add(field);
}
diff --git a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
index f8eef4a..33c7f0c 100644
--- a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
+++ b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
@@ -109,6 +109,33 @@
Assert.That(hasPlanetEnumCode);
Assert.That(Regex.Matches(planetEnumCode, "public enum PlanetEnum").Count, Is.EqualTo(1));
}
+
+ [Test]
+ public void EnumWithKeywordSymbolsShouldHavePrefixedSymbols()
+ {
+ AddSchema(@"{
+ ""type"": ""enum"",
+ ""symbols"": [
+ ""string"",
+ ""integer"",
+ ""float"",
+ ""boolean"",
+ ""list"",
+ ""dict"",
+ ""regex""
+ ],
+ ""name"": ""type"",
+ ""namespace"": ""com.example""
+}");
+ GenerateCode();
+ var types = GetTypes();
+ Assert.That(types.Count, Is.EqualTo(1));
+ bool hasTypeCode = types.TryGetValue("type", out string typeCode);
+ Assert.That(hasTypeCode);
+ Assert.That(Regex.Matches(typeCode, "public enum type").Count, Is.EqualTo(1));
+ Assert.That(Regex.Matches(typeCode, "@string,").Count, Is.EqualTo(1));
+ Assert.That(Regex.Matches(typeCode, "@float,").Count, Is.EqualTo(1));
+ }
}
}
}