discord-jadx/app/src/main/java/com/esotericsoftware/kryo/serializers/FieldSerializerAnnotationsU...

113 lines
6.9 KiB
Java

package com.esotericsoftware.kryo.serializers;
import c.d.b.a.a;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.factories.ReflectionSerializerFactory;
import com.esotericsoftware.kryo.serializers.CollectionSerializer;
import com.esotericsoftware.kryo.serializers.FieldSerializer;
import com.esotericsoftware.kryo.serializers.MapSerializer;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Map;
public final class FieldSerializerAnnotationsUtil {
public FieldSerializerAnnotationsUtil(FieldSerializer fieldSerializer) {
}
public void processAnnotatedFields(FieldSerializer fieldSerializer) {
FieldSerializer.CachedField[] fields = fieldSerializer.getFields();
int length = fields.length;
for (int i = 0; i < length; i++) {
Field field = fields[i].getField();
if (field.isAnnotationPresent(FieldSerializer.Bind.class)) {
fields[i].setSerializer(ReflectionSerializerFactory.makeSerializer(fieldSerializer.getKryo(), ((FieldSerializer.Bind) field.getAnnotation(FieldSerializer.Bind.class)).value(), field.getClass()));
}
if (field.isAnnotationPresent(CollectionSerializer.BindCollection.class)) {
field.isAnnotationPresent(MapSerializer.BindMap.class);
}
Class<?> cls = null;
if (field.isAnnotationPresent(CollectionSerializer.BindCollection.class)) {
if (fields[i].serializer == null) {
CollectionSerializer.BindCollection bindCollection = (CollectionSerializer.BindCollection) field.getAnnotation(CollectionSerializer.BindCollection.class);
if (Collection.class.isAssignableFrom(fields[i].field.getType())) {
Class<? extends Serializer> elementSerializer = bindCollection.elementSerializer();
if (elementSerializer == Serializer.class) {
elementSerializer = null;
}
Serializer makeSerializer = elementSerializer == null ? null : ReflectionSerializerFactory.makeSerializer(fieldSerializer.getKryo(), elementSerializer, field.getClass());
boolean elementsCanBeNull = bindCollection.elementsCanBeNull();
Class<?> elementClass = bindCollection.elementClass();
if (elementClass == Object.class) {
elementClass = null;
}
CollectionSerializer collectionSerializer = new CollectionSerializer();
collectionSerializer.setElementsCanBeNull(elementsCanBeNull);
collectionSerializer.setElementClass(elementClass, makeSerializer);
fields[i].setSerializer(collectionSerializer);
} else {
StringBuilder K = a.K("CollectionSerialier.Bind should be used only with fields implementing java.util.Collection, but field ");
K.append(fields[i].getField().getDeclaringClass().getName());
K.append(".");
K.append(fields[i].getField().getName());
K.append(" does not implement it.");
throw new RuntimeException(K.toString());
}
} else {
StringBuilder K2 = a.K("CollectionSerialier.Bind cannot be used with field ");
K2.append(fields[i].getField().getDeclaringClass().getName());
K2.append(".");
K2.append(fields[i].getField().getName());
K2.append(", because it has a serializer already.");
throw new RuntimeException(K2.toString());
}
}
if (field.isAnnotationPresent(MapSerializer.BindMap.class)) {
if (fields[i].serializer == null) {
MapSerializer.BindMap bindMap = (MapSerializer.BindMap) field.getAnnotation(MapSerializer.BindMap.class);
if (Map.class.isAssignableFrom(fields[i].field.getType())) {
Class<? extends Serializer> valueSerializer = bindMap.valueSerializer();
Class<? extends Serializer> keySerializer = bindMap.keySerializer();
if (valueSerializer == Serializer.class) {
valueSerializer = null;
}
if (keySerializer == Serializer.class) {
keySerializer = null;
}
Serializer makeSerializer2 = valueSerializer == null ? null : ReflectionSerializerFactory.makeSerializer(fieldSerializer.getKryo(), valueSerializer, field.getClass());
Serializer makeSerializer3 = keySerializer == null ? null : ReflectionSerializerFactory.makeSerializer(fieldSerializer.getKryo(), keySerializer, field.getClass());
boolean valuesCanBeNull = bindMap.valuesCanBeNull();
boolean keysCanBeNull = bindMap.keysCanBeNull();
Class<?> keyClass = bindMap.keyClass();
Class<?> valueClass = bindMap.valueClass();
if (keyClass == Object.class) {
keyClass = null;
}
if (valueClass != Object.class) {
cls = valueClass;
}
MapSerializer mapSerializer = new MapSerializer();
mapSerializer.setKeysCanBeNull(keysCanBeNull);
mapSerializer.setValuesCanBeNull(valuesCanBeNull);
mapSerializer.setKeyClass(keyClass, makeSerializer3);
mapSerializer.setValueClass(cls, makeSerializer2);
fields[i].setSerializer(mapSerializer);
} else {
StringBuilder K3 = a.K("MapSerialier.Bind should be used only with fields implementing java.util.Map, but field ");
K3.append(fields[i].getField().getDeclaringClass().getName());
K3.append(".");
K3.append(fields[i].getField().getName());
K3.append(" does not implement it.");
throw new RuntimeException(K3.toString());
}
} else {
StringBuilder K4 = a.K("MapSerialier.Bind cannot be used with field ");
K4.append(fields[i].getField().getDeclaringClass().getName());
K4.append(".");
K4.append(fields[i].getField().getName());
K4.append(", because it has a serializer already.");
throw new RuntimeException(K4.toString());
}
}
}
}
}