[ 
https://issues.apache.org/jira/browse/AVRO-3603?focusedWorklogId=799892&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-799892
 ]

ASF GitHub Bot logged work on AVRO-3603:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 11/Aug/22 06:16
            Start Date: 11/Aug/22 06:16
    Worklog Time Spent: 10m 
      Work Description: KhrystynaPopadyuk commented on code in PR #1819:
URL: https://github.com/apache/avro/pull/1819#discussion_r943126289


##########
lang/csharp/src/apache/main/Reflect/ReflectDefaultWriter.cs:
##########
@@ -188,9 +181,9 @@
                     return obj is string;
                 case Schema.Type.Error:
                 case Schema.Type.Record:
-                    return _classCache.GetClass(sc as 
RecordSchema).GetClassType() == obj.GetType();
+                    return _reflectCache.GetClass(sc as 
RecordSchema).GetClassType() == obj.GetType();

Review Comment:
   This is existing logic. Should not be updated in scope of AVRO-3603



##########
lang/csharp/src/apache/main/Reflect/ReflectDefaultWriter.cs:
##########
@@ -188,9 +181,9 @@
                     return obj is string;
                 case Schema.Type.Error:
                 case Schema.Type.Record:
-                    return _classCache.GetClass(sc as 
RecordSchema).GetClassType() == obj.GetType();
+                    return _reflectCache.GetClass(sc as 
RecordSchema).GetClassType() == obj.GetType();
                 case Schema.Type.Enumeration:
-                    return EnumCache.GetEnumeration(sc as EnumSchema) == 
obj.GetType();
+                    return _reflectCache.GetEnumeration(sc as EnumSchema) == 
obj.GetType();

Review Comment:
   This is existing logic. Should not be updated in scope of AVRO-3603



##########
lang/csharp/src/apache/main/Reflect/Reflection/ReflectCache.cs:
##########
@@ -288,17 +256,53 @@
~                    else
~                    {
~                        // check the schema types are registered
~                        foreach (var o in us.Schemas)
~                        {
~                            if (o.Tag == Schema.Type.Record && GetClass(o as 
RecordSchema) == null)
~                            {
~                                throw new AvroException($"Class for union 
record type {o.Fullname} is not registered. Create a ClassCache object and call 
LoadClassCache");
~                            }
~                        }
~                    }
~
                     break;
             }
         }
+
+        /// <summary>
+        /// Lookup an entry in the cache - based on the schema fullname
+        /// </summary>
+        /// <param name="schema"></param>
+        /// <returns></returns>
+        public Type GetEnumeration(NamedSchema schema)
+        {
+            Type t;
+            if (!_nameEnumMap.TryGetValue(schema.Fullname, out t))
+            {
+                throw new AvroException($"Couldn't find enumeration for avro 
fullname: {schema.Fullname}");
+            }
+
+            return t;
+        }
+
+         private void AddEnumNameMapItem(NamedSchema schema, Type dotnetEnum)
+        {
+            _nameEnumMap.TryAdd(schema.Fullname, dotnetEnum);
+        }
+
+        private void AddClassNameMapItem(RecordSchema schema, Type dotnetClass)
+        {
+            if (schema != null && GetClass(schema) != null)
+            {
+                return;
+            }
+
+            if (!dotnetClass.IsClass)
+            {
+                throw new AvroException($"Type {dotnetClass.Name} is not a 
class");
+            }
+
+            _nameClassMap.TryAdd(schema.Fullname, new DotnetClass(dotnetClass, 
schema, this));

Review Comment:
   This is existing logic. Should not be updated in scope of AVRO-3603





Issue Time Tracking
-------------------

    Worklog Id:     (was: 799892)
    Time Spent: 40m  (was: 0.5h)

> .NET/#C: Refactor ReflectReader/Writer: rename and refactor caches, add DI
> --------------------------------------------------------------------------
>
>                 Key: AVRO-3603
>                 URL: https://issues.apache.org/jira/browse/AVRO-3603
>             Project: Apache Avro
>          Issue Type: Improvement
>            Reporter: Khrystyna Popadyuk
>            Assignee: Khrystyna Popadyuk
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> Current ReflectReader/Writer use a lot of static entities (classes, methods, 
> fields). It is good to refactor them with interfaces and DI approach.
> If do such update at once it requires massive changes and can we difficult to 
> review and test.
> This story is created as first step for such refactoring. It will include:
>  - group classes by folders
>  - add DI
>  - rename and refactor ClassCash and EnumCache (avoid method refactoring in 
> scope of this story)
> This story do not update method implementation.
> This is breaking changes.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to