diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_UNION_GenericSerializer_585074122056792963.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_UNION_GenericSerializer_585074122056792963.java index 9b521c992..84ada73b6 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_UNION_GenericSerializer_585074122056792963.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_UNION_GenericSerializer_585074122056792963.java @@ -3,10 +3,7 @@ import java.io.IOException; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -15,7 +12,6 @@ public class Array_of_UNION_GenericSerializer_585074122056792963 implements FastSerializer> { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(List data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_record_GenericSerializer_1629046702287533603.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_record_GenericSerializer_1629046702287533603.java index bbd7b699d..f306b7216 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_record_GenericSerializer_1629046702287533603.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Array_of_record_GenericSerializer_1629046702287533603.java @@ -3,10 +3,7 @@ import java.io.IOException; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -15,7 +12,6 @@ public class Array_of_record_GenericSerializer_1629046702287533603 implements FastSerializer> { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(List data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteEnum_GenericSerializer_6137374763587019173.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteEnum_GenericSerializer_6137374763587019173.java index c8047a85e..ab36de810 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteEnum_GenericSerializer_6137374763587019173.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteEnum_GenericSerializer_6137374763587019173.java @@ -3,8 +3,6 @@ import java.io.IOException; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; @@ -14,7 +12,7 @@ public class FastGenericSerializerGeneratorTest_shouldWriteEnum_GenericSerialize implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); + private final Schema testEnumEnumSchema69 = Schema.parse("{\"type\":\"enum\",\"name\":\"testEnum\",\"namespace\":\"com.adpilot.utils.generated.avro\",\"symbols\":[\"A\",\"B\"]}"); public void serialize(IndexedRecord data, Encoder encoder) throws IOException @@ -26,11 +24,6 @@ public void serialize(IndexedRecord data, Encoder encoder) public void serializeFastGenericSerializerGeneratorTest_shouldWriteEnum68(IndexedRecord data, Encoder encoder) throws IOException { - Schema testEnumEnumSchema69 = enumSchemaMap.get(-3346156575824446940L); - if (null == testEnumEnumSchema69) { - testEnumEnumSchema69 = Schema.parse("{\"type\":\"enum\",\"name\":\"testEnum\",\"namespace\":\"com.adpilot.utils.generated.avro\",\"symbols\":[\"A\",\"B\"]}"); - enumSchemaMap.put(-3346156575824446940L, testEnumEnumSchema69); - } (encoder).writeEnum(testEnumEnumSchema69 .getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) data.get(0)).toString())); org.apache.avro.generic.GenericData.EnumSymbol testEnumUnion70 = ((org.apache.avro.generic.GenericData.EnumSymbol) data.get(1)); if (testEnumUnion70 == null) { @@ -39,7 +32,7 @@ public void serializeFastGenericSerializerGeneratorTest_shouldWriteEnum68(Indexe } else { if (testEnumUnion70 instanceof org.apache.avro.generic.GenericData.EnumSymbol) { (encoder).writeIndex(1); - (encoder).writeEnum(enumSchemaMap.get(-3346156575824446940L).getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) testEnumUnion70).toString())); + (encoder).writeEnum(testEnumEnumSchema69 .getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) testEnumUnion70).toString())); } } List testEnumArray71 = ((List ) data.get(2)); @@ -50,7 +43,7 @@ public void serializeFastGenericSerializerGeneratorTest_shouldWriteEnum68(Indexe (encoder).setItemCount(testEnumArray71 .size()); for (int counter72 = 0; (counter72 <((List ) testEnumArray71).size()); counter72 ++) { (encoder).startItem(); - (encoder).writeEnum(enumSchemaMap.get(-3346156575824446940L).getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) testEnumArray71 .get(counter72)).toString())); + (encoder).writeEnum(testEnumEnumSchema69 .getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) testEnumArray71 .get(counter72)).toString())); } } (encoder).writeArrayEnd(); @@ -70,7 +63,7 @@ public void serializeFastGenericSerializerGeneratorTest_shouldWriteEnum68(Indexe } else { if (union75 instanceof org.apache.avro.generic.GenericData.EnumSymbol) { (encoder).writeIndex(1); - (encoder).writeEnum(enumSchemaMap.get(-3346156575824446940L).getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) union75).toString())); + (encoder).writeEnum(testEnumEnumSchema69 .getEnumOrdinal(((org.apache.avro.generic.GenericData.EnumSymbol) union75).toString())); } } } diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteFixed_GenericSerializer_8889056593487745201.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteFixed_GenericSerializer_8889056593487745201.java index 154bd2ffb..e9a0d48a3 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteFixed_GenericSerializer_8889056593487745201.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteFixed_GenericSerializer_8889056593487745201.java @@ -3,10 +3,7 @@ import java.io.IOException; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; @@ -14,7 +11,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteFixed_GenericSerializ implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteMultipleChoiceUnion_GenericSerializer_4388851848367235159.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteMultipleChoiceUnion_GenericSerializer_4388851848367235159.java index 86df52bc3..627f1723d 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteMultipleChoiceUnion_GenericSerializer_4388851848367235159.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteMultipleChoiceUnion_GenericSerializer_4388851848367235159.java @@ -2,10 +2,7 @@ package com.linkedin.avro.fastserde.generated.serialization.AVRO_1_4; import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -14,7 +11,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteMultipleChoiceUnion_G implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWritePrimitives_GenericSerializer_5300080091170871849.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWritePrimitives_GenericSerializer_5300080091170871849.java index 6a3317d6b..002de2a13 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWritePrimitives_GenericSerializer_5300080091170871849.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWritePrimitives_GenericSerializer_5300080091170871849.java @@ -3,10 +3,7 @@ import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -15,7 +12,6 @@ public class FastGenericSerializerGeneratorTest_shouldWritePrimitives_GenericSer implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteRightUnionIndex_GenericSerializer_5485438821003579903.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteRightUnionIndex_GenericSerializer_5485438821003579903.java index 1e9069a46..64b9b577b 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteRightUnionIndex_GenericSerializer_5485438821003579903.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteRightUnionIndex_GenericSerializer_5485438821003579903.java @@ -2,10 +2,7 @@ package com.linkedin.avro.fastserde.generated.serialization.AVRO_1_4; import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -14,7 +11,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteRightUnionIndex_Gener implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordCollectionsField_GenericSerializer_4869519538077502381.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordCollectionsField_GenericSerializer_4869519538077502381.java index eee8eb201..42fdbd4bf 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordCollectionsField_GenericSerializer_4869519538077502381.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordCollectionsField_GenericSerializer_4869519538077502381.java @@ -4,9 +4,7 @@ import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -15,7 +13,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteSubRecordCollectionsF implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordComplexCollectionsField_GenericSerializer_6532465341493029871.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordComplexCollectionsField_GenericSerializer_6532465341493029871.java index a5c824acb..93760a44e 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordComplexCollectionsField_GenericSerializer_6532465341493029871.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordComplexCollectionsField_GenericSerializer_6532465341493029871.java @@ -4,9 +4,7 @@ import java.io.IOException; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -15,7 +13,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteSubRecordComplexColle implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordField_GenericSerializer_1161833140095035747.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordField_GenericSerializer_1161833140095035747.java index 6be11951a..156d25561 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordField_GenericSerializer_1161833140095035747.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/FastGenericSerializerGeneratorTest_shouldWriteSubRecordField_GenericSerializer_1161833140095035747.java @@ -2,10 +2,7 @@ package com.linkedin.avro.fastserde.generated.serialization.AVRO_1_4; import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -14,7 +11,6 @@ public class FastGenericSerializerGeneratorTest_shouldWriteSubRecordField_Generi implements FastSerializer { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(IndexedRecord data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_UNION_GenericSerializer_2087096002965517991.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_UNION_GenericSerializer_2087096002965517991.java index 2daaa97d2..995aa501e 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_UNION_GenericSerializer_2087096002965517991.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_UNION_GenericSerializer_2087096002965517991.java @@ -3,9 +3,7 @@ import java.io.IOException; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -14,7 +12,6 @@ public class Map_of_UNION_GenericSerializer_2087096002965517991 implements FastSerializer> { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(Map data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_record_GenericSerializer_2141121767969292399.java b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_record_GenericSerializer_2141121767969292399.java index 8fb514c55..989d9bfeb 100644 --- a/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_record_GenericSerializer_2141121767969292399.java +++ b/avro-fastserde/src/codegen/java/com/linkedin/avro/fastserde/generated/serialization/AVRO_1_4/Map_of_record_GenericSerializer_2141121767969292399.java @@ -3,9 +3,7 @@ import java.io.IOException; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import com.linkedin.avro.fastserde.FastSerializer; -import org.apache.avro.Schema; import org.apache.avro.generic.IndexedRecord; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -14,7 +12,6 @@ public class Map_of_record_GenericSerializer_2141121767969292399 implements FastSerializer> { - private Map enumSchemaMap = new ConcurrentHashMap(); public void serialize(Map data, Encoder encoder) throws IOException diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerializerGenerator.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerializerGenerator.java index cbe317fb6..59b579415 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerializerGenerator.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/FastSerializerGenerator.java @@ -6,7 +6,6 @@ import com.sun.codemodel.JConditional; import com.sun.codemodel.JExpr; import com.sun.codemodel.JExpression; -import com.sun.codemodel.JFieldVar; import com.sun.codemodel.JForEach; import com.sun.codemodel.JForLoop; import com.sun.codemodel.JMethod; @@ -16,11 +15,8 @@ import java.io.File; import java.io.IOException; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import org.apache.avro.Schema; import org.apache.avro.io.Encoder; import org.apache.avro.util.Utf8; @@ -36,13 +32,9 @@ public class FastSerializerGenerator extends FastSerializerGeneratorBase { private final SchemaAssistant schemaAssistant; /** - * Enum schema mapping for Avro-1.4. + * Enum schema mapping for Avro-1.4 to record schema id and corresponding schema JVar. */ - private JFieldVar enumSchemaMapField; - /** - * This field is used to decide whether the corresponding schema is already in {@link #enumSchemaMapField} or not. - */ - private final Set enumSchemaIdSet = new HashSet<>(); + private final Map enumSchemaVarMap = new HashMap<>(); public FastSerializerGenerator(boolean useGenericTypes, Schema schema, File destination, ClassLoader classLoader, @@ -60,20 +52,6 @@ public FastSerializer generateSerializer() { try { serializerClass = classPackage._class(className); - if (Utils.isAvro14()) { - /** - * In Avro-1.4, there is no way to infer/extract enum schema from {@link org.apache.avro.generic.GenericData.EnumSymbol}, so - * the serializer needs to maintain a mapping between the schema id and the actual {@link org.apache.avro.Schema.EnumSchema}, - * and get the enum id from the corresponding EnumSchema in {@link #processEnum(Schema, JExpression, JBlock)}. - */ - enumSchemaMapField = - serializerClass.field( - JMod.PRIVATE, - codeModel.ref(Map.class).narrow(Long.class).narrow(Schema.class), - "enumSchemaMap", - JExpr._new(codeModel.ref(ConcurrentHashMap.class).narrow(Long.class).narrow(Schema.class))); - } - final JMethod serializeMethod = serializerClass.method(JMod.PUBLIC, void.class, "serialize"); final JVar serializeMethodParam; @@ -323,26 +301,18 @@ private void processEnum(Schema enumSchema, JExpression enumValueExpression, JBl if (useGenericTypes) { if (Utils.isAvro14()) { /** - * Register/retrieve the corresponding {@link org.apache.avro.Schema.EnumSchema} from the mapping. + * In Avro-1.4, there is no way to infer/extract enum schema from {@link org.apache.avro.generic.GenericData.EnumSymbol}, + * so the serializer needs to record the schema id and the corresponding {@link org.apache.avro.Schema.EnumSchema}, + * and maintain a mapping between the schema id and EnumSchema JVar for future use. */ - long enumSchemaFingerprint = Utils.getSchemaFingerprint(enumSchema); - if (enumSchemaIdSet.contains(enumSchemaFingerprint)) { - valueToWrite = JExpr.invoke( - enumSchemaMapField.invoke("get").arg(JExpr.lit(enumSchemaFingerprint)), - "getEnumOrdinal" - ).arg(enumValueCasted.invoke("toString")); - } else { - enumSchemaIdSet.add(enumSchemaFingerprint); - JVar enumSchemaVar = body.decl(codeModel.ref(Schema.class), - getVariableName(enumSchema.getName() + "EnumSchema"), - enumSchemaMapField.invoke("get").arg(JExpr.lit(enumSchemaFingerprint))); - JConditional schemaCheckCond = body._if(JExpr._null().eq(enumSchemaVar)); - JBlock thenBody = schemaCheckCond._then(); - thenBody.assign(enumSchemaVar, codeModel.ref(Schema.class).staticInvoke("parse").arg(enumSchema.toString())); - thenBody.invoke(enumSchemaMapField, "put").arg(JExpr.lit(enumSchemaFingerprint)).arg(enumSchemaVar); - - valueToWrite = JExpr.invoke(enumSchemaVar, "getEnumOrdinal").arg(enumValueCasted.invoke("toString")); - } + JVar enumSchemaVar = enumSchemaVarMap.computeIfAbsent(Utils.getSchemaFingerprint(enumSchema), s-> + serializerClass.field( + JMod.PRIVATE | JMod.FINAL, + Schema.class, + getVariableName(enumSchema.getName() + "EnumSchema"), + codeModel.ref(Schema.class).staticInvoke("parse").arg(enumSchema.toString())) + ); + valueToWrite = JExpr.invoke(enumSchemaVar, "getEnumOrdinal").arg(enumValueCasted.invoke("toString")); } else { valueToWrite = JExpr.invoke( enumValueCasted.invoke("getSchema"),