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

217 lines
10 KiB
Java

package com.esotericsoftware.kryo.serializers;
import c.e.a.a;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.serializers.FieldSerializer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.util.HashMap;
public final class FieldSerializerGenericsUtil {
private Kryo kryo;
private FieldSerializer serializer;
public FieldSerializerGenericsUtil(FieldSerializer fieldSerializer) {
this.serializer = fieldSerializer;
this.kryo = fieldSerializer.getKryo();
}
public static Class[] getGenerics(Type type, Kryo kryo) {
Class concreteClass;
Class concreteClass2;
if (type instanceof GenericArrayType) {
Type genericComponentType = ((GenericArrayType) type).getGenericComponentType();
return genericComponentType instanceof Class ? new Class[]{(Class) genericComponentType} : getGenerics(genericComponentType, kryo);
} else if (!(type instanceof ParameterizedType)) {
return null;
} else {
a.C0053a aVar = a.a;
Type[] actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
Class[] clsArr = new Class[actualTypeArguments.length];
int length = actualTypeArguments.length;
int i = 0;
for (int i2 = 0; i2 < length; i2++) {
Type type2 = actualTypeArguments[i2];
a.C0053a aVar2 = a.a;
clsArr[i2] = Object.class;
if (type2 instanceof Class) {
clsArr[i2] = (Class) type2;
} else if (type2 instanceof ParameterizedType) {
clsArr[i2] = (Class) ((ParameterizedType) type2).getRawType();
} else if (type2 instanceof TypeVariable) {
GenericsResolver genericsResolver = kryo.getGenericsResolver();
if (genericsResolver.isSet() && (concreteClass2 = genericsResolver.getConcreteClass(((TypeVariable) type2).getName())) != null) {
clsArr[i2] = concreteClass2;
}
} else if (type2 instanceof GenericArrayType) {
Type genericComponentType2 = ((GenericArrayType) type2).getGenericComponentType();
if (genericComponentType2 instanceof Class) {
clsArr[i2] = Array.newInstance((Class) genericComponentType2, 0).getClass();
} else if (genericComponentType2 instanceof TypeVariable) {
GenericsResolver genericsResolver2 = kryo.getGenericsResolver();
if (genericsResolver2.isSet() && (concreteClass = genericsResolver2.getConcreteClass(((TypeVariable) genericComponentType2).getName())) != null) {
clsArr[i2] = Array.newInstance(concreteClass, 0).getClass();
}
} else {
Class[] generics = getGenerics(genericComponentType2, kryo);
if (generics != null) {
clsArr[i2] = generics[0];
}
}
}
i++;
}
if (i == 0) {
return null;
}
return clsArr;
}
}
private Class<?> getTypeVarConcreteClass(Class[] clsArr, int i, String str) {
if (clsArr != null && clsArr.length > i) {
return clsArr[i];
}
a.C0053a aVar = a.a;
GenericsResolver genericsResolver = this.kryo.getGenericsResolver();
if (genericsResolver.isSet()) {
return genericsResolver.getConcreteClass(str);
}
return null;
}
public Generics buildGenericsScope(Class cls, Class[] clsArr) {
int i;
Type genericSuperclass;
TypeVariable[] typeVariableArr = null;
while (true) {
if (cls == null) {
break;
}
FieldSerializer fieldSerializer = this.serializer;
typeVariableArr = cls == fieldSerializer.type ? fieldSerializer.typeParameters : cls.getTypeParameters();
if (!(typeVariableArr == null || typeVariableArr.length == 0)) {
break;
}
FieldSerializer fieldSerializer2 = this.serializer;
Class cls2 = fieldSerializer2.type;
if (cls == cls2) {
cls = fieldSerializer2.componentType;
if (cls == null) {
do {
genericSuperclass = cls2.getGenericSuperclass();
cls2 = cls2.getSuperclass();
if (genericSuperclass == null) {
break;
}
} while (!(genericSuperclass instanceof ParameterizedType));
if (genericSuperclass != null) {
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass).getActualTypeArguments();
typeVariableArr = cls2.getTypeParameters();
clsArr = new Class[actualTypeArguments.length];
for (int i2 = 0; i2 < actualTypeArguments.length; i2++) {
clsArr[i2] = actualTypeArguments[i2] instanceof Class ? (Class) actualTypeArguments[i2] : Object.class;
}
}
}
} else {
cls = cls.getComponentType();
}
}
if (typeVariableArr == null || typeVariableArr.length <= 0) {
return null;
}
a.C0053a aVar = a.a;
HashMap hashMap = new HashMap();
int i3 = 0;
for (TypeVariable typeVariable : typeVariableArr) {
String name = typeVariable.getName();
a.C0053a aVar2 = a.a;
Class<?> typeVarConcreteClass = getTypeVarConcreteClass(clsArr, i3, name);
if (typeVarConcreteClass != null) {
hashMap.put(name, typeVarConcreteClass);
}
i3++;
}
return new Generics(hashMap);
}
public Class[] computeFieldGenerics(Type type, Field field, Class[] clsArr) {
Generics genericsScope;
Class concreteClass;
if (type == null) {
return null;
}
if ((type instanceof TypeVariable) && this.serializer.getGenericsScope() != null) {
Class concreteClass2 = this.serializer.getGenericsScope().getConcreteClass(((TypeVariable) type).getName());
if (concreteClass2 == null) {
return null;
}
clsArr[0] = concreteClass2;
Class[] clsArr2 = {clsArr[0]};
a.C0053a aVar = a.a;
return clsArr2;
} else if (type instanceof ParameterizedType) {
Type[] actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
if (actualTypeArguments == null) {
return null;
}
Class[] clsArr3 = new Class[actualTypeArguments.length];
for (int i = 0; i < actualTypeArguments.length; i++) {
Type type2 = actualTypeArguments[i];
if (type2 instanceof Class) {
clsArr3[i] = (Class) type2;
} else if (type2 instanceof ParameterizedType) {
clsArr3[i] = (Class) ((ParameterizedType) type2).getRawType();
} else if ((type2 instanceof TypeVariable) && this.serializer.getGenericsScope() != null) {
clsArr3[i] = this.serializer.getGenericsScope().getConcreteClass(((TypeVariable) type2).getName());
if (clsArr3[i] == null) {
clsArr3[i] = Object.class;
}
} else if (type2 instanceof WildcardType) {
clsArr3[i] = Object.class;
} else if (type2 instanceof GenericArrayType) {
Type genericComponentType = ((GenericArrayType) type2).getGenericComponentType();
if (genericComponentType instanceof Class) {
clsArr3[i] = Array.newInstance((Class) genericComponentType, 0).getClass();
} else if (!(!(genericComponentType instanceof TypeVariable) || (genericsScope = this.serializer.getGenericsScope()) == null || (concreteClass = genericsScope.getConcreteClass(((TypeVariable) genericComponentType).getName())) == null)) {
clsArr3[i] = Array.newInstance(concreteClass, 0).getClass();
}
} else {
clsArr3[i] = null;
}
}
a.C0053a aVar2 = a.a;
return clsArr3;
} else if (!(type instanceof GenericArrayType)) {
return null;
} else {
Class[] computeFieldGenerics = computeFieldGenerics(((GenericArrayType) type).getGenericComponentType(), field, new Class[]{clsArr[0]});
a.C0053a aVar3 = a.a;
return computeFieldGenerics;
}
}
public FieldSerializer.CachedField newCachedFieldOfGenericType(Field field, int i, Class[] clsArr, Type type) {
a.C0053a aVar = a.a;
buildGenericsScope(clsArr[0], getGenerics(type, this.kryo));
if (clsArr[0] == Object.class && (type instanceof TypeVariable) && this.serializer.getGenericsScope() != null) {
TypeVariable typeVariable = (TypeVariable) type;
Class concreteClass = this.serializer.getGenericsScope().getConcreteClass(typeVariable.getName());
if (concreteClass != null) {
new Generics().add(typeVariable.getName(), concreteClass);
}
}
Class[] computeFieldGenerics = computeFieldGenerics(type, field, clsArr);
FieldSerializer.CachedField newMatchingCachedField = this.serializer.newMatchingCachedField(field, i, clsArr[0], type, computeFieldGenerics);
if (computeFieldGenerics != null && (newMatchingCachedField instanceof ObjectField) && computeFieldGenerics.length > 0 && computeFieldGenerics[0] != null) {
((ObjectField) newMatchingCachedField).generics = computeFieldGenerics;
}
return newMatchingCachedField;
}
}