This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch make_enum_serializer_as_an_upperlevel_class in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
commit 18017ca6204418de896dc17d43b43f34cfc4e9ce Author: chaokunyang <[email protected]> AuthorDate: Fri May 3 14:23:50 2024 +0800 make enum serializer as an upper level class --- .../fury/builder/BaseObjectCodecBuilder.java | 4 +- .../org/apache/fury/resolver/ClassResolver.java | 5 +- .../org/apache/fury/serializer/EnumSerializer.java | 53 +++++++++++++++++ .../org/apache/fury/serializer/Serializers.java | 29 --------- .../src/test/java/org/apache/fury/FuryTest.java | 18 +++--- .../apache/fury/serializer/EnumSerializerTest.java | 69 ++++++++++++++++++++++ .../apache/fury/serializer/SerializersTest.java | 33 ----------- 7 files changed, 136 insertions(+), 75 deletions(-) diff --git a/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java b/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java index 4dd315d2..5cce3228 100644 --- a/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java +++ b/java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java @@ -87,10 +87,10 @@ import org.apache.fury.resolver.ClassInfoHolder; import org.apache.fury.resolver.ClassResolver; import org.apache.fury.resolver.RefResolver; import org.apache.fury.serializer.CompatibleSerializer; +import org.apache.fury.serializer.EnumSerializer; import org.apache.fury.serializer.ObjectSerializer; import org.apache.fury.serializer.PrimitiveSerializers.LongSerializer; import org.apache.fury.serializer.Serializer; -import org.apache.fury.serializer.Serializers; import org.apache.fury.serializer.StringSerializer; import org.apache.fury.serializer.collection.AbstractCollectionSerializer; import org.apache.fury.serializer.collection.AbstractMapSerializer; @@ -280,7 +280,7 @@ public abstract class BaseObjectCodecBuilder extends CodecBuilder { Fury.class, MemoryBuffer.class, fury.getRefResolver().getClass(), Platform.class); ctx.addImports(ClassInfo.class, ClassInfoHolder.class, ClassResolver.class); ctx.addImport(Generated.class); - ctx.addImports(LazyInitBeanSerializer.class, Serializers.EnumSerializer.class); + ctx.addImports(LazyInitBeanSerializer.class, EnumSerializer.class); ctx.addImports(Serializer.class, StringSerializer.class); ctx.addImports(ObjectSerializer.class, CompatibleSerializer.class); ctx.addImports(AbstractCollectionSerializer.class, AbstractMapSerializer.class); diff --git a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java index 7e45b1a0..e0d596ff 100644 --- a/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java +++ b/java/fury-core/src/main/java/org/apache/fury/resolver/ClassResolver.java @@ -107,6 +107,7 @@ import org.apache.fury.serializer.ArraySerializers.UnexistedEnumArrayClassSerial import org.apache.fury.serializer.BufferSerializers; import org.apache.fury.serializer.CodegenSerializer.LazyInitBeanSerializer; import org.apache.fury.serializer.CompatibleSerializer; +import org.apache.fury.serializer.EnumSerializer; import org.apache.fury.serializer.ExternalizableSerializer; import org.apache.fury.serializer.JavaSerializer; import org.apache.fury.serializer.JdkProxySerializer; @@ -805,10 +806,10 @@ public class ClassResolver { return classInfo.serializer.getClass(); } else { if (cls.isEnum()) { - return Serializers.EnumSerializer.class; + return EnumSerializer.class; } else if (Enum.class.isAssignableFrom(cls) && cls != Enum.class) { // handles an enum value that is an inner class. Eg: enum A {b{}}; - return Serializers.EnumSerializer.class; + return EnumSerializer.class; } else if (EnumSet.class.isAssignableFrom(cls)) { return CollectionSerializers.EnumSetSerializer.class; } else if (Charset.class.isAssignableFrom(cls)) { diff --git a/java/fury-core/src/main/java/org/apache/fury/serializer/EnumSerializer.java b/java/fury-core/src/main/java/org/apache/fury/serializer/EnumSerializer.java new file mode 100644 index 00000000..634fffbe --- /dev/null +++ b/java/fury-core/src/main/java/org/apache/fury/serializer/EnumSerializer.java @@ -0,0 +1,53 @@ +/* + * 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 + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fury.serializer; + +import org.apache.fury.Fury; +import org.apache.fury.memory.MemoryBuffer; +import org.apache.fury.util.Preconditions; + +@SuppressWarnings("rawtypes") +public final class EnumSerializer extends Serializer<Enum> { + private final Enum[] enumConstants; + + public EnumSerializer(Fury fury, Class<Enum> cls) { + super(fury, cls, false); + if (cls.isEnum()) { + enumConstants = cls.getEnumConstants(); + } else { + Preconditions.checkArgument(Enum.class.isAssignableFrom(cls) && cls != Enum.class); + @SuppressWarnings("unchecked") + Class<Enum> enclosingClass = (Class<Enum>) cls.getEnclosingClass(); + Preconditions.checkNotNull(enclosingClass); + Preconditions.checkArgument(enclosingClass.isEnum()); + enumConstants = enclosingClass.getEnumConstants(); + } + } + + @Override + public void write(MemoryBuffer buffer, Enum value) { + buffer.writeVarUint32Small7(value.ordinal()); + } + + @Override + public Enum read(MemoryBuffer buffer) { + return enumConstants[buffer.readVarUint32Small7()]; + } +} diff --git a/java/fury-core/src/main/java/org/apache/fury/serializer/Serializers.java b/java/fury-core/src/main/java/org/apache/fury/serializer/Serializers.java index 7e1bab63..3dbd70eb 100644 --- a/java/fury-core/src/main/java/org/apache/fury/serializer/Serializers.java +++ b/java/fury-core/src/main/java/org/apache/fury/serializer/Serializers.java @@ -51,7 +51,6 @@ import org.apache.fury.resolver.ClassResolver; import org.apache.fury.type.Type; import org.apache.fury.util.ExceptionUtils; import org.apache.fury.util.GraalvmSupport; -import org.apache.fury.util.Preconditions; import org.apache.fury.util.unsafe._JDKAccess; /** Serialization utils and common serializers. */ @@ -303,34 +302,6 @@ public class Serializers { } } - public static final class EnumSerializer extends Serializer<Enum> { - private final Enum[] enumConstants; - - public EnumSerializer(Fury fury, Class<Enum> cls) { - super(fury, cls, false); - if (cls.isEnum()) { - enumConstants = cls.getEnumConstants(); - } else { - Preconditions.checkArgument(Enum.class.isAssignableFrom(cls) && cls != Enum.class); - @SuppressWarnings("unchecked") - Class<Enum> enclosingClass = (Class<Enum>) cls.getEnclosingClass(); - Preconditions.checkNotNull(enclosingClass); - Preconditions.checkArgument(enclosingClass.isEnum()); - enumConstants = enclosingClass.getEnumConstants(); - } - } - - @Override - public void write(MemoryBuffer buffer, Enum value) { - buffer.writeVarUint32Small7(value.ordinal()); - } - - @Override - public Enum read(MemoryBuffer buffer) { - return enumConstants[buffer.readVarUint32Small7()]; - } - } - public static final class BigDecimalSerializer extends Serializer<BigDecimal> { public BigDecimalSerializer(Fury fury) { super(fury, BigDecimal.class); diff --git a/java/fury-core/src/test/java/org/apache/fury/FuryTest.java b/java/fury-core/src/test/java/org/apache/fury/FuryTest.java index 0b15c48e..072ff9f6 100644 --- a/java/fury-core/src/test/java/org/apache/fury/FuryTest.java +++ b/java/fury-core/src/test/java/org/apache/fury/FuryTest.java @@ -62,9 +62,9 @@ import org.apache.fury.memory.MemoryBuffer; import org.apache.fury.memory.MemoryUtils; import org.apache.fury.memory.Platform; import org.apache.fury.serializer.ArraySerializersTest; +import org.apache.fury.serializer.EnumSerializerTest; import org.apache.fury.serializer.ObjectSerializer; import org.apache.fury.serializer.Serializer; -import org.apache.fury.serializer.SerializersTest; import org.apache.fury.test.bean.BeanA; import org.apache.fury.test.bean.Struct; import org.apache.fury.type.Descriptor; @@ -114,12 +114,12 @@ public class FuryTest extends FuryTestBase { assertEquals("str", serDe(fury1, fury2, "str")); assertEquals("str", serDe(fury1, fury2, new StringBuilder("str")).toString()); assertEquals("str", serDe(fury1, fury2, new StringBuffer("str")).toString()); - assertEquals(SerializersTest.EnumFoo.A, serDe(fury1, fury2, SerializersTest.EnumFoo.A)); - assertEquals(SerializersTest.EnumFoo.B, serDe(fury1, fury2, SerializersTest.EnumFoo.B)); + assertEquals(EnumSerializerTest.EnumFoo.A, serDe(fury1, fury2, EnumSerializerTest.EnumFoo.A)); + assertEquals(EnumSerializerTest.EnumFoo.B, serDe(fury1, fury2, EnumSerializerTest.EnumFoo.B)); assertEquals( - SerializersTest.EnumSubClass.A, serDe(fury1, fury2, SerializersTest.EnumSubClass.A)); + EnumSerializerTest.EnumSubClass.A, serDe(fury1, fury2, EnumSerializerTest.EnumSubClass.A)); assertEquals( - SerializersTest.EnumSubClass.B, serDe(fury1, fury2, SerializersTest.EnumSubClass.B)); + EnumSerializerTest.EnumSubClass.B, serDe(fury1, fury2, EnumSerializerTest.EnumSubClass.B)); assertEquals(BigInteger.valueOf(100), serDe(fury1, fury2, BigInteger.valueOf(100))); assertEquals(BigDecimal.valueOf(100, 2), serDe(fury1, fury2, BigDecimal.valueOf(100, 2))); java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis()); @@ -191,11 +191,11 @@ public class FuryTest extends FuryTestBase { assertEquals("str", serDeCheckIndex(fury1, fury2, buffer, "str")); assertEquals("str", serDeCheckIndex(fury1, fury2, buffer, new StringBuilder("str")).toString()); assertEquals( - SerializersTest.EnumFoo.A, - serDeCheckIndex(fury1, fury2, buffer, SerializersTest.EnumFoo.A)); + EnumSerializerTest.EnumFoo.A, + serDeCheckIndex(fury1, fury2, buffer, EnumSerializerTest.EnumFoo.A)); assertEquals( - SerializersTest.EnumSubClass.A, - serDeCheckIndex(fury1, fury2, buffer, SerializersTest.EnumSubClass.A)); + EnumSerializerTest.EnumSubClass.A, + serDeCheckIndex(fury1, fury2, buffer, EnumSerializerTest.EnumSubClass.A)); assertTrue( Arrays.equals( new boolean[] {false, true}, diff --git a/java/fury-core/src/test/java/org/apache/fury/serializer/EnumSerializerTest.java b/java/fury-core/src/test/java/org/apache/fury/serializer/EnumSerializerTest.java new file mode 100644 index 00000000..2fc2768f --- /dev/null +++ b/java/fury-core/src/test/java/org/apache/fury/serializer/EnumSerializerTest.java @@ -0,0 +1,69 @@ +/* + * 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 + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fury.serializer; + +import static org.testng.Assert.*; + +import org.apache.fury.Fury; +import org.apache.fury.FuryTestBase; +import org.apache.fury.config.FuryBuilder; +import org.apache.fury.config.Language; +import org.testng.annotations.Test; + +public class EnumSerializerTest extends FuryTestBase { + + @Test + public void testWrite() {} + + public enum EnumFoo { + A, + B + } + + public enum EnumSubClass { + A { + @Override + void f() {} + }, + B { + @Override + void f() {} + }; + + abstract void f(); + } + + @Test(dataProvider = "crossLanguageReferenceTrackingConfig") + public void testEnumSerialization(boolean referenceTracking, Language language) { + FuryBuilder builder = + Fury.builder() + .withLanguage(language) + .withRefTracking(referenceTracking) + .requireClassRegistration(false); + Fury fury1 = builder.build(); + Fury fury2 = builder.build(); + assertEquals(EnumSerializerTest.EnumFoo.A, serDe(fury1, fury2, EnumSerializerTest.EnumFoo.A)); + assertEquals(EnumSerializerTest.EnumFoo.B, serDe(fury1, fury2, EnumSerializerTest.EnumFoo.B)); + assertEquals( + EnumSerializerTest.EnumSubClass.A, serDe(fury1, fury2, EnumSerializerTest.EnumSubClass.A)); + assertEquals( + EnumSerializerTest.EnumSubClass.B, serDe(fury1, fury2, EnumSerializerTest.EnumSubClass.B)); + } +} diff --git a/java/fury-core/src/test/java/org/apache/fury/serializer/SerializersTest.java b/java/fury-core/src/test/java/org/apache/fury/serializer/SerializersTest.java index 4552ef0f..fd72cb8f 100644 --- a/java/fury-core/src/test/java/org/apache/fury/serializer/SerializersTest.java +++ b/java/fury-core/src/test/java/org/apache/fury/serializer/SerializersTest.java @@ -61,39 +61,6 @@ public class SerializersTest extends FuryTestBase { assertEquals("str", serDe(fury1, fury2, new StringBuffer("str")).toString()); } - public enum EnumFoo { - A, - B - } - - public enum EnumSubClass { - A { - @Override - void f() {} - }, - B { - @Override - void f() {} - }; - - abstract void f(); - } - - @Test(dataProvider = "crossLanguageReferenceTrackingConfig") - public void testEnumSerialization(boolean referenceTracking, Language language) { - FuryBuilder builder = - Fury.builder() - .withLanguage(language) - .withRefTracking(referenceTracking) - .requireClassRegistration(false); - Fury fury1 = builder.build(); - Fury fury2 = builder.build(); - assertEquals(EnumFoo.A, serDe(fury1, fury2, EnumFoo.A)); - assertEquals(EnumFoo.B, serDe(fury1, fury2, EnumFoo.B)); - assertEquals(EnumSubClass.A, serDe(fury1, fury2, EnumSubClass.A)); - assertEquals(EnumSubClass.B, serDe(fury1, fury2, EnumSubClass.B)); - } - @Test(dataProvider = "crossLanguageReferenceTrackingConfig") public void testBigInt(boolean referenceTracking, Language language) { FuryBuilder builder = --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
