This is an automated email from the ASF dual-hosted git repository.

chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fury.git


The following commit(s) were added to refs/heads/main by this push:
     new a221ec05 chore(java): Use `crossLanguage` instead of `language` in 
Fory (#2274)
a221ec05 is described below

commit a221ec0590f9573bc1de4d0d339bf075901d5c8b
Author: Cherish 蔡梦缘 <[email protected]>
AuthorDate: Mon Jun 2 15:50:21 2025 +0800

    chore(java): Use `crossLanguage` instead of `language` in Fory (#2274)
    
    ## What does this PR do?
    The Fory class fields `language` and `crossLanguage` are redundant and
    can be quickly determined using `crossLanguage` without the need for
    `language`.
---
 .../src/main/java/org/apache/fory/Fory.java        | 46 ++++++++++------------
 .../java/org/apache/fory/resolver/ClassInfo.java   |  3 +-
 .../org/apache/fory/resolver/ClassResolver.java    |  9 ++---
 .../org/apache/fory/serializer/Serializer.java     |  7 ++--
 .../collection/CollectionSerializers.java          |  6 +--
 .../fory/serializer/collection/MapSerializers.java |  5 +--
 .../serializer/collection/SubListSerializers.java  |  5 +--
 .../src/test/java/org/apache/fory/ForyTest.java    |  2 +-
 .../apache/fory/serializer/EnumSerializerTest.java |  2 +-
 .../fory/format/vectorized/ArrowSerializers.java   |  3 +-
 10 files changed, 38 insertions(+), 50 deletions(-)

diff --git a/java/fory-core/src/main/java/org/apache/fory/Fory.java 
b/java/fory-core/src/main/java/org/apache/fory/Fory.java
index 9b097b16..a2840ef5 100644
--- a/java/fory-core/src/main/java/org/apache/fory/Fory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/Fory.java
@@ -113,7 +113,6 @@ public final class Fory implements BaseFory {
   private final StringSerializer stringSerializer;
   private final ArrayListSerializer arrayListSerializer;
   private final HashMapSerializer hashMapSerializer;
-  private final Language language;
   private final boolean crossLanguage;
   private final boolean compressInt;
   private final LongEncoding longEncoding;
@@ -132,8 +131,7 @@ public final class Fory implements BaseFory {
     // Avoid set classLoader in `ForyBuilder`, which won't be clear when
     // `org.apache.fory.ThreadSafeFory.clearClassLoader` is called.
     config = new Config(builder);
-    this.language = config.getLanguage();
-    crossLanguage = language != Language.JAVA;
+    crossLanguage = config.getLanguage() != Language.JAVA;
     this.refTracking = config.trackingRef();
     this.copyRefTracking = config.copyRef();
     this.shareMeta = config.isMetaShareEnabled();
@@ -148,7 +146,7 @@ public final class Fory implements BaseFory {
     generics = new Generics(this);
     metaStringResolver = new MetaStringResolver();
     classResolver = new ClassResolver(this);
-    if (language != Language.JAVA) {
+    if (crossLanguage) {
       xtypeResolver = new XtypeResolver(this);
     } else {
       xtypeResolver = null;
@@ -169,7 +167,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void register(Class<?> cls) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.register(cls);
     } else {
       xtypeResolver.register(cls);
@@ -178,7 +176,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void register(Class<?> cls, int id) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.register(cls, id);
     } else {
       xtypeResolver.register(cls, id);
@@ -187,7 +185,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void register(Class<?> cls, boolean createSerializer) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.register(cls, createSerializer);
     } else {
       xtypeResolver.register(cls);
@@ -196,7 +194,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void register(Class<?> cls, int id, boolean createSerializer) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.register(cls, id, createSerializer);
     } else {
       xtypeResolver.register(cls, id);
@@ -215,7 +213,7 @@ public final class Fory implements BaseFory {
   }
 
   public void register(Class<?> cls, String namespace, String typeName) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.register(cls, namespace, typeName);
     } else {
       xtypeResolver.register(cls, namespace, typeName);
@@ -224,7 +222,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public <T> void registerSerializer(Class<T> type, Class<? extends 
Serializer> serializerClass) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.registerSerializer(type, serializerClass);
     } else {
       xtypeResolver.registerSerializer(type, serializerClass);
@@ -233,7 +231,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void registerSerializer(Class<?> type, Serializer<?> serializer) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.registerSerializer(type, serializer);
     } else {
       xtypeResolver.registerSerializer(type, serializer);
@@ -242,7 +240,7 @@ public final class Fory implements BaseFory {
 
   @Override
   public void registerSerializer(Class<?> type, Function<Fory, Serializer<?>> 
serializerCreator) {
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       classResolver.registerSerializer(type, serializerCreator.apply(this));
     } else {
       xtypeResolver.registerSerializer(type, serializerCreator.apply(this));
@@ -260,7 +258,7 @@ public final class Fory implements BaseFory {
 
   public <T> Serializer<T> getSerializer(Class<T> cls) {
     Preconditions.checkNotNull(cls);
-    if (language == Language.JAVA) {
+    if (!crossLanguage) {
       return classResolver.getSerializer(cls);
     } else {
       return xtypeResolver.getClassInfo(cls).getSerializer();
@@ -301,11 +299,11 @@ public final class Fory implements BaseFory {
 
   @Override
   public MemoryBuffer serialize(MemoryBuffer buffer, Object obj, 
BufferCallback callback) {
-    if (language == Language.XLANG) {
+    if (crossLanguage) {
       buffer.writeInt16(MAGIC_NUMBER);
     }
     byte bitmap = BITMAP;
-    if (language != Language.JAVA) {
+    if (crossLanguage) {
       bitmap |= isCrossLanguageFlag;
     }
     if (obj == null) {
@@ -323,7 +321,7 @@ public final class Fory implements BaseFory {
       if (depth != 0) {
         throwDepthSerializationException();
       }
-      if (language == Language.JAVA) {
+      if (!crossLanguage) {
         write(buffer, obj);
       } else {
         xwrite(buffer, obj);
@@ -675,7 +673,7 @@ public final class Fory implements BaseFory {
       // write aligned length so that later buffer copy happen on aligned 
offset, which will be more
       // efficient
       // TODO(chaokunyang) Remove branch when other languages support aligned 
varint.
-      if (language == Language.JAVA) {
+      if (!crossLanguage) {
         buffer.writeVarUint32Aligned(totalBytes);
       } else {
         buffer.writeVarUint32(totalBytes);
@@ -699,7 +697,7 @@ public final class Fory implements BaseFory {
       // write aligned length so that later buffer copy happen on aligned 
offset, which will be very
       // efficient
       // TODO(chaokunyang) Remove branch when other languages support aligned 
varint.
-      if (language == Language.JAVA) {
+      if (!crossLanguage) {
         buffer.writeVarUint32Aligned(totalBytes);
       } else {
         buffer.writeVarUint32(totalBytes);
@@ -715,7 +713,7 @@ public final class Fory implements BaseFory {
     if (inBand) {
       int size;
       // TODO(chaokunyang) Remove branch when other languages support aligned 
varint.
-      if (language == Language.JAVA) {
+      if (!crossLanguage) {
         size = buffer.readAlignedVarUint();
       } else {
         size = buffer.readVarUint32();
@@ -841,7 +839,7 @@ public final class Fory implements BaseFory {
       if (depth != 0) {
         throwDepthDeserializationException();
       }
-      if (language == Language.XLANG) {
+      if (crossLanguage) {
         short magicNumber = buffer.readInt16();
         assert magicNumber == MAGIC_NUMBER
             : String.format(
@@ -1597,7 +1595,7 @@ public final class Fory implements BaseFory {
   }
 
   private void throwDepthSerializationException() {
-    String method = "Fory#" + (language != Language.JAVA ? "x" : "") + 
"writeXXX";
+    String method = "Fory#" + (crossLanguage ? "x" : "") + "writeXXX";
     throw new IllegalStateException(
         String.format(
             "Nested call Fory.serializeXXX is not allowed when serializing, 
Please use %s instead",
@@ -1605,7 +1603,7 @@ public final class Fory implements BaseFory {
   }
 
   private void throwDepthDeserializationException() {
-    String method = "Fory#" + (language != Language.JAVA ? "x" : "") + 
"readXXX";
+    String method = "Fory#" + (crossLanguage ? "x" : "") + "readXXX";
     throw new IllegalStateException(
         String.format(
             "Nested call Fory.deserializeXXX is not allowed when 
deserializing, Please use %s instead",
@@ -1676,10 +1674,6 @@ public final class Fory implements BaseFory {
     return classLoader;
   }
 
-  public Language getLanguage() {
-    return language;
-  }
-
   public boolean isCrossLanguage() {
     return crossLanguage;
   }
diff --git 
a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassInfo.java 
b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassInfo.java
index 6b0853b1..ef6b154b 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassInfo.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassInfo.java
@@ -24,7 +24,6 @@ import static org.apache.fory.meta.Encoders.PACKAGE_DECODER;
 import static org.apache.fory.meta.Encoders.TYPE_NAME_DECODER;
 
 import org.apache.fory.collection.Tuple2;
-import org.apache.fory.config.Language;
 import org.apache.fory.meta.ClassDef;
 import org.apache.fory.meta.Encoders;
 import org.apache.fory.meta.MetaString.Encoding;
@@ -83,7 +82,7 @@ public class ClassInfo {
     this.serializer = serializer;
     needToWriteClassDef = serializer != null && 
classResolver.needToWriteClassDef(serializer);
     MetaStringResolver metaStringResolver = 
classResolver.getMetaStringResolver();
-    if (cls != null && classResolver.getFory().getLanguage() != Language.JAVA) 
{
+    if (cls != null && classResolver.getFory().isCrossLanguage()) {
       this.fullNameBytes =
           metaStringResolver.getOrCreateMetaStringBytes(
               GENERIC_ENCODER.encode(cls.getName(), Encoding.UTF_8));
diff --git 
a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java 
b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
index 4e41b98b..2f04ad1f 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
@@ -737,8 +737,7 @@ public class ClassResolver implements TypeResolver {
    * @param serializer serializer for object of {@code type}
    */
   public void registerSerializer(Class<?> type, Serializer<?> serializer) {
-    if (!extRegistry.registeredClassIdMap.containsKey(type)
-        && fory.getLanguage() == Language.JAVA) {
+    if (!extRegistry.registeredClassIdMap.containsKey(type) && 
!fory.isCrossLanguage()) {
       register(type);
     }
     addSerializer(type, serializer);
@@ -997,7 +996,7 @@ public class ClassResolver implements TypeResolver {
         if (requireJavaSerialization(cls) || useReplaceResolveSerializer(cls)) 
{
           return CollectionSerializers.JDKCompatibleCollectionSerializer.class;
         }
-        if (fory.getLanguage() == Language.JAVA) {
+        if (!fory.isCrossLanguage()) {
           return CollectionSerializers.DefaultJavaCollectionSerializer.class;
         } else {
           return CollectionSerializer.class;
@@ -1011,13 +1010,13 @@ public class ClassResolver implements TypeResolver {
         if (requireJavaSerialization(cls) || useReplaceResolveSerializer(cls)) 
{
           return MapSerializers.JDKCompatibleMapSerializer.class;
         }
-        if (fory.getLanguage() == Language.JAVA) {
+        if (!fory.isCrossLanguage()) {
           return MapSerializers.DefaultJavaMapSerializer.class;
         } else {
           return MapSerializer.class;
         }
       }
-      if (fory.getLanguage() != Language.JAVA) {
+      if (fory.isCrossLanguage()) {
         LOG.warn("Class {} isn't supported for cross-language serialization.", 
cls);
       }
       if (useReplaceResolveSerializer(cls)) {
diff --git 
a/java/fory-core/src/main/java/org/apache/fory/serializer/Serializer.java 
b/java/fory-core/src/main/java/org/apache/fory/serializer/Serializer.java
index 076d5ae6..8a3e7fd2 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/Serializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/Serializer.java
@@ -21,7 +21,6 @@ package org.apache.fory.serializer;
 
 import javax.annotation.concurrent.NotThreadSafe;
 import org.apache.fory.Fory;
-import org.apache.fory.config.Language;
 import org.apache.fory.memory.MemoryBuffer;
 import org.apache.fory.type.TypeUtils;
 
@@ -74,7 +73,7 @@ public abstract class Serializer<T> {
   public Serializer(Fory fory, Class<T> type) {
     this.fory = fory;
     this.type = type;
-    this.isJava = fory.getLanguage() == Language.JAVA;
+    this.isJava = !fory.isCrossLanguage();
     if (fory.trackingRef()) {
       needToWriteRef = !TypeUtils.isBoxed(TypeUtils.wrap(type)) || 
!fory.isBasicTypesRefIgnored();
     } else {
@@ -87,7 +86,7 @@ public abstract class Serializer<T> {
   public Serializer(Fory fory, Class<T> type, boolean immutable) {
     this.fory = fory;
     this.type = type;
-    this.isJava = fory.getLanguage() == Language.JAVA;
+    this.isJava = !fory.isCrossLanguage();
     if (fory.trackingRef()) {
       needToWriteRef = !TypeUtils.isBoxed(TypeUtils.wrap(type)) || 
!fory.isBasicTypesRefIgnored();
     } else {
@@ -100,7 +99,7 @@ public abstract class Serializer<T> {
   public Serializer(Fory fory, Class<T> type, boolean needToWriteRef, boolean 
immutable) {
     this.fory = fory;
     this.type = type;
-    this.isJava = fory.getLanguage() == Language.JAVA;
+    this.isJava = !fory.isCrossLanguage();
     this.needToWriteRef = needToWriteRef;
     this.needToCopyRef = fory.copyTrackingRef() && !immutable;
     this.immutable = immutable;
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 35305177..c77d01b5 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
@@ -46,7 +46,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 import org.apache.fory.Fory;
-import org.apache.fory.config.Language;
 import org.apache.fory.exception.ForyException;
 import org.apache.fory.memory.MemoryBuffer;
 import org.apache.fory.memory.Platform;
@@ -694,8 +693,9 @@ public class CollectionSerializers {
     public DefaultJavaCollectionSerializer(Fory fory, Class<T> cls) {
       super(fory, cls, false);
       Preconditions.checkArgument(
-          fory.getLanguage() == Language.JAVA,
-          "Python default collection serializer should use " + 
CollectionSerializer.class);
+          !fory.isCrossLanguage(),
+          "Fory cross-language default collection serializer should use "
+              + CollectionSerializer.class);
       fory.getClassResolver().setSerializer(cls, this);
       Class<? extends Serializer> serializerClass =
           fory.getClassResolver()
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 99b9e0fe..520be2d8 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
@@ -33,7 +33,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentSkipListMap;
 import org.apache.fory.Fory;
 import org.apache.fory.collection.LazyMap;
-import org.apache.fory.config.Language;
 import org.apache.fory.memory.MemoryBuffer;
 import org.apache.fory.memory.Platform;
 import org.apache.fory.reflect.ReflectionUtils;
@@ -384,8 +383,8 @@ public class MapSerializers {
     public DefaultJavaMapSerializer(Fory fory, Class<T> cls) {
       super(fory, cls, false);
       Preconditions.checkArgument(
-          fory.getLanguage() == Language.JAVA,
-          "Python default map serializer should use " + MapSerializer.class);
+          !fory.isCrossLanguage(),
+          "Fory cross-language default map serializer should use " + 
MapSerializer.class);
       fory.getClassResolver().setSerializer(cls, this);
       Class<? extends Serializer> serializerClass =
           fory.getClassResolver()
diff --git 
a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
 
b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
index b00765fe..4cec75f4 100644
--- 
a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
+++ 
b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import org.apache.fory.Fory;
-import org.apache.fory.config.Language;
 import org.apache.fory.logging.Logger;
 import org.apache.fory.logging.LoggerFactory;
 import org.apache.fory.memory.MemoryBuffer;
@@ -70,7 +69,7 @@ public class SubListSerializers {
     // ImmutableCollectionSerializers
     for (Class<?> cls :
         new Class[] {SubListClass, RandomAccessSubListClass, 
ArrayListSubListClass}) {
-      if (fory.trackingRef() && preserveView && fory.getConfig().getLanguage() 
== Language.JAVA) {
+      if (fory.trackingRef() && preserveView && !fory.isCrossLanguage()) {
         classResolver.registerSerializer(cls, new SubListViewSerializer(fory, 
cls));
       } else {
         classResolver.registerSerializer(cls, new SubListSerializer(fory, 
(Class<List>) cls));
@@ -84,7 +83,7 @@ public class SubListSerializers {
 
     public SubListViewSerializer(Fory fory, Class cls) {
       super(fory, Stub.class.isAssignableFrom(cls) ? (Class<List>) 
ArrayListSubListClass : cls);
-      assert fory.getLanguage() == Language.JAVA;
+      assert !fory.isCrossLanguage();
     }
 
     @Override
diff --git a/java/fory-core/src/test/java/org/apache/fory/ForyTest.java 
b/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
index 75f1e9c9..4d8a10a7 100644
--- a/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
@@ -190,7 +190,7 @@ public class ForyTest extends ForyTestBase {
     assertEquals(Short.MAX_VALUE, serDeCheckIndex(fory1, fory2, buffer, 
Short.MAX_VALUE));
     assertEquals("str", serDeCheckIndex(fory1, fory2, buffer, "str"));
     assertEquals("str", serDeCheckIndex(fory1, fory2, buffer, new 
StringBuilder("str")).toString());
-    if (fory1.getLanguage() != Language.JAVA) {
+    if (fory1.isCrossLanguage()) {
       fory1.register(EnumSerializerTest.EnumFoo.class);
       fory2.register(EnumSerializerTest.EnumFoo.class);
       fory1.register(EnumSerializerTest.EnumSubClass.class);
diff --git 
a/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
 
b/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
index 639c1ef1..88e40dc8 100644
--- 
a/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
+++ 
b/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
@@ -64,7 +64,7 @@ public class EnumSerializerTest extends ForyTestBase {
             .requireClassRegistration(false);
     Fory fory1 = builder.build();
     Fory fory2 = builder.build();
-    if (fory1.getLanguage() != Language.JAVA) {
+    if (fory1.isCrossLanguage()) {
       fory1.register(EnumSerializerTest.EnumFoo.class);
       fory2.register(EnumSerializerTest.EnumFoo.class);
       fory1.register(EnumSerializerTest.EnumSubClass.class);
diff --git 
a/java/fory-format/src/main/java/org/apache/fory/format/vectorized/ArrowSerializers.java
 
b/java/fory-format/src/main/java/org/apache/fory/format/vectorized/ArrowSerializers.java
index cc0f9faf..7f5828f7 100644
--- 
a/java/fory-format/src/main/java/org/apache/fory/format/vectorized/ArrowSerializers.java
+++ 
b/java/fory-format/src/main/java/org/apache/fory/format/vectorized/ArrowSerializers.java
@@ -31,7 +31,6 @@ import org.apache.arrow.vector.ipc.message.ArrowRecordBatch;
 import org.apache.arrow.vector.ipc.message.IpcOption;
 import org.apache.arrow.vector.ipc.message.MessageSerializer;
 import org.apache.fory.Fory;
-import org.apache.fory.config.Language;
 import org.apache.fory.io.MemoryBufferReadableChannel;
 import org.apache.fory.io.MemoryBufferWritableChannel;
 import org.apache.fory.io.MockWritableChannel;
@@ -167,7 +166,7 @@ public class ArrowSerializers {
   }
 
   public static void registerSerializers(Fory fory) {
-    if (fory.getLanguage() != Language.JAVA) {
+    if (fory.isCrossLanguage()) {
       fory.register(ArrowTable.class, Types.ARROW_TABLE);
       fory.register(VectorSchemaRoot.class, Types.ARROW_RECORD_BATCH);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to