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]

Reply via email to