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]