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

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

commit eaaf263372229f9aad9970f54767e043b1e104dc
Author: Daniel Kulp <[email protected]>
AuthorDate: Mon Dec 10 13:05:59 2018 -0500

    [AVRO-1952] Squashed commit of the following:
    This closes #134
    
    commit 0cf2081569f3244ae535710d46ea41e15e57bbcc
    Author: dolow <[email protected]>
    Date:   Wed Sep 28 20:10:17 2016 +0900
    
        removed unused GetConstructor methods
    
    commit aad24a7b1bbeb39105b8b3ee9578dbc792d8cfea
    Author: dolow <[email protected]>
    Date:   Wed Sep 28 17:45:43 2016 +0900
    
        replaced Reflection.Emit to simple instantiation for supporting AOT.
---
 .../src/apache/main/Specific/ObjectCreator.cs      | 43 +---------------------
 .../apache/main/Specific/SpecificDatumReader.cs    | 34 +++++++----------
 2 files changed, 16 insertions(+), 61 deletions(-)

diff --git a/lang/csharp/src/apache/main/Specific/ObjectCreator.cs 
b/lang/csharp/src/apache/main/Specific/ObjectCreator.cs
index ae43c84..d1daa95 100644
--- a/lang/csharp/src/apache/main/Specific/ObjectCreator.cs
+++ b/lang/csharp/src/apache/main/Specific/ObjectCreator.cs
@@ -1,4 +1,4 @@
-/**
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -49,8 +49,6 @@ namespace Avro.Specific
         private readonly bool diffAssembly;
 
         public delegate object CtorDelegate();
-        private Type ctorType = typeof(CtorDelegate);
-        Dictionary<NameCtorKey, CtorDelegate> ctors;
 
         private ObjectCreator()
         {
@@ -61,8 +59,6 @@ namespace Avro.Specific
 
             GenericMapType = typeof(Dictionary<,>);
             GenericListType = typeof(List<>);
-
-            ctors = new Dictionary<NameCtorKey, CtorDelegate>();
         }
 
         public struct NameCtorKey : IEquatable<NameCtorKey>
@@ -273,28 +269,6 @@ namespace Avro.Specific
         }
 
         /// <summary>
-        /// Gets the default constructor for the specified type
-        /// </summary>
-        /// <param name="name">name of object for the type</param>
-        /// <param name="schemaType">schema type for the object</param>
-        /// <param name="type">type of the object</param>
-        /// <returns>Default constructor for the type</returns>
-        public CtorDelegate GetConstructor(string name, Schema.Type 
schemaType, Type type)
-        {
-            ConstructorInfo ctorInfo = type.GetConstructor(Type.EmptyTypes);
-            if (ctorInfo == null)
-                throw new AvroException("Class " + name + " has no default 
constructor");
-
-            DynamicMethod dynMethod = new DynamicMethod("DM$OBJ_FACTORY_" + 
name, typeof(object), null, type, true);
-            ILGenerator ilGen = dynMethod.GetILGenerator();
-            ilGen.Emit(OpCodes.Nop);
-            ilGen.Emit(OpCodes.Newobj, ctorInfo);
-            ilGen.Emit(OpCodes.Ret);
-
-            return (CtorDelegate)dynMethod.CreateDelegate(ctorType);
-        }
-
-        /// <summary>
         /// Creates new instance of the given type
         /// </summary>
         /// <param name="name">fully qualified name of the type</param>
@@ -302,20 +276,7 @@ namespace Avro.Specific
         /// <returns>new object of the given type</returns>
         public object New(string name, Schema.Type schemaType)
         {
-            NameCtorKey key = new NameCtorKey(name, schemaType);
-
-            CtorDelegate ctor;
-            lock(ctors)
-            {
-                if (!ctors.TryGetValue(key, out ctor))
-                {
-                    Type type = GetType(name, schemaType);
-                    ctor = GetConstructor(name, schemaType, type);
-
-                    ctors.Add(key, ctor);
-                }
-            }
-            return ctor();
+            return Activator.CreateInstance(GetType(name, schemaType));
         }
     }
 }
diff --git a/lang/csharp/src/apache/main/Specific/SpecificDatumReader.cs 
b/lang/csharp/src/apache/main/Specific/SpecificDatumReader.cs
index d54f3ca..3ec8b3e 100644
--- a/lang/csharp/src/apache/main/Specific/SpecificDatumReader.cs
+++ b/lang/csharp/src/apache/main/Specific/SpecificDatumReader.cs
@@ -1,4 +1,4 @@
-/**
+/**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -77,12 +77,6 @@ namespace Avro.Specific
             return new SpecificFixedAccess(readerSchema);
         }
 
-        private static ObjectCreator.CtorDelegate GetConstructor(string name, 
Schema.Type schemaType)
-        {
-            var creator = ObjectCreator.Instance;
-            return creator.GetConstructor(name, schemaType, 
creator.GetType(name, schemaType));
-        }
-
         private class SpecificEnumAccess : EnumAccess
         {
             public object CreateEnum(object reuse, int ordinal)
@@ -93,16 +87,16 @@ namespace Avro.Specific
 
         private class SpecificRecordAccess : RecordAccess
         {
-            private ObjectCreator.CtorDelegate objCreator;
+            private string typeName;
 
             public SpecificRecordAccess(RecordSchema readerSchema)
             {
-                objCreator = GetConstructor(readerSchema.Fullname, 
Schema.Type.Record);
+                typeName = readerSchema.Fullname;
             }
 
             public object CreateRecord(object reuse)
             {
-                return reuse ?? objCreator();
+                return reuse ?? ObjectCreator.Instance.New(typeName, 
Schema.Type.Record);
             }
 
             public object GetField(object record, string fieldName, int 
fieldPos)
@@ -118,16 +112,16 @@ namespace Avro.Specific
 
         private class SpecificFixedAccess : FixedAccess
         {
-            private ObjectCreator.CtorDelegate objCreator;
+            private string typeName;
 
             public SpecificFixedAccess(FixedSchema readerSchema)
             {
-                objCreator = GetConstructor(readerSchema.Fullname, 
Schema.Type.Fixed);
+                typeName = readerSchema.Fullname;
             }
 
             public object CreateFixed(object reuse)
             {
-                return reuse ?? objCreator();
+                return reuse ?? ObjectCreator.Instance.New(typeName, 
Schema.Type.Fixed);
             }
 
             public byte[] GetFixedBuffer(object rec)
@@ -138,7 +132,7 @@ namespace Avro.Specific
 
         private class SpecificArrayAccess : ArrayAccess
         {
-            private ObjectCreator.CtorDelegate objCreator;
+            private string typeName;
 
             public SpecificArrayAccess(ArraySchema readerSchema)
             {
@@ -147,7 +141,7 @@ namespace Avro.Specific
                 type = type.Remove(0, 6);              // remove IList<
                 type = type.Remove(type.Length - 1);   // remove >
 
-                objCreator = GetConstructor(type, Schema.Type.Array);
+                typeName = type;
             }
 
             public object Create(object reuse)
@@ -164,7 +158,7 @@ namespace Avro.Specific
                     array.Clear();
                 }
                 else
-                    array = objCreator() as IList;
+                    array = ObjectCreator.Instance.New(typeName, 
Schema.Type.Array) as IList;
                 return array;
             }
 
@@ -190,7 +184,7 @@ namespace Avro.Specific
 
         private class SpecificMapAccess : MapAccess
         {
-            private ObjectCreator.CtorDelegate objCreator;
+            private string typeName;
 
             public SpecificMapAccess(MapSchema readerSchema)
             {
@@ -199,7 +193,7 @@ namespace Avro.Specific
                 type = type.Remove(0, 19);             // remove 
IDictionary<string,
                 type = type.Remove(type.Length - 1);   // remove >
 
-                objCreator = GetConstructor(type, Schema.Type.Map);
+                typeName = type;
             }
 
             public object Create(object reuse)
@@ -214,7 +208,7 @@ namespace Avro.Specific
                     map.Clear();
                 }
                 else
-                    map = objCreator() as System.Collections.IDictionary;
+                    map = ObjectCreator.Instance.New(typeName, 
Schema.Type.Map) as System.Collections.IDictionary;
                 return map;
             }
 
@@ -229,4 +223,4 @@ namespace Avro.Specific
             }
         }
     }
-}
\ No newline at end of file
+}

Reply via email to