Skip to content

Commit a221ec0

Browse files
authored
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`.
1 parent 513d558 commit a221ec0

File tree

10 files changed

+38
-50
lines changed

10 files changed

+38
-50
lines changed

java/fory-core/src/main/java/org/apache/fory/Fory.java

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public final class Fory implements BaseFory {
113113
private final StringSerializer stringSerializer;
114114
private final ArrayListSerializer arrayListSerializer;
115115
private final HashMapSerializer hashMapSerializer;
116-
private final Language language;
117116
private final boolean crossLanguage;
118117
private final boolean compressInt;
119118
private final LongEncoding longEncoding;
@@ -132,8 +131,7 @@ public Fory(ForyBuilder builder, ClassLoader classLoader) {
132131
// Avoid set classLoader in `ForyBuilder`, which won't be clear when
133132
// `org.apache.fory.ThreadSafeFory.clearClassLoader` is called.
134133
config = new Config(builder);
135-
this.language = config.getLanguage();
136-
crossLanguage = language != Language.JAVA;
134+
crossLanguage = config.getLanguage() != Language.JAVA;
137135
this.refTracking = config.trackingRef();
138136
this.copyRefTracking = config.copyRef();
139137
this.shareMeta = config.isMetaShareEnabled();
@@ -148,7 +146,7 @@ public Fory(ForyBuilder builder, ClassLoader classLoader) {
148146
generics = new Generics(this);
149147
metaStringResolver = new MetaStringResolver();
150148
classResolver = new ClassResolver(this);
151-
if (language != Language.JAVA) {
149+
if (crossLanguage) {
152150
xtypeResolver = new XtypeResolver(this);
153151
} else {
154152
xtypeResolver = null;
@@ -169,7 +167,7 @@ public Fory(ForyBuilder builder, ClassLoader classLoader) {
169167

170168
@Override
171169
public void register(Class<?> cls) {
172-
if (language == Language.JAVA) {
170+
if (!crossLanguage) {
173171
classResolver.register(cls);
174172
} else {
175173
xtypeResolver.register(cls);
@@ -178,7 +176,7 @@ public void register(Class<?> cls) {
178176

179177
@Override
180178
public void register(Class<?> cls, int id) {
181-
if (language == Language.JAVA) {
179+
if (!crossLanguage) {
182180
classResolver.register(cls, id);
183181
} else {
184182
xtypeResolver.register(cls, id);
@@ -187,7 +185,7 @@ public void register(Class<?> cls, int id) {
187185

188186
@Override
189187
public void register(Class<?> cls, boolean createSerializer) {
190-
if (language == Language.JAVA) {
188+
if (!crossLanguage) {
191189
classResolver.register(cls, createSerializer);
192190
} else {
193191
xtypeResolver.register(cls);
@@ -196,7 +194,7 @@ public void register(Class<?> cls, boolean createSerializer) {
196194

197195
@Override
198196
public void register(Class<?> cls, int id, boolean createSerializer) {
199-
if (language == Language.JAVA) {
197+
if (!crossLanguage) {
200198
classResolver.register(cls, id, createSerializer);
201199
} else {
202200
xtypeResolver.register(cls, id);
@@ -215,7 +213,7 @@ public void register(Class<?> cls, String typeName) {
215213
}
216214

217215
public void register(Class<?> cls, String namespace, String typeName) {
218-
if (language == Language.JAVA) {
216+
if (!crossLanguage) {
219217
classResolver.register(cls, namespace, typeName);
220218
} else {
221219
xtypeResolver.register(cls, namespace, typeName);
@@ -224,7 +222,7 @@ public void register(Class<?> cls, String namespace, String typeName) {
224222

225223
@Override
226224
public <T> void registerSerializer(Class<T> type, Class<? extends Serializer> serializerClass) {
227-
if (language == Language.JAVA) {
225+
if (!crossLanguage) {
228226
classResolver.registerSerializer(type, serializerClass);
229227
} else {
230228
xtypeResolver.registerSerializer(type, serializerClass);
@@ -233,7 +231,7 @@ public <T> void registerSerializer(Class<T> type, Class<? extends Serializer> se
233231

234232
@Override
235233
public void registerSerializer(Class<?> type, Serializer<?> serializer) {
236-
if (language == Language.JAVA) {
234+
if (!crossLanguage) {
237235
classResolver.registerSerializer(type, serializer);
238236
} else {
239237
xtypeResolver.registerSerializer(type, serializer);
@@ -242,7 +240,7 @@ public void registerSerializer(Class<?> type, Serializer<?> serializer) {
242240

243241
@Override
244242
public void registerSerializer(Class<?> type, Function<Fory, Serializer<?>> serializerCreator) {
245-
if (language == Language.JAVA) {
243+
if (!crossLanguage) {
246244
classResolver.registerSerializer(type, serializerCreator.apply(this));
247245
} else {
248246
xtypeResolver.registerSerializer(type, serializerCreator.apply(this));
@@ -260,7 +258,7 @@ public SerializerFactory getSerializerFactory() {
260258

261259
public <T> Serializer<T> getSerializer(Class<T> cls) {
262260
Preconditions.checkNotNull(cls);
263-
if (language == Language.JAVA) {
261+
if (!crossLanguage) {
264262
return classResolver.getSerializer(cls);
265263
} else {
266264
return xtypeResolver.getClassInfo(cls).getSerializer();
@@ -301,11 +299,11 @@ public MemoryBuffer serialize(MemoryBuffer buffer, Object obj) {
301299

302300
@Override
303301
public MemoryBuffer serialize(MemoryBuffer buffer, Object obj, BufferCallback callback) {
304-
if (language == Language.XLANG) {
302+
if (crossLanguage) {
305303
buffer.writeInt16(MAGIC_NUMBER);
306304
}
307305
byte bitmap = BITMAP;
308-
if (language != Language.JAVA) {
306+
if (crossLanguage) {
309307
bitmap |= isCrossLanguageFlag;
310308
}
311309
if (obj == null) {
@@ -323,7 +321,7 @@ public MemoryBuffer serialize(MemoryBuffer buffer, Object obj, BufferCallback ca
323321
if (depth != 0) {
324322
throwDepthSerializationException();
325323
}
326-
if (language == Language.JAVA) {
324+
if (!crossLanguage) {
327325
write(buffer, obj);
328326
} else {
329327
xwrite(buffer, obj);
@@ -675,7 +673,7 @@ public void writeBufferObject(MemoryBuffer buffer, BufferObject bufferObject) {
675673
// write aligned length so that later buffer copy happen on aligned offset, which will be more
676674
// efficient
677675
// TODO(chaokunyang) Remove branch when other languages support aligned varint.
678-
if (language == Language.JAVA) {
676+
if (!crossLanguage) {
679677
buffer.writeVarUint32Aligned(totalBytes);
680678
} else {
681679
buffer.writeVarUint32(totalBytes);
@@ -699,7 +697,7 @@ public void writeBufferObject(
699697
// write aligned length so that later buffer copy happen on aligned offset, which will be very
700698
// efficient
701699
// TODO(chaokunyang) Remove branch when other languages support aligned varint.
702-
if (language == Language.JAVA) {
700+
if (!crossLanguage) {
703701
buffer.writeVarUint32Aligned(totalBytes);
704702
} else {
705703
buffer.writeVarUint32(totalBytes);
@@ -715,7 +713,7 @@ public MemoryBuffer readBufferObject(MemoryBuffer buffer) {
715713
if (inBand) {
716714
int size;
717715
// TODO(chaokunyang) Remove branch when other languages support aligned varint.
718-
if (language == Language.JAVA) {
716+
if (!crossLanguage) {
719717
size = buffer.readAlignedVarUint();
720718
} else {
721719
size = buffer.readVarUint32();
@@ -841,7 +839,7 @@ public Object deserialize(MemoryBuffer buffer, Iterable<MemoryBuffer> outOfBandB
841839
if (depth != 0) {
842840
throwDepthDeserializationException();
843841
}
844-
if (language == Language.XLANG) {
842+
if (crossLanguage) {
845843
short magicNumber = buffer.readInt16();
846844
assert magicNumber == MAGIC_NUMBER
847845
: String.format(
@@ -1597,15 +1595,15 @@ public void resetCopy() {
15971595
}
15981596

15991597
private void throwDepthSerializationException() {
1600-
String method = "Fory#" + (language != Language.JAVA ? "x" : "") + "writeXXX";
1598+
String method = "Fory#" + (crossLanguage ? "x" : "") + "writeXXX";
16011599
throw new IllegalStateException(
16021600
String.format(
16031601
"Nested call Fory.serializeXXX is not allowed when serializing, Please use %s instead",
16041602
method));
16051603
}
16061604

16071605
private void throwDepthDeserializationException() {
1608-
String method = "Fory#" + (language != Language.JAVA ? "x" : "") + "readXXX";
1606+
String method = "Fory#" + (crossLanguage ? "x" : "") + "readXXX";
16091607
throw new IllegalStateException(
16101608
String.format(
16111609
"Nested call Fory.deserializeXXX is not allowed when deserializing, Please use %s instead",
@@ -1676,10 +1674,6 @@ public ClassLoader getClassLoader() {
16761674
return classLoader;
16771675
}
16781676

1679-
public Language getLanguage() {
1680-
return language;
1681-
}
1682-
16831677
public boolean isCrossLanguage() {
16841678
return crossLanguage;
16851679
}

java/fory-core/src/main/java/org/apache/fory/resolver/ClassInfo.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import static org.apache.fory.meta.Encoders.TYPE_NAME_DECODER;
2525

2626
import org.apache.fory.collection.Tuple2;
27-
import org.apache.fory.config.Language;
2827
import org.apache.fory.meta.ClassDef;
2928
import org.apache.fory.meta.Encoders;
3029
import org.apache.fory.meta.MetaString.Encoding;
@@ -83,7 +82,7 @@ public class ClassInfo {
8382
this.serializer = serializer;
8483
needToWriteClassDef = serializer != null && classResolver.needToWriteClassDef(serializer);
8584
MetaStringResolver metaStringResolver = classResolver.getMetaStringResolver();
86-
if (cls != null && classResolver.getFory().getLanguage() != Language.JAVA) {
85+
if (cls != null && classResolver.getFory().isCrossLanguage()) {
8786
this.fullNameBytes =
8887
metaStringResolver.getOrCreateMetaStringBytes(
8988
GENERIC_ENCODER.encode(cls.getName(), Encoding.UTF_8));

java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -737,8 +737,7 @@ public <T> void registerSerializer(Class<T> type, Class<? extends Serializer> se
737737
* @param serializer serializer for object of {@code type}
738738
*/
739739
public void registerSerializer(Class<?> type, Serializer<?> serializer) {
740-
if (!extRegistry.registeredClassIdMap.containsKey(type)
741-
&& fory.getLanguage() == Language.JAVA) {
740+
if (!extRegistry.registeredClassIdMap.containsKey(type) && !fory.isCrossLanguage()) {
742741
register(type);
743742
}
744743
addSerializer(type, serializer);
@@ -997,7 +996,7 @@ public Class<? extends Serializer> getSerializerClass(Class<?> cls, boolean code
997996
if (requireJavaSerialization(cls) || useReplaceResolveSerializer(cls)) {
998997
return CollectionSerializers.JDKCompatibleCollectionSerializer.class;
999998
}
1000-
if (fory.getLanguage() == Language.JAVA) {
999+
if (!fory.isCrossLanguage()) {
10011000
return CollectionSerializers.DefaultJavaCollectionSerializer.class;
10021001
} else {
10031002
return CollectionSerializer.class;
@@ -1011,13 +1010,13 @@ public Class<? extends Serializer> getSerializerClass(Class<?> cls, boolean code
10111010
if (requireJavaSerialization(cls) || useReplaceResolveSerializer(cls)) {
10121011
return MapSerializers.JDKCompatibleMapSerializer.class;
10131012
}
1014-
if (fory.getLanguage() == Language.JAVA) {
1013+
if (!fory.isCrossLanguage()) {
10151014
return MapSerializers.DefaultJavaMapSerializer.class;
10161015
} else {
10171016
return MapSerializer.class;
10181017
}
10191018
}
1020-
if (fory.getLanguage() != Language.JAVA) {
1019+
if (fory.isCrossLanguage()) {
10211020
LOG.warn("Class {} isn't supported for cross-language serialization.", cls);
10221021
}
10231022
if (useReplaceResolveSerializer(cls)) {

java/fory-core/src/main/java/org/apache/fory/serializer/Serializer.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import javax.annotation.concurrent.NotThreadSafe;
2323
import org.apache.fory.Fory;
24-
import org.apache.fory.config.Language;
2524
import org.apache.fory.memory.MemoryBuffer;
2625
import org.apache.fory.type.TypeUtils;
2726

@@ -74,7 +73,7 @@ public T xread(MemoryBuffer buffer) {
7473
public Serializer(Fory fory, Class<T> type) {
7574
this.fory = fory;
7675
this.type = type;
77-
this.isJava = fory.getLanguage() == Language.JAVA;
76+
this.isJava = !fory.isCrossLanguage();
7877
if (fory.trackingRef()) {
7978
needToWriteRef = !TypeUtils.isBoxed(TypeUtils.wrap(type)) || !fory.isBasicTypesRefIgnored();
8079
} else {
@@ -87,7 +86,7 @@ public Serializer(Fory fory, Class<T> type) {
8786
public Serializer(Fory fory, Class<T> type, boolean immutable) {
8887
this.fory = fory;
8988
this.type = type;
90-
this.isJava = fory.getLanguage() == Language.JAVA;
89+
this.isJava = !fory.isCrossLanguage();
9190
if (fory.trackingRef()) {
9291
needToWriteRef = !TypeUtils.isBoxed(TypeUtils.wrap(type)) || !fory.isBasicTypesRefIgnored();
9392
} else {
@@ -100,7 +99,7 @@ public Serializer(Fory fory, Class<T> type, boolean immutable) {
10099
public Serializer(Fory fory, Class<T> type, boolean needToWriteRef, boolean immutable) {
101100
this.fory = fory;
102101
this.type = type;
103-
this.isJava = fory.getLanguage() == Language.JAVA;
102+
this.isJava = !fory.isCrossLanguage();
104103
this.needToWriteRef = needToWriteRef;
105104
this.needToCopyRef = fory.copyTrackingRef() && !immutable;
106105
this.immutable = immutable;

java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import java.util.concurrent.ConcurrentSkipListSet;
4747
import java.util.concurrent.CopyOnWriteArrayList;
4848
import org.apache.fory.Fory;
49-
import org.apache.fory.config.Language;
5049
import org.apache.fory.exception.ForyException;
5150
import org.apache.fory.memory.MemoryBuffer;
5251
import org.apache.fory.memory.Platform;
@@ -694,8 +693,9 @@ public static final class DefaultJavaCollectionSerializer<T>
694693
public DefaultJavaCollectionSerializer(Fory fory, Class<T> cls) {
695694
super(fory, cls, false);
696695
Preconditions.checkArgument(
697-
fory.getLanguage() == Language.JAVA,
698-
"Python default collection serializer should use " + CollectionSerializer.class);
696+
!fory.isCrossLanguage(),
697+
"Fory cross-language default collection serializer should use "
698+
+ CollectionSerializer.class);
699699
fory.getClassResolver().setSerializer(cls, this);
700700
Class<? extends Serializer> serializerClass =
701701
fory.getClassResolver()

java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import java.util.concurrent.ConcurrentSkipListMap;
3434
import org.apache.fory.Fory;
3535
import org.apache.fory.collection.LazyMap;
36-
import org.apache.fory.config.Language;
3736
import org.apache.fory.memory.MemoryBuffer;
3837
import org.apache.fory.memory.Platform;
3938
import org.apache.fory.reflect.ReflectionUtils;
@@ -384,8 +383,8 @@ public static final class DefaultJavaMapSerializer<T> extends AbstractMapSeriali
384383
public DefaultJavaMapSerializer(Fory fory, Class<T> cls) {
385384
super(fory, cls, false);
386385
Preconditions.checkArgument(
387-
fory.getLanguage() == Language.JAVA,
388-
"Python default map serializer should use " + MapSerializer.class);
386+
!fory.isCrossLanguage(),
387+
"Fory cross-language default map serializer should use " + MapSerializer.class);
389388
fory.getClassResolver().setSerializer(cls, this);
390389
Class<? extends Serializer> serializerClass =
391390
fory.getClassResolver()

java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.Collection;
2424
import java.util.List;
2525
import org.apache.fory.Fory;
26-
import org.apache.fory.config.Language;
2726
import org.apache.fory.logging.Logger;
2827
import org.apache.fory.logging.LoggerFactory;
2928
import org.apache.fory.memory.MemoryBuffer;
@@ -70,7 +69,7 @@ public static void registerSerializers(Fory fory, boolean preserveView) {
7069
// ImmutableCollectionSerializers
7170
for (Class<?> cls :
7271
new Class[] {SubListClass, RandomAccessSubListClass, ArrayListSubListClass}) {
73-
if (fory.trackingRef() && preserveView && fory.getConfig().getLanguage() == Language.JAVA) {
72+
if (fory.trackingRef() && preserveView && !fory.isCrossLanguage()) {
7473
classResolver.registerSerializer(cls, new SubListViewSerializer(fory, cls));
7574
} else {
7675
classResolver.registerSerializer(cls, new SubListSerializer(fory, (Class<List>) cls));
@@ -84,7 +83,7 @@ public static final class SubListViewSerializer extends CollectionSerializer<Lis
8483

8584
public SubListViewSerializer(Fory fory, Class cls) {
8685
super(fory, Stub.class.isAssignableFrom(cls) ? (Class<List>) ArrayListSubListClass : cls);
87-
assert fory.getLanguage() == Language.JAVA;
86+
assert !fory.isCrossLanguage();
8887
}
8988

9089
@Override

java/fory-core/src/test/java/org/apache/fory/ForyTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public void assertSerializationToBuffer(Fory fory1, Fory fory2, MemoryBuffer buf
190190
assertEquals(Short.MAX_VALUE, serDeCheckIndex(fory1, fory2, buffer, Short.MAX_VALUE));
191191
assertEquals("str", serDeCheckIndex(fory1, fory2, buffer, "str"));
192192
assertEquals("str", serDeCheckIndex(fory1, fory2, buffer, new StringBuilder("str")).toString());
193-
if (fory1.getLanguage() != Language.JAVA) {
193+
if (fory1.isCrossLanguage()) {
194194
fory1.register(EnumSerializerTest.EnumFoo.class);
195195
fory2.register(EnumSerializerTest.EnumFoo.class);
196196
fory1.register(EnumSerializerTest.EnumSubClass.class);

java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void testEnumSerialization(boolean referenceTracking, Language language)
6464
.requireClassRegistration(false);
6565
Fory fory1 = builder.build();
6666
Fory fory2 = builder.build();
67-
if (fory1.getLanguage() != Language.JAVA) {
67+
if (fory1.isCrossLanguage()) {
6868
fory1.register(EnumSerializerTest.EnumFoo.class);
6969
fory2.register(EnumSerializerTest.EnumFoo.class);
7070
fory1.register(EnumSerializerTest.EnumSubClass.class);

java/fory-format/src/main/java/org/apache/fory/format/vectorized/ArrowSerializers.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.apache.arrow.vector.ipc.message.IpcOption;
3232
import org.apache.arrow.vector.ipc.message.MessageSerializer;
3333
import org.apache.fory.Fory;
34-
import org.apache.fory.config.Language;
3534
import org.apache.fory.io.MemoryBufferReadableChannel;
3635
import org.apache.fory.io.MemoryBufferWritableChannel;
3736
import org.apache.fory.io.MockWritableChannel;
@@ -167,7 +166,7 @@ public MemoryBuffer toBuffer() {
167166
}
168167

169168
public static void registerSerializers(Fory fory) {
170-
if (fory.getLanguage() != Language.JAVA) {
169+
if (fory.isCrossLanguage()) {
171170
fory.register(ArrowTable.class, Types.ARROW_TABLE);
172171
fory.register(VectorSchemaRoot.class, Types.ARROW_RECORD_BATCH);
173172
}

0 commit comments

Comments
 (0)