This is an automated email from the ASF dual-hosted git repository.
rskraba pushed a commit to branch branch-1.11
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/branch-1.11 by this push:
new b79275f AVRO-3265: Fix avrogen code generation for Avro namespaces
(#1423)
b79275f is described below
commit b79275fa2ebfa155aee13e1afd77bc1749c56e64
Author: Serhii Almazov <[email protected]>
AuthorDate: Wed Dec 22 19:37:14 2021 +0200
AVRO-3265: Fix avrogen code generation for Avro namespaces (#1423)
Fixes an issue when the generated code is uncompilable if the namespace to
be generated ends with ".Avro"
---
lang/csharp/src/apache/main/CodeGen/CodeGen.cs | 13 ++++++++-----
lang/csharp/src/apache/main/CodeGen/CodeGenUtil.cs | 4 ++--
lang/csharp/src/apache/test/CodGen/CodeGenTest.cs | 10 ++++++++++
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
index 70ab5bd..93e02bf 100644
--- a/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
+++ b/lang/csharp/src/apache/main/CodeGen/CodeGen.cs
@@ -558,7 +558,10 @@ namespace Avro
// declare the class
var ctd = new
CodeTypeDeclaration(CodeGenUtil.Instance.Mangle(recordSchema.Name));
- ctd.BaseTypes.Add(isError ? "SpecificException" :
"ISpecificRecord");
+ var baseTypeReference = new CodeTypeReference(
+ isError ? typeof(Specific.SpecificException) :
typeof(Specific.ISpecificRecord),
+ CodeTypeReferenceOptions.GlobalReference);
+ ctd.BaseTypes.Add(baseTypeReference);
ctd.Attributes = MemberAttributes.Public;
ctd.IsClass = true;
@@ -675,14 +678,14 @@ namespace Avro
}
// end switch block for Get()
- getFieldStmt.AppendLine("\t\t\tdefault: throw new
AvroRuntimeException(\"Bad index \" + fieldPos + \" in Get()\");")
+ getFieldStmt.AppendLine("\t\t\tdefault: throw new
global::Avro.AvroRuntimeException(\"Bad index \" + fieldPos + \" in Get()\");")
.Append("\t\t\t}");
var cseGet = new CodeSnippetExpression(getFieldStmt.ToString());
cmmGet.Statements.Add(cseGet);
ctd.Members.Add(cmmGet);
// end switch block for Put()
- putFieldStmt.AppendLine("\t\t\tdefault: throw new
AvroRuntimeException(\"Bad index \" + fieldPos + \" in Put()\");")
+ putFieldStmt.AppendLine("\t\t\tdefault: throw new
global::Avro.AvroRuntimeException(\"Bad index \" + fieldPos + \" in Put()\");")
.Append("\t\t\t}");
var csePut = new CodeSnippetExpression(putFieldStmt.ToString());
cmmPut.Statements.Add(csePut);
@@ -831,14 +834,14 @@ namespace Avro
protected virtual void createSchemaField(Schema schema,
CodeTypeDeclaration ctd, bool overrideFlag)
{
// create schema field
- var ctrfield = new CodeTypeReference("Schema");
+ var ctrfield = new CodeTypeReference(typeof(Schema),
CodeTypeReferenceOptions.GlobalReference);
string schemaFname = "_SCHEMA";
var codeField = new CodeMemberField(ctrfield, schemaFname);
codeField.Attributes = MemberAttributes.Public |
MemberAttributes.Static;
// create function call Schema.Parse(json)
var cpe = new CodePrimitiveExpression(schema.ToString());
var cmie = new CodeMethodInvokeExpression(
- new CodeMethodReferenceExpression(new
CodeTypeReferenceExpression(typeof(Schema)), "Parse"),
+ new CodeMethodReferenceExpression(new
CodeTypeReferenceExpression(ctrfield), "Parse"),
new CodeExpression[] { cpe });
codeField.InitExpression = cmie;
ctd.Members.Add(codeField);
diff --git a/lang/csharp/src/apache/main/CodeGen/CodeGenUtil.cs
b/lang/csharp/src/apache/main/CodeGen/CodeGenUtil.cs
index 54de067..0b3c177 100644
--- a/lang/csharp/src/apache/main/CodeGen/CodeGenUtil.cs
+++ b/lang/csharp/src/apache/main/CodeGen/CodeGenUtil.cs
@@ -60,8 +60,8 @@ namespace Avro
new CodeNamespaceImport("System"),
new CodeNamespaceImport("System.Collections.Generic"),
new CodeNamespaceImport("System.Text"),
- new CodeNamespaceImport("Avro"),
- new CodeNamespaceImport("Avro.Specific") };
+ new CodeNamespaceImport("global::Avro"),
+ new CodeNamespaceImport("global::Avro.Specific") };
FileComment = new CodeCommentStatement(
@"------------------------------------------------------------------------------
diff --git a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
index c288989..86ca317 100644
--- a/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
+++ b/lang/csharp/src/apache/test/CodGen/CodeGenTest.cs
@@ -51,6 +51,16 @@ namespace Avro.Test
", new object[] {"com.base.ClassKeywords", typeof(int), typeof(long),
typeof(bool), typeof(double), typeof(float), typeof(byte[]),
typeof(string),typeof(object),"com.base.class", "com.base.static"}, TestName =
"TestCodeGen0")]
[TestCase(@"{
""type"" : ""record"",
+""name"" : ""AvroNamespaceType"",
+""namespace"" : ""My.Avro"",
+""fields"" :
+ [
+ { ""name"" : ""justenum"", ""type"" : { ""type"" :
""enum"", ""name"" : ""justenumEnum"", ""symbols"" : [ ""One"", ""Two"" ] } },
+ ]
+}
+", new object[] {"My.Avro.AvroNamespaceType", "My.Avro.justenumEnum"},
TestName = "TestCodeGen3 - Avro namespace conflict")]
+ [TestCase(@"{
+""type"" : ""record"",
""name"" : ""SchemaObject"",
""namespace"" : ""schematest"",
""fields"" :