You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fury.apache.org by ch...@apache.org on 2024/05/03 06:24:32 UTC
(incubator-fury) 01/01: make enum serializer as an upper level class
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 <sh...@gmail.com>
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: commits-unsubscribe@fury.apache.org
For additional commands, e-mail: commits-help@fury.apache.org