This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch releases-0.12 in repository https://gitbox.apache.org/repos/asf/fory.git
commit b522c9511c2cfb3932feadb079ced0a73fc4bb44 Author: Shawn Yang <[email protected]> AuthorDate: Thu Aug 14 16:35:50 2025 +0800 refactor(java): rename abstract collection/map serializers to Map/ListLikeSerializer (#2466) <!-- **Thanks for contributing to Fory.** **If this is your first time opening a PR on fory, you can refer to [CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).** Contribution Checklist - The **Apache Fory** community has requirements on the naming of pr titles. You can also find instructions in [CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md). - Fory has a strong focus on performance. If the PR you submit will have an impact on performance, please benchmark it first and provide the benchmark result here. --> ## What does this PR do? <!-- Describe the purpose of this PR. --> ## Related issues <!-- Is there any related issue? Please attach here. - #xxxx0 - #xxxx1 - #xxxx2 --> ## Does this PR introduce any user-facing change? <!-- If any user-facing interface changes, please [open an issue](https://github.com/apache/fory/issues/new/choose) describing the need to do so and update the document if necessary. --> - [ ] Does this PR introduce any public API change? - [ ] Does this PR introduce any binary protocol compatibility change? ## Benchmark <!-- When the PR has an impact on performance (if you don't know whether the PR will have an impact on performance, you can submit the PR first, and if it will have impact on performance, the code reviewer will explain it), be sure to attach a benchmark data here. --> --- docs/guide/java_serialization_guide.md | 20 +++++----- docs/specification/java_serialization_spec.md | 4 +- docs/specification/xlang_serialization_spec.md | 2 +- .../fory/builder/BaseObjectCodecBuilder.java | 43 +++++++++++----------- .../org/apache/fory/resolver/FieldResolver.java | 24 ++++++------ .../org/apache/fory/resolver/XtypeResolver.java | 12 +++--- .../fory/serializer/CompatibleSerializer.java | 14 +++---- ...rializer.java => CollectionLikeSerializer.java} | 8 ++-- .../collection/CollectionSerializer.java | 2 +- .../collection/CollectionSerializers.java | 14 +++---- ...ctMapSerializer.java => MapLikeSerializer.java} | 9 ++--- .../fory/serializer/collection/MapSerializer.java | 2 +- .../fory/serializer/collection/MapSerializers.java | 4 +- .../scala/SingletonCollectionSerializer.java | 4 +- .../serializer/scala/SingletonMapSerializer.java | 4 +- .../fory/serializer/kotlin/CollectionSerializer.kt | 4 +- .../serializer/scala/CollectionSerializer.scala | 4 +- .../fory/serializer/scala/MapSerializer.scala | 4 +- .../fory/serializer/scala/RangeSerializer.scala | 6 +-- 19 files changed, 90 insertions(+), 94 deletions(-) diff --git a/docs/guide/java_serialization_guide.md b/docs/guide/java_serialization_guide.md index 449802277..a4f7da2b8 100644 --- a/docs/guide/java_serialization_guide.md +++ b/docs/guide/java_serialization_guide.md @@ -308,8 +308,8 @@ fory.registerSerializer(Foo.class, new FooSerializer(fory)); ### Implement Collection Serializer -Similar to maps, when implementing a serializer for a custom Collection type, you must extend `CollectionSerializer` or `AbstractCollectionSerializer`. -The key difference between these two is that `AbstractCollectionSerializer` can serialize a class which has a collection-like structure but is not a java Collection subtype. +Similar to maps, when implementing a serializer for a custom Collection type, you must extend `CollectionSerializer` or `CollectionLikeSerializer`. +The key difference between these two is that `CollectionLikeSerializer` can serialize a class which has a collection-like structure but is not a java Collection subtype. For collection serializer, this is a special parameter `supportCodegenHook` needs be configured: @@ -433,7 +433,7 @@ class IntList extends AbstractCollection<Integer> { } } -class IntListSerializer extends AbstractCollectionSerializer<IntList> { +class IntListSerializer extends CollectionLikeSerializer<IntList> { public IntListSerializer(Fory fory) { // Disable JIT since we're handling serialization directly super(fory, IntList.class, false); @@ -547,7 +547,7 @@ Sometimes you may want to implement a serializer for a type that behaves like a The key principles for collection-like type serialization are: -1. Extend `AbstractCollectionSerializer` for custom collection-like types +1. Extend `CollectionLikeSerializer` for custom collection-like types 2. Enable JIT optimization with `supportCodegenHook` 3. Provide efficient element access through views 4. Maintain proper size tracking @@ -643,7 +643,7 @@ class CollectionView extends AbstractCollection<Object> { } } -class CustomCollectionSerializer extends AbstractCollectionSerializer<CustomCollectionLike> { +class CustomCollectionSerializer extends CollectionLikeSerializer<CustomCollectionLike> { public CustomCollectionSerializer(Fory fory) { super(fory, CustomCollectionLike.class, true); } @@ -699,7 +699,7 @@ Note that this implementation provides better performance at the cost of flexibi ### Implement Map Serializer -When implementing a serializer for a custom Map type, you must extend `MapSerializer` or `AbstractMapSerializer`. The key difference between these two is that `AbstractMapSerializer` can serialize a class which has a map-like structure but is not a java Map subtype. +When implementing a serializer for a custom Map type, you must extend `MapSerializer` or `MapLikeSerializer`. The key difference between these two is that `MapLikeSerializer` can serialize a class which has a map-like structure but is not a java Map subtype. Similar to collection serializer, this is a special parameter `supportCodegenHook` needs be configured: @@ -797,7 +797,7 @@ class FixedValueMap extends AbstractMap<String, Integer> { } } -class FixedValueMapSerializer extends AbstractMapSerializer<FixedValueMap> { +class FixedValueMapSerializer extends MapLikeSerializer<FixedValueMap> { public FixedValueMapSerializer(Fory fory) { // Disable codegen since we're handling serialization directly super(fory, FixedValueMap.class, false); @@ -900,7 +900,7 @@ Sometimes you may want to implement a serializer for a type that behaves like a The key principles for map-like type serialization are: -1. Extend `AbstractMapSerializer` for custom collection-like types +1. Extend `MapLikeSerializer` for custom collection-like types 2. Enable JIT optimization with `supportCodegenHook` 3. Provide efficient element access through views 4. Maintain proper size tracking @@ -1028,7 +1028,7 @@ class MapView extends AbstractMap<Object, Object> { } } -class CustomMapLikeSerializer extends AbstractMapSerializer<CustomMapLike> { +class CustomMapLikeSerializer extends MapLikeSerializer<CustomMapLike> { public CustomMapLikeSerializer(Fory fory) { super(fory, CustomMapLike.class, true); } @@ -1082,7 +1082,7 @@ fory.registerSerializer(CustomCollection.class, new CustomCollectionSerializer<> Note that when implementing custom map or collection serializers: -1. Always extend the appropriate base class (`MapSerializer`/`AbstractMapSerializer` for maps, `CollectionSerializer`/`AbstractCollectionSerializer` for collections) +1. Always extend the appropriate base class (`MapSerializer`/`MapLikeSerializer` for maps, `CollectionSerializer`/`CollectionLikeSerializer` for collections) 2. Consider the impact of `supportCodegenHook` on performance and functionality 3. Properly handle reference tracking if needed 4. Implement proper size management using `setNumElements` and `getAndClearNumElements` when `supportCodegenHook` is `true` diff --git a/docs/specification/java_serialization_spec.md b/docs/specification/java_serialization_spec.md index 2aa12b5f2..51fa30480 100644 --- a/docs/specification/java_serialization_spec.md +++ b/docs/specification/java_serialization_spec.md @@ -369,7 +369,7 @@ Which encoding to choose: ### Collection -> All collection serializers must extend `AbstractCollectionSerializer`. +> All collection serializers must extend `CollectionLikeSerializer`. Format: @@ -425,7 +425,7 @@ type. ### Map -> All Map serializers must extend `AbstractMapSerializer`. +> All Map serializers must extend `MapLikeSerializer`. Format: diff --git a/docs/specification/xlang_serialization_spec.md b/docs/specification/xlang_serialization_spec.md index 66ced9319..2fcbab1db 100644 --- a/docs/specification/xlang_serialization_spec.md +++ b/docs/specification/xlang_serialization_spec.md @@ -661,7 +661,7 @@ else: fory.write_value(buffer, elem) ``` -[`CollectionSerializer#writeElements`](https://github.com/apache/fory/blob/20a1a78b17a75a123a6f5b7094c06ff77defc0fe/java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractCollectionSerializer.java#L302) +[`CollectionSerializer#writeElements`](https://github.com/apache/fory/blob/20a1a78b17a75a123a6f5b7094c06ff77defc0fe/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java#L302) can be taken as an example. ### array diff --git a/java/fory-core/src/main/java/org/apache/fory/builder/BaseObjectCodecBuilder.java b/java/fory-core/src/main/java/org/apache/fory/builder/BaseObjectCodecBuilder.java index 0d965a5ff..859dd594f 100644 --- a/java/fory-core/src/main/java/org/apache/fory/builder/BaseObjectCodecBuilder.java +++ b/java/fory-core/src/main/java/org/apache/fory/builder/BaseObjectCodecBuilder.java @@ -46,11 +46,11 @@ import static org.apache.fory.codegen.ExpressionUtils.subtract; import static org.apache.fory.codegen.ExpressionUtils.uninline; import static org.apache.fory.collection.Collections.ofHashSet; import static org.apache.fory.serializer.CodegenSerializer.LazyInitBeanSerializer; -import static org.apache.fory.serializer.collection.AbstractMapSerializer.MAX_CHUNK_SIZE; import static org.apache.fory.serializer.collection.MapFlags.KEY_DECL_TYPE; import static org.apache.fory.serializer.collection.MapFlags.TRACKING_KEY_REF; import static org.apache.fory.serializer.collection.MapFlags.TRACKING_VALUE_REF; import static org.apache.fory.serializer.collection.MapFlags.VALUE_DECL_TYPE; +import static org.apache.fory.serializer.collection.MapLikeSerializer.MAX_CHUNK_SIZE; import static org.apache.fory.type.TypeUtils.CLASS_TYPE; import static org.apache.fory.type.TypeUtils.COLLECTION_TYPE; import static org.apache.fory.type.TypeUtils.ITERATOR_TYPE; @@ -115,9 +115,9 @@ import org.apache.fory.serializer.ObjectSerializer; import org.apache.fory.serializer.PrimitiveSerializers.LongSerializer; import org.apache.fory.serializer.Serializer; import org.apache.fory.serializer.StringSerializer; -import org.apache.fory.serializer.collection.AbstractCollectionSerializer; -import org.apache.fory.serializer.collection.AbstractMapSerializer; import org.apache.fory.serializer.collection.CollectionFlags; +import org.apache.fory.serializer.collection.CollectionLikeSerializer; +import org.apache.fory.serializer.collection.MapLikeSerializer; import org.apache.fory.type.GenericType; import org.apache.fory.type.TypeUtils; import org.apache.fory.util.GraalvmSupport; @@ -140,8 +140,8 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { private static final TypeRef<?> STRING_SERIALIZER_TYPE_TOKEN = TypeRef.of(StringSerializer.class); private static final TypeRef<?> SERIALIZER_TYPE = TypeRef.of(Serializer.class); private static final TypeRef<?> COLLECTION_SERIALIZER_TYPE = - TypeRef.of(AbstractCollectionSerializer.class); - private static final TypeRef<?> MAP_SERIALIZER_TYPE = TypeRef.of(AbstractMapSerializer.class); + TypeRef.of(CollectionLikeSerializer.class); + private static final TypeRef<?> MAP_SERIALIZER_TYPE = TypeRef.of(MapLikeSerializer.class); private static final TypeRef<?> GENERIC_TYPE = TypeRef.of(GenericType.class); protected final Reference refResolverRef; @@ -330,7 +330,7 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { ctx.addImports(LazyInitBeanSerializer.class, EnumSerializer.class); ctx.addImports(Serializer.class, StringSerializer.class); ctx.addImports(ObjectSerializer.class, CompatibleSerializer.class); - ctx.addImports(AbstractCollectionSerializer.class, AbstractMapSerializer.class); + ctx.addImports(CollectionLikeSerializer.class, MapLikeSerializer.class); } /** @@ -618,11 +618,11 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { } } if (useCollectionSerialization(cls) - && !AbstractCollectionSerializer.class.isAssignableFrom(serializerClass)) { - serializerClass = AbstractCollectionSerializer.class; + && !CollectionLikeSerializer.class.isAssignableFrom(serializerClass)) { + serializerClass = CollectionLikeSerializer.class; } else if (useMapSerialization(cls) - && !AbstractMapSerializer.class.isAssignableFrom(serializerClass)) { - serializerClass = AbstractMapSerializer.class; + && !MapLikeSerializer.class.isAssignableFrom(serializerClass)) { + serializerClass = MapLikeSerializer.class; } TypeRef<? extends Serializer> serializerTypeRef = TypeRef.of(serializerClass); Expression fieldTypeExpr = getClassExpr(cls); @@ -829,9 +829,8 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { "writeCollectionClassInfo", false); } - } else if (!TypeRef.of(AbstractCollectionSerializer.class).isSupertypeOf(serializer.type())) { - serializer = - cast(serializer, TypeRef.of(AbstractCollectionSerializer.class), "colSerializer"); + } else if (!TypeRef.of(CollectionLikeSerializer.class).isSupertypeOf(serializer.type())) { + serializer = cast(serializer, TypeRef.of(CollectionLikeSerializer.class), "colSerializer"); } TypeRef<?> elementType = getElementType(typeRef); // write collection data. @@ -954,7 +953,7 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { /** * Write collection elements header: flags and maybe elements classinfo. Keep this consistent with - * `AbstractCollectionSerializer#writeElementsHeader`. + * `CollectionLikeSerializer#writeElementsHeader`. * * @return Tuple(flags, Nullable ( element serializer)) */ @@ -1140,8 +1139,8 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { invokeGenerated( ctx, ofHashSet(buffer, map), writeClassAction, "writeMapClassInfo", false); } - } else if (!AbstractMapSerializer.class.isAssignableFrom(serializer.type().getRawType())) { - serializer = cast(serializer, TypeRef.of(AbstractMapSerializer.class), "mapSerializer"); + } else if (!MapLikeSerializer.class.isAssignableFrom(serializer.type().getRawType())) { + serializer = cast(serializer, TypeRef.of(MapLikeSerializer.class), "mapSerializer"); } Expression write = new If( @@ -1472,7 +1471,7 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { if (!inline) { expressions.add(new Return(entry)); // method too big, spilt it into a new method. - // Generate similar signature as `AbstractMapSerializer.writeJavaChunk`( + // Generate similar signature as `MapLikeSerializer.writeJavaChunk`( // MemoryBuffer buffer, // Entry<Object, Object> entry, // Iterator<Entry<Object, Object>> iterator, @@ -1679,8 +1678,8 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { } } else { checkArgument( - AbstractCollectionSerializer.class.isAssignableFrom(serializer.type().getRawType()), - "Expected AbstractCollectionSerializer but got %s", + CollectionLikeSerializer.class.isAssignableFrom(serializer.type().getRawType()), + "Expected CollectionLikeSerializer but got %s", serializer.type()); } Invoke supportHook = inlineInvoke(serializer, "supportCodegenHook", PRIMITIVE_BOOLEAN_TYPE); @@ -1901,8 +1900,8 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { } } else { checkArgument( - AbstractMapSerializer.class.isAssignableFrom(serializer.type().getRawType()), - "Expected AbstractMapSerializer but got %s", + MapLikeSerializer.class.isAssignableFrom(serializer.type().getRawType()), + "Expected MapLikeSerializer but got %s", serializer.type()); } Expression mapSerializer = serializer; @@ -2103,7 +2102,7 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { new Return(ofInt(0))); expressions.add(returnSizeAndHeader); // method too big, spilt it into a new method. - // Generate similar signature as `AbstractMapSerializer.writeJavaChunk`( + // Generate similar signature as `MapLikeSerializer.writeJavaChunk`( // MemoryBuffer buffer, // long size, // int chunkHeader, diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/FieldResolver.java b/java/fory-core/src/main/java/org/apache/fory/resolver/FieldResolver.java index aab4f570e..b7d75dfce 100644 --- a/java/fory-core/src/main/java/org/apache/fory/resolver/FieldResolver.java +++ b/java/fory-core/src/main/java/org/apache/fory/resolver/FieldResolver.java @@ -53,8 +53,8 @@ import org.apache.fory.reflect.FieldAccessor; import org.apache.fory.reflect.ReflectionUtils; import org.apache.fory.reflect.TypeRef; import org.apache.fory.serializer.PrimitiveSerializers; -import org.apache.fory.serializer.collection.AbstractCollectionSerializer; -import org.apache.fory.serializer.collection.AbstractMapSerializer; +import org.apache.fory.serializer.collection.CollectionLikeSerializer; +import org.apache.fory.serializer.collection.MapLikeSerializer; import org.apache.fory.type.Descriptor; import org.apache.fory.type.TypeUtils; import org.apache.fory.util.MurmurHash3; @@ -580,8 +580,8 @@ public class FieldResolver { if (fieldType == FieldTypes.COLLECTION_ELEMENT_FINAL) { ClassInfo elementClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, classInfoHolder); - AbstractCollectionSerializer collectionSerializer = - (AbstractCollectionSerializer) classInfo.getSerializer(); + CollectionLikeSerializer collectionSerializer = + (CollectionLikeSerializer) classInfo.getSerializer(); try { collectionSerializer.setElementSerializer(elementClassInfo.getSerializer()); o = collectionSerializer.read(buffer); @@ -594,7 +594,7 @@ public class FieldResolver { ClassInfo keyClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo valueClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, classInfoHolder); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); @@ -608,7 +608,7 @@ public class FieldResolver { } else if (fieldType == FieldTypes.MAP_KEY_FINAL) { ClassInfo keyClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, classInfoHolder); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); o = mapSerializer.read(buffer); @@ -621,7 +621,7 @@ public class FieldResolver { Preconditions.checkArgument(fieldType == FieldTypes.MAP_VALUE_FINAL); ClassInfo valueClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, classInfoHolder); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); o = mapSerializer.read(buffer); @@ -639,8 +639,8 @@ public class FieldResolver { if (fieldType == FieldTypes.COLLECTION_ELEMENT_FINAL) { ClassInfo elementClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, fieldInfo.getClassInfoHolder()); - AbstractCollectionSerializer collectionSerializer = - (AbstractCollectionSerializer) classInfo.getSerializer(); + CollectionLikeSerializer collectionSerializer = + (CollectionLikeSerializer) classInfo.getSerializer(); try { collectionSerializer.setElementSerializer(elementClassInfo.getSerializer()); o = collectionSerializer.read(buffer); @@ -653,7 +653,7 @@ public class FieldResolver { ClassInfo keyClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo valueClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, fieldInfo.getClassInfoHolder()); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); @@ -667,7 +667,7 @@ public class FieldResolver { } else if (fieldType == FieldTypes.MAP_KEY_FINAL) { ClassInfo keyClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, fieldInfo.getClassInfoHolder()); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); o = mapSerializer.read(buffer); @@ -680,7 +680,7 @@ public class FieldResolver { Preconditions.checkArgument(fieldType == FieldTypes.MAP_VALUE_FINAL); ClassInfo valueClassInfo = classResolver.readClassInfo(buffer, classInfoHolder); ClassInfo classInfo = classResolver.readClassInfo(buffer, fieldInfo.getClassInfoHolder()); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); o = mapSerializer.read(buffer); diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java b/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java index 4cd2bfdf0..dcdf71e5b 100644 --- a/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java +++ b/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java @@ -74,11 +74,11 @@ import org.apache.fory.serializer.ObjectSerializer; import org.apache.fory.serializer.SerializationUtils; import org.apache.fory.serializer.Serializer; import org.apache.fory.serializer.Serializers; -import org.apache.fory.serializer.collection.AbstractCollectionSerializer; -import org.apache.fory.serializer.collection.AbstractMapSerializer; +import org.apache.fory.serializer.collection.CollectionLikeSerializer; import org.apache.fory.serializer.collection.CollectionSerializer; import org.apache.fory.serializer.collection.CollectionSerializers.ArrayListSerializer; import org.apache.fory.serializer.collection.CollectionSerializers.HashSetSerializer; +import org.apache.fory.serializer.collection.MapLikeSerializer; import org.apache.fory.serializer.collection.MapSerializer; import org.apache.fory.type.GenericType; import org.apache.fory.type.Generics; @@ -441,8 +441,8 @@ public class XtypeResolver implements TypeResolver { } else { ClassInfo classInfo = classResolver.getClassInfo(cls, false); if (classInfo != null && classInfo.serializer != null) { - if (classInfo.serializer instanceof AbstractMapSerializer - && ((AbstractMapSerializer) classInfo.serializer).supportCodegenHook()) { + if (classInfo.serializer instanceof MapLikeSerializer + && ((MapLikeSerializer) classInfo.serializer).supportCodegenHook()) { serializer = classInfo.serializer; } else { serializer = new MapSerializer(fory, cls); @@ -469,8 +469,8 @@ public class XtypeResolver implements TypeResolver { private Serializer<?> getCollectionSerializer(Class<?> cls) { ClassInfo classInfo = classResolver.getClassInfo(cls, false); if (classInfo != null && classInfo.serializer != null) { - if (classInfo.serializer instanceof AbstractCollectionSerializer - && ((AbstractCollectionSerializer) (classInfo.serializer)).supportCodegenHook()) { + if (classInfo.serializer instanceof CollectionLikeSerializer + && ((CollectionLikeSerializer) (classInfo.serializer)).supportCodegenHook()) { return classInfo.serializer; } } diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/CompatibleSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/CompatibleSerializer.java index a302d2b66..eb3242239 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/CompatibleSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/CompatibleSerializer.java @@ -31,8 +31,8 @@ import org.apache.fory.reflect.FieldAccessor; import org.apache.fory.resolver.ClassInfo; import org.apache.fory.resolver.ClassResolver; import org.apache.fory.resolver.FieldResolver; -import org.apache.fory.serializer.collection.AbstractCollectionSerializer; -import org.apache.fory.serializer.collection.AbstractMapSerializer; +import org.apache.fory.serializer.collection.CollectionLikeSerializer; +import org.apache.fory.serializer.collection.MapLikeSerializer; import org.apache.fory.util.Preconditions; import org.apache.fory.util.record.RecordInfo; import org.apache.fory.util.record.RecordUtils; @@ -232,8 +232,8 @@ public final class CompatibleSerializer<T> extends CompatibleSerializerBase<T> { // following write is consistent with `BaseSeqCodecBuilder.serializeForCollection` ClassInfo classInfo = fieldInfo.getClassInfo(fieldValue.getClass()); classResolver.writeClassInfo(buffer, classInfo); - AbstractCollectionSerializer collectionSerializer = - (AbstractCollectionSerializer) classInfo.getSerializer(); + CollectionLikeSerializer collectionSerializer = + (CollectionLikeSerializer) classInfo.getSerializer(); try { collectionSerializer.setElementSerializer(elementClassInfo.getSerializer()); collectionSerializer.write(buffer, fieldValue); @@ -253,7 +253,7 @@ public final class CompatibleSerializer<T> extends CompatibleSerializerBase<T> { // following write is consistent with `BaseSeqCodecBuilder.serializeForMap` ClassInfo classInfo = fieldInfo.getClassInfo(fieldValue.getClass()); classResolver.writeClassInfo(buffer, classInfo); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); @@ -273,7 +273,7 @@ public final class CompatibleSerializer<T> extends CompatibleSerializerBase<T> { // following write is consistent with `BaseSeqCodecBuilder.serializeForMap` ClassInfo classInfo = fieldInfo.getClassInfo(fieldValue.getClass()); classResolver.writeClassInfo(buffer, classInfo); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setKeySerializer(keyClassInfo.getSerializer()); mapSerializer.write(buffer, fieldValue); @@ -291,7 +291,7 @@ public final class CompatibleSerializer<T> extends CompatibleSerializerBase<T> { // following write is consistent with `BaseSeqCodecBuilder.serializeForMap` ClassInfo classInfo = fieldInfo.getClassInfo(fieldValue.getClass()); classResolver.writeClassInfo(buffer, classInfo); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); try { mapSerializer.setValueSerializer(valueClassInfo.getSerializer()); mapSerializer.write(buffer, fieldValue); diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractCollectionSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java similarity index 98% rename from java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractCollectionSerializer.java rename to java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java index 561f5ac98..29568d4d1 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractCollectionSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java @@ -39,7 +39,7 @@ import org.apache.fory.util.Preconditions; * Serializer for all collection like object. All collection serializer should extend this class. */ @SuppressWarnings({"unchecked", "rawtypes"}) -public abstract class AbstractCollectionSerializer<T> extends Serializer<T> { +public abstract class CollectionLikeSerializer<T> extends Serializer<T> { private MethodHandle constructor; private int numElements; protected final boolean supportCodegenHook; @@ -58,11 +58,11 @@ public abstract class AbstractCollectionSerializer<T> extends Serializer<T> { // interpreter and jit mode although it seems unnecessary. // With elements header, we can write this element class only once, the cost won't be too much. - public AbstractCollectionSerializer(Fory fory, Class<T> cls) { + public CollectionLikeSerializer(Fory fory, Class<T> cls) { this(fory, cls, !ReflectionUtils.isDynamicGeneratedCLass(cls)); } - public AbstractCollectionSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook) { + public CollectionLikeSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook) { super(fory, cls); this.supportCodegenHook = supportCodegenHook; elementClassInfoHolder = fory.getClassResolver().nilClassInfoHolder(); @@ -70,7 +70,7 @@ public abstract class AbstractCollectionSerializer<T> extends Serializer<T> { binding = SerializationBinding.createBinding(fory); } - public AbstractCollectionSerializer( + public CollectionLikeSerializer( Fory fory, Class<T> cls, boolean supportCodegenHook, boolean immutable) { super(fory, cls, immutable); this.supportCodegenHook = supportCodegenHook; diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializer.java index 97496aa0a..517577506 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializer.java @@ -26,7 +26,7 @@ import org.apache.fory.util.Preconditions; /** Base serializer for all java collections. */ @SuppressWarnings({"unchecked", "rawtypes"}) -public class CollectionSerializer<T extends Collection> extends AbstractCollectionSerializer<T> { +public class CollectionSerializer<T extends Collection> extends CollectionLikeSerializer<T> { public CollectionSerializer(Fory fory, Class<T> type) { super(fory, type); } diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java index c77d01b56..fa0b2ce7c 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java @@ -457,8 +457,7 @@ public class CollectionSerializers { @Override public Collection newCollection(MemoryBuffer buffer) { final ClassInfo mapClassInfo = fory.getClassResolver().readClassInfo(buffer); - final AbstractMapSerializer mapSerializer = - (AbstractMapSerializer) mapClassInfo.getSerializer(); + final MapLikeSerializer mapSerializer = (MapLikeSerializer) mapClassInfo.getSerializer(); RefResolver refResolver = fory.getRefResolver(); // It's possible that elements or nested fields has circular ref to set. int refId = refResolver.lastPreservedRefId(); @@ -487,8 +486,8 @@ public class CollectionSerializers { assert !fory.isCrossLanguage(); Map<?, Boolean> map = (Map<?, Boolean>) Platform.getObject(originCollection, MAP_FIELD_OFFSET); - AbstractMapSerializer mapSerializer = - (AbstractMapSerializer) fory.getClassResolver().getSerializer(map.getClass()); + MapLikeSerializer mapSerializer = + (MapLikeSerializer) fory.getClassResolver().getSerializer(map.getClass()); Map newMap = mapSerializer.newMap(map); return Collections.newSetFromMap(newMap); } @@ -497,7 +496,7 @@ public class CollectionSerializers { public Collection onCollectionWrite(MemoryBuffer buffer, Set<?> value) { final Map<?, Boolean> map = (Map<?, Boolean>) Platform.getObject(value, MAP_FIELD_OFFSET); final ClassInfo classInfo = fory.getClassResolver().getClassInfo(map.getClass()); - AbstractMapSerializer mapSerializer = (AbstractMapSerializer) classInfo.getSerializer(); + MapLikeSerializer mapSerializer = (MapLikeSerializer) classInfo.getSerializer(); fory.getClassResolver().writeClassInfo(buffer, classInfo); if (mapSerializer.supportCodegenHook) { buffer.writeBoolean(true); @@ -686,8 +685,7 @@ public class CollectionSerializers { * serializer won't use element generics and doesn't support JIT, performance won't be the best, * but the correctness can be ensured. */ - public static final class DefaultJavaCollectionSerializer<T> - extends AbstractCollectionSerializer<T> { + public static final class DefaultJavaCollectionSerializer<T> extends CollectionLikeSerializer<T> { private Serializer<T> dataSerializer; public DefaultJavaCollectionSerializer(Fory fory, Class<T> cls) { @@ -734,7 +732,7 @@ public class CollectionSerializers { /** Collection serializer for class with JDK custom serialization methods defined. */ public static final class JDKCompatibleCollectionSerializer<T> - extends AbstractCollectionSerializer<T> { + extends CollectionLikeSerializer<T> { private final Serializer serializer; public JDKCompatibleCollectionSerializer(Fory fory, Class<T> cls) { diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractMapSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapLikeSerializer.java similarity index 99% rename from java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractMapSerializer.java rename to java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapLikeSerializer.java index c3866bf88..c7aa2c59d 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/AbstractMapSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapLikeSerializer.java @@ -55,7 +55,7 @@ import org.apache.fory.type.TypeUtils; /** Serializer for all map-like objects. */ @SuppressWarnings({"unchecked", "rawtypes"}) -public abstract class AbstractMapSerializer<T> extends Serializer<T> { +public abstract class MapLikeSerializer<T> extends Serializer<T> { public static final int MAX_CHUNK_SIZE = 255; protected MethodHandle constructor; @@ -83,16 +83,15 @@ public abstract class AbstractMapSerializer<T> extends Serializer<T> { private final TypeResolver typeResolver; protected final SerializationBinding binding; - public AbstractMapSerializer(Fory fory, Class<T> cls) { + public MapLikeSerializer(Fory fory, Class<T> cls) { this(fory, cls, !ReflectionUtils.isDynamicGeneratedCLass(cls)); } - public AbstractMapSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook) { + public MapLikeSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook) { this(fory, cls, supportCodegenHook, false); } - public AbstractMapSerializer( - Fory fory, Class<T> cls, boolean supportCodegenHook, boolean immutable) { + public MapLikeSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook, boolean immutable) { super(fory, cls, immutable); this.typeResolver = fory.isCrossLanguage() ? fory.getXtypeResolver() : fory.getClassResolver(); this.supportCodegenHook = supportCodegenHook; diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializer.java index ab3010ff4..8a648f5d8 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializer.java @@ -25,7 +25,7 @@ import org.apache.fory.memory.MemoryBuffer; /** Base serializer for all java maps. */ @SuppressWarnings({"unchecked", "rawtypes"}) -public class MapSerializer<T extends Map> extends AbstractMapSerializer<T> { +public class MapSerializer<T extends Map> extends MapLikeSerializer<T> { public MapSerializer(Fory fory, Class<T> cls) { super(fory, cls); } diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java index 520be2d8c..1b7112813 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java @@ -377,7 +377,7 @@ public class MapSerializers { * won't use element generics and doesn't support JIT, performance won't be the best, but the * correctness can be ensured. */ - public static final class DefaultJavaMapSerializer<T> extends AbstractMapSerializer<T> { + public static final class DefaultJavaMapSerializer<T> extends MapLikeSerializer<T> { private Serializer<T> dataSerializer; public DefaultJavaMapSerializer(Fory fory, Class<T> cls) { @@ -427,7 +427,7 @@ public class MapSerializers { } /** Map serializer for class with JDK custom serialization methods defined. */ - public static class JDKCompatibleMapSerializer<T> extends AbstractMapSerializer<T> { + public static class JDKCompatibleMapSerializer<T> extends MapLikeSerializer<T> { private final Serializer serializer; public JDKCompatibleMapSerializer(Fory fory, Class<T> cls) { diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonCollectionSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonCollectionSerializer.java index 7b4c5a612..548ab6521 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonCollectionSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonCollectionSerializer.java @@ -24,7 +24,7 @@ import java.util.Collection; import org.apache.fory.Fory; import org.apache.fory.memory.MemoryBuffer; import org.apache.fory.memory.Platform; -import org.apache.fory.serializer.collection.AbstractCollectionSerializer; +import org.apache.fory.serializer.collection.CollectionLikeSerializer; import org.apache.fory.util.GraalvmSupport; import org.apache.fory.util.Preconditions; @@ -34,7 +34,7 @@ import org.apache.fory.util.Preconditions; * an object. */ @SuppressWarnings("rawtypes") -public class SingletonCollectionSerializer extends AbstractCollectionSerializer { +public class SingletonCollectionSerializer extends CollectionLikeSerializer { private final Field field; private Object base = null; private long offset = -1; diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonMapSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonMapSerializer.java index 35a3803d2..07b954f95 100644 --- a/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonMapSerializer.java +++ b/java/fory-core/src/main/java/org/apache/fory/serializer/scala/SingletonMapSerializer.java @@ -24,7 +24,7 @@ import java.util.Map; import org.apache.fory.Fory; import org.apache.fory.memory.MemoryBuffer; import org.apache.fory.memory.Platform; -import org.apache.fory.serializer.collection.AbstractMapSerializer; +import org.apache.fory.serializer.collection.MapLikeSerializer; import org.apache.fory.util.GraalvmSupport; import org.apache.fory.util.Preconditions; @@ -34,7 +34,7 @@ import org.apache.fory.util.Preconditions; * object. */ @SuppressWarnings("rawtypes") -public class SingletonMapSerializer extends AbstractMapSerializer { +public class SingletonMapSerializer extends MapLikeSerializer { private final Field field; private Object base = null; private long offset = -1; diff --git a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/CollectionSerializer.kt b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/CollectionSerializer.kt index 328273785..6eb8b9175 100644 --- a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/CollectionSerializer.kt +++ b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/CollectionSerializer.kt @@ -21,14 +21,14 @@ package org.apache.fory.serializer.kotlin import org.apache.fory.Fory import org.apache.fory.memory.MemoryBuffer -import org.apache.fory.serializer.collection.AbstractCollectionSerializer +import org.apache.fory.serializer.collection.CollectionLikeSerializer /** Serializer for kotlin collections. */ @Suppress("UNCHECKED_CAST") public abstract class AbstractKotlinCollectionSerializer<E, T : Iterable<E>>( fory: Fory, cls: Class<T> -) : AbstractCollectionSerializer<T>(fory, cls) { +) : CollectionLikeSerializer<T>(fory, cls) { abstract override fun onCollectionWrite(buffer: MemoryBuffer, value: T): Collection<E> override fun read(buffer: MemoryBuffer): T { diff --git a/scala/src/main/scala/org/apache/fory/serializer/scala/CollectionSerializer.scala b/scala/src/main/scala/org/apache/fory/serializer/scala/CollectionSerializer.scala index cbae7546d..b9274a1ec 100644 --- a/scala/src/main/scala/org/apache/fory/serializer/scala/CollectionSerializer.scala +++ b/scala/src/main/scala/org/apache/fory/serializer/scala/CollectionSerializer.scala @@ -21,7 +21,7 @@ package org.apache.fory.serializer.scala import org.apache.fory.Fory import org.apache.fory.memory.MemoryBuffer -import org.apache.fory.serializer.collection.AbstractCollectionSerializer +import org.apache.fory.serializer.collection.CollectionLikeSerializer import java.util import scala.collection.{Factory, Iterable, mutable} @@ -44,7 +44,7 @@ import scala.collection.{Factory, Iterable, mutable} * <li>`onCollectionRead`: create scala collection from builder.</li> */ abstract class AbstractScalaCollectionSerializer[A, T <: Iterable[A]](fory: Fory, cls: Class[T]) - extends AbstractCollectionSerializer[T](fory, cls) { + extends CollectionLikeSerializer[T](fory, cls) { override def onCollectionWrite(buffer: MemoryBuffer, value: T): util.Collection[_] override def read(buffer: MemoryBuffer): T = { diff --git a/scala/src/main/scala/org/apache/fory/serializer/scala/MapSerializer.scala b/scala/src/main/scala/org/apache/fory/serializer/scala/MapSerializer.scala index b8f577825..b528ade55 100644 --- a/scala/src/main/scala/org/apache/fory/serializer/scala/MapSerializer.scala +++ b/scala/src/main/scala/org/apache/fory/serializer/scala/MapSerializer.scala @@ -22,7 +22,7 @@ package org.apache.fory.serializer.scala import org.apache.fory.Fory import org.apache.fory.collection.MapEntry import org.apache.fory.memory.MemoryBuffer -import org.apache.fory.serializer.collection.AbstractMapSerializer +import org.apache.fory.serializer.collection.MapLikeSerializer import java.util import scala.collection.{Factory, mutable} @@ -45,7 +45,7 @@ import scala.collection.{Factory, mutable} * <li>`onMapRead`: create scala map from builder.</li> */ abstract class AbstractScalaMapSerializer[K, V, T](fory: Fory, cls: Class[T]) - extends AbstractMapSerializer[T](fory, cls) { + extends MapLikeSerializer[T](fory, cls) { def onMapWrite(buffer: MemoryBuffer, value: T): util.Map[_, _] override def read(buffer: MemoryBuffer): T = { diff --git a/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala b/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala index 5425a518a..32b672277 100644 --- a/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala +++ b/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala @@ -23,7 +23,7 @@ import org.apache.fory.Fory import org.apache.fory.memory.MemoryBuffer import org.apache.fory.reflect.FieldAccessor import org.apache.fory.serializer.Serializer -import org.apache.fory.serializer.collection.AbstractCollectionSerializer +import org.apache.fory.serializer.collection.CollectionLikeSerializer import org.apache.fory.util.unsafe._JDKAccess import java.lang.invoke.{MethodHandle, MethodHandles} @@ -31,7 +31,7 @@ import java.util import scala.collection.immutable.NumericRange class RangeSerializer[T <: Range](fory: Fory, cls: Class[T]) - extends AbstractCollectionSerializer[T](fory, cls, false) { + extends CollectionLikeSerializer[T](fory, cls, false) { override def write(buffer: MemoryBuffer, value: T): Unit = { buffer.writeVarInt32(value.start) @@ -66,7 +66,7 @@ private object RangeUtils { class NumericRangeSerializer[A, T <: NumericRange[A]](fory: Fory, cls: Class[T]) - extends AbstractCollectionSerializer[T](fory, cls, false) { + extends CollectionLikeSerializer[T](fory, cls, false) { private val ctr = RangeUtils.lookupCache.get(cls) private val getter = FieldAccessor.createAccessor(cls.getDeclaredFields.find(f => f.getType == classOf[Integral[?]]).get) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
