Initial commit
This commit is contained in:
88
sources/com/google/common/reflect/Element.java
Normal file
88
sources/com/google/common/reflect/Element.java
Normal file
@@ -0,0 +1,88 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.AccessibleObject;
|
||||
import java.lang.reflect.Member;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
class Element extends AccessibleObject implements Member {
|
||||
private final AccessibleObject a;
|
||||
private final Member b;
|
||||
|
||||
<M extends AccessibleObject & Member> Element(M m) {
|
||||
Preconditions.a(m);
|
||||
this.a = m;
|
||||
this.b = m;
|
||||
}
|
||||
|
||||
public TypeToken<?> a() {
|
||||
return TypeToken.of((Class) getDeclaringClass());
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof Element)) {
|
||||
return false;
|
||||
}
|
||||
Element element = (Element) obj;
|
||||
return a().equals(element.a()) && this.b.equals(element.b);
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement
|
||||
public final <A extends Annotation> A getAnnotation(Class<A> cls) {
|
||||
return (A) this.a.getAnnotation(cls);
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement
|
||||
public final Annotation[] getAnnotations() {
|
||||
return this.a.getAnnotations();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement
|
||||
public final Annotation[] getDeclaredAnnotations() {
|
||||
return this.a.getDeclaredAnnotations();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.Member
|
||||
public Class<?> getDeclaringClass() {
|
||||
return this.b.getDeclaringClass();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.Member
|
||||
public final int getModifiers() {
|
||||
return this.b.getModifiers();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.Member
|
||||
public final String getName() {
|
||||
return this.b.getName();
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return this.b.hashCode();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject
|
||||
public final boolean isAccessible() {
|
||||
return this.a.isAccessible();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject, java.lang.reflect.AnnotatedElement
|
||||
public final boolean isAnnotationPresent(Class<? extends Annotation> cls) {
|
||||
return this.a.isAnnotationPresent(cls);
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.Member
|
||||
public final boolean isSynthetic() {
|
||||
return this.b.isSynthetic();
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.AccessibleObject
|
||||
public final void setAccessible(boolean z) throws SecurityException {
|
||||
this.a.setAccessible(z);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.b.toString();
|
||||
}
|
||||
}
|
74
sources/com/google/common/reflect/Invokable.java
Normal file
74
sources/com/google/common/reflect/Invokable.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import java.lang.reflect.AccessibleObject;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.GenericDeclaration;
|
||||
import java.lang.reflect.Member;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.util.Arrays;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public abstract class Invokable<T, R> extends Element implements GenericDeclaration {
|
||||
|
||||
static class ConstructorInvokable<T> extends Invokable<T, T> {
|
||||
final Constructor<?> c;
|
||||
|
||||
ConstructorInvokable(Constructor<?> constructor) {
|
||||
super(constructor);
|
||||
this.c = constructor;
|
||||
}
|
||||
|
||||
private boolean c() {
|
||||
Class<?> declaringClass = this.c.getDeclaringClass();
|
||||
if (declaringClass.getEnclosingConstructor() != null) {
|
||||
return true;
|
||||
}
|
||||
return declaringClass.getEnclosingMethod() != null ? !Modifier.isStatic(r1.getModifiers()) : (declaringClass.getEnclosingClass() == null || Modifier.isStatic(declaringClass.getModifiers())) ? false : true;
|
||||
}
|
||||
|
||||
Type[] b() {
|
||||
Type[] genericParameterTypes = this.c.getGenericParameterTypes();
|
||||
if (genericParameterTypes.length <= 0 || !c()) {
|
||||
return genericParameterTypes;
|
||||
}
|
||||
Class<?>[] parameterTypes = this.c.getParameterTypes();
|
||||
return (genericParameterTypes.length == parameterTypes.length && parameterTypes[0] == getDeclaringClass().getEnclosingClass()) ? (Type[]) Arrays.copyOfRange(genericParameterTypes, 1, genericParameterTypes.length) : genericParameterTypes;
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.GenericDeclaration
|
||||
public final TypeVariable<?>[] getTypeParameters() {
|
||||
TypeVariable<Class<? super T>>[] typeParameters = getDeclaringClass().getTypeParameters();
|
||||
TypeVariable<Constructor<?>>[] typeParameters2 = this.c.getTypeParameters();
|
||||
TypeVariable<?>[] typeVariableArr = new TypeVariable[typeParameters.length + typeParameters2.length];
|
||||
System.arraycopy(typeParameters, 0, typeVariableArr, 0, typeParameters.length);
|
||||
System.arraycopy(typeParameters2, 0, typeVariableArr, typeParameters.length, typeParameters2.length);
|
||||
return typeVariableArr;
|
||||
}
|
||||
}
|
||||
|
||||
static class MethodInvokable<T> extends Invokable<T, Object> {
|
||||
final Method c;
|
||||
|
||||
MethodInvokable(Method method) {
|
||||
super(method);
|
||||
this.c = method;
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.GenericDeclaration
|
||||
public final TypeVariable<?>[] getTypeParameters() {
|
||||
return this.c.getTypeParameters();
|
||||
}
|
||||
}
|
||||
|
||||
<M extends AccessibleObject & Member> Invokable(M m) {
|
||||
super(m);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Element, java.lang.reflect.Member
|
||||
public final Class<? super T> getDeclaringClass() {
|
||||
return (Class<? super T>) super.getDeclaringClass();
|
||||
}
|
||||
}
|
14
sources/com/google/common/reflect/Reflection.java
Normal file
14
sources/com/google/common/reflect/Reflection.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Proxy;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class Reflection {
|
||||
public static <T> T a(Class<T> cls, InvocationHandler invocationHandler) {
|
||||
Preconditions.a(invocationHandler);
|
||||
Preconditions.a(cls.isInterface(), "%s is not an interface", cls);
|
||||
return cls.cast(Proxy.newProxyInstance(cls.getClassLoader(), new Class[]{cls}, invocationHandler));
|
||||
}
|
||||
}
|
17
sources/com/google/common/reflect/TypeCapture.java
Normal file
17
sources/com/google/common/reflect/TypeCapture.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
abstract class TypeCapture<T> {
|
||||
TypeCapture() {
|
||||
}
|
||||
|
||||
final Type capture() {
|
||||
Type genericSuperclass = getClass().getGenericSuperclass();
|
||||
Preconditions.a(genericSuperclass instanceof ParameterizedType, "%s isn't parameterized", genericSuperclass);
|
||||
return ((ParameterizedType) genericSuperclass).getActualTypeArguments()[0];
|
||||
}
|
||||
}
|
8
sources/com/google/common/reflect/TypeParameter.java
Normal file
8
sources/com/google/common/reflect/TypeParameter.java
Normal file
@@ -0,0 +1,8 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import java.lang.reflect.TypeVariable;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public abstract class TypeParameter<T> extends TypeCapture<T> {
|
||||
final TypeVariable<?> a;
|
||||
}
|
377
sources/com/google/common/reflect/TypeResolver.java
Normal file
377
sources/com/google/common/reflect/TypeResolver.java
Normal file
@@ -0,0 +1,377 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.reflect.Types;
|
||||
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.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class TypeResolver {
|
||||
private final TypeTable a;
|
||||
|
||||
private static class WildcardCapturer {
|
||||
private final AtomicInteger a;
|
||||
|
||||
private Type b(Type type) {
|
||||
if (type == null) {
|
||||
return null;
|
||||
}
|
||||
return a(type);
|
||||
}
|
||||
|
||||
final Type a(Type type) {
|
||||
Preconditions.a(type);
|
||||
if ((type instanceof Class) || (type instanceof TypeVariable)) {
|
||||
return type;
|
||||
}
|
||||
if (type instanceof GenericArrayType) {
|
||||
return Types.b(a().a(((GenericArrayType) type).getGenericComponentType()));
|
||||
}
|
||||
if (!(type instanceof ParameterizedType)) {
|
||||
if (!(type instanceof WildcardType)) {
|
||||
throw new AssertionError("must have been one of the known types");
|
||||
}
|
||||
WildcardType wildcardType = (WildcardType) type;
|
||||
return wildcardType.getLowerBounds().length == 0 ? a(wildcardType.getUpperBounds()) : type;
|
||||
}
|
||||
ParameterizedType parameterizedType = (ParameterizedType) type;
|
||||
Class cls = (Class) parameterizedType.getRawType();
|
||||
TypeVariable<?>[] typeParameters = cls.getTypeParameters();
|
||||
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
|
||||
for (int i = 0; i < actualTypeArguments.length; i++) {
|
||||
actualTypeArguments[i] = a(typeParameters[i]).a(actualTypeArguments[i]);
|
||||
}
|
||||
return Types.a(a().b(parameterizedType.getOwnerType()), (Class<?>) cls, actualTypeArguments);
|
||||
}
|
||||
|
||||
WildcardCapturer() {
|
||||
this(new AtomicInteger());
|
||||
}
|
||||
|
||||
private WildcardCapturer(AtomicInteger atomicInteger) {
|
||||
this.a = atomicInteger;
|
||||
}
|
||||
|
||||
TypeVariable<?> a(Type[] typeArr) {
|
||||
return Types.a(WildcardCapturer.class, "capture#" + this.a.incrementAndGet() + "-of ? extends " + Joiner.a('&').a((Object[]) typeArr), typeArr);
|
||||
}
|
||||
|
||||
private WildcardCapturer a(final TypeVariable<?> typeVariable) {
|
||||
return new WildcardCapturer(this, this.a) { // from class: com.google.common.reflect.TypeResolver.WildcardCapturer.1
|
||||
@Override // com.google.common.reflect.TypeResolver.WildcardCapturer
|
||||
TypeVariable<?> a(Type[] typeArr) {
|
||||
LinkedHashSet linkedHashSet = new LinkedHashSet(Arrays.asList(typeArr));
|
||||
linkedHashSet.addAll(Arrays.asList(typeVariable.getBounds()));
|
||||
if (linkedHashSet.size() > 1) {
|
||||
linkedHashSet.remove(Object.class);
|
||||
}
|
||||
return super.a((Type[]) linkedHashSet.toArray(new Type[0]));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private WildcardCapturer a() {
|
||||
return new WildcardCapturer(this.a);
|
||||
}
|
||||
}
|
||||
|
||||
static TypeResolver b(Type type) {
|
||||
return new TypeResolver().a(TypeMappingIntrospector.a(type));
|
||||
}
|
||||
|
||||
private static class TypeTable {
|
||||
private final ImmutableMap<TypeVariableKey, Type> a;
|
||||
|
||||
TypeTable() {
|
||||
this.a = ImmutableMap.of();
|
||||
}
|
||||
|
||||
final TypeTable a(Map<TypeVariableKey, ? extends Type> map) {
|
||||
ImmutableMap.Builder builder = ImmutableMap.builder();
|
||||
builder.a(this.a);
|
||||
for (Map.Entry<TypeVariableKey, ? extends Type> entry : map.entrySet()) {
|
||||
TypeVariableKey key = entry.getKey();
|
||||
Type value = entry.getValue();
|
||||
Preconditions.a(!key.a(value), "Type variable %s bound to itself", key);
|
||||
builder.a(key, value);
|
||||
}
|
||||
return new TypeTable(builder.a());
|
||||
}
|
||||
|
||||
private TypeTable(ImmutableMap<TypeVariableKey, Type> immutableMap) {
|
||||
this.a = immutableMap;
|
||||
}
|
||||
|
||||
final Type a(final TypeVariable<?> typeVariable) {
|
||||
return a(typeVariable, new TypeTable(this) { // from class: com.google.common.reflect.TypeResolver.TypeTable.1
|
||||
@Override // com.google.common.reflect.TypeResolver.TypeTable
|
||||
public Type a(TypeVariable<?> typeVariable2, TypeTable typeTable) {
|
||||
return typeVariable2.getGenericDeclaration().equals(typeVariable.getGenericDeclaration()) ? typeVariable2 : this.a(typeVariable2, typeTable);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* JADX WARN: Type inference failed for: r0v4, types: [java.lang.reflect.GenericDeclaration] */
|
||||
Type a(TypeVariable<?> typeVariable, TypeTable typeTable) {
|
||||
Type type = this.a.get(new TypeVariableKey(typeVariable));
|
||||
if (type == null) {
|
||||
Type[] bounds = typeVariable.getBounds();
|
||||
if (bounds.length == 0) {
|
||||
return typeVariable;
|
||||
}
|
||||
Type[] a = new TypeResolver(typeTable).a(bounds);
|
||||
return (Types.NativeTypeVariableEquals.a && Arrays.equals(bounds, a)) ? typeVariable : Types.a(typeVariable.getGenericDeclaration(), typeVariable.getName(), a);
|
||||
}
|
||||
return new TypeResolver(typeTable).a(type);
|
||||
}
|
||||
}
|
||||
|
||||
static final class TypeVariableKey {
|
||||
private final TypeVariable<?> a;
|
||||
|
||||
TypeVariableKey(TypeVariable<?> typeVariable) {
|
||||
Preconditions.a(typeVariable);
|
||||
this.a = typeVariable;
|
||||
}
|
||||
|
||||
static TypeVariableKey b(Type type) {
|
||||
if (type instanceof TypeVariable) {
|
||||
return new TypeVariableKey((TypeVariable) type);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
boolean a(Type type) {
|
||||
if (type instanceof TypeVariable) {
|
||||
return a((TypeVariable<?>) type);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof TypeVariableKey) {
|
||||
return a(((TypeVariableKey) obj).a);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return Objects.a(this.a.getGenericDeclaration(), this.a.getName());
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.a.toString();
|
||||
}
|
||||
|
||||
private boolean a(TypeVariable<?> typeVariable) {
|
||||
return this.a.getGenericDeclaration().equals(typeVariable.getGenericDeclaration()) && this.a.getName().equals(typeVariable.getName());
|
||||
}
|
||||
}
|
||||
|
||||
public TypeResolver() {
|
||||
this.a = new TypeTable();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static void b(final Map<TypeVariableKey, Type> map, Type type, final Type type2) {
|
||||
if (type.equals(type2)) {
|
||||
return;
|
||||
}
|
||||
new TypeVisitor() { // from class: com.google.common.reflect.TypeResolver.1
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(TypeVariable<?> typeVariable) {
|
||||
map.put(new TypeVariableKey(typeVariable), type2);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(WildcardType wildcardType) {
|
||||
Type type3 = type2;
|
||||
if (type3 instanceof WildcardType) {
|
||||
WildcardType wildcardType2 = (WildcardType) type3;
|
||||
Type[] upperBounds = wildcardType.getUpperBounds();
|
||||
Type[] upperBounds2 = wildcardType2.getUpperBounds();
|
||||
Type[] lowerBounds = wildcardType.getLowerBounds();
|
||||
Type[] lowerBounds2 = wildcardType2.getLowerBounds();
|
||||
Preconditions.a(upperBounds.length == upperBounds2.length && lowerBounds.length == lowerBounds2.length, "Incompatible type: %s vs. %s", wildcardType, type2);
|
||||
for (int i = 0; i < upperBounds.length; i++) {
|
||||
TypeResolver.b(map, upperBounds[i], upperBounds2[i]);
|
||||
}
|
||||
for (int i2 = 0; i2 < lowerBounds.length; i2++) {
|
||||
TypeResolver.b(map, lowerBounds[i2], lowerBounds2[i2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(ParameterizedType parameterizedType) {
|
||||
Type type3 = type2;
|
||||
if (type3 instanceof WildcardType) {
|
||||
return;
|
||||
}
|
||||
ParameterizedType parameterizedType2 = (ParameterizedType) TypeResolver.b(ParameterizedType.class, type3);
|
||||
if (parameterizedType.getOwnerType() != null && parameterizedType2.getOwnerType() != null) {
|
||||
TypeResolver.b(map, parameterizedType.getOwnerType(), parameterizedType2.getOwnerType());
|
||||
}
|
||||
Preconditions.a(parameterizedType.getRawType().equals(parameterizedType2.getRawType()), "Inconsistent raw type: %s vs. %s", parameterizedType, type2);
|
||||
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
|
||||
Type[] actualTypeArguments2 = parameterizedType2.getActualTypeArguments();
|
||||
Preconditions.a(actualTypeArguments.length == actualTypeArguments2.length, "%s not compatible with %s", parameterizedType, parameterizedType2);
|
||||
for (int i = 0; i < actualTypeArguments.length; i++) {
|
||||
TypeResolver.b(map, actualTypeArguments[i], actualTypeArguments2[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(GenericArrayType genericArrayType) {
|
||||
Type type3 = type2;
|
||||
if (type3 instanceof WildcardType) {
|
||||
return;
|
||||
}
|
||||
Type a = Types.a(type3);
|
||||
Preconditions.a(a != null, "%s is not an array type.", type2);
|
||||
TypeResolver.b(map, genericArrayType.getGenericComponentType(), a);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(Class<?> cls) {
|
||||
if (type2 instanceof WildcardType) {
|
||||
return;
|
||||
}
|
||||
throw new IllegalArgumentException("No type mapping from " + cls + " to " + type2);
|
||||
}
|
||||
}.a(type);
|
||||
}
|
||||
|
||||
private static final class TypeMappingIntrospector extends TypeVisitor {
|
||||
private static final WildcardCapturer c = new WildcardCapturer();
|
||||
private final Map<TypeVariableKey, Type> b = Maps.b();
|
||||
|
||||
private TypeMappingIntrospector() {
|
||||
}
|
||||
|
||||
static ImmutableMap<TypeVariableKey, Type> a(Type type) {
|
||||
TypeMappingIntrospector typeMappingIntrospector = new TypeMappingIntrospector();
|
||||
typeMappingIntrospector.a(c.a(type));
|
||||
return ImmutableMap.copyOf((Map) typeMappingIntrospector.b);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(Class<?> cls) {
|
||||
a(cls.getGenericSuperclass());
|
||||
a(cls.getGenericInterfaces());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(ParameterizedType parameterizedType) {
|
||||
Class cls = (Class) parameterizedType.getRawType();
|
||||
TypeVariable[] typeParameters = cls.getTypeParameters();
|
||||
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
|
||||
Preconditions.b(typeParameters.length == actualTypeArguments.length);
|
||||
for (int i = 0; i < typeParameters.length; i++) {
|
||||
a(new TypeVariableKey(typeParameters[i]), actualTypeArguments[i]);
|
||||
}
|
||||
a(cls);
|
||||
a(parameterizedType.getOwnerType());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(TypeVariable<?> typeVariable) {
|
||||
a(typeVariable.getBounds());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(WildcardType wildcardType) {
|
||||
a(wildcardType.getUpperBounds());
|
||||
}
|
||||
|
||||
private void a(TypeVariableKey typeVariableKey, Type type) {
|
||||
if (this.b.containsKey(typeVariableKey)) {
|
||||
return;
|
||||
}
|
||||
Type type2 = type;
|
||||
while (type2 != null) {
|
||||
if (typeVariableKey.a(type2)) {
|
||||
while (type != null) {
|
||||
type = this.b.remove(TypeVariableKey.b(type));
|
||||
}
|
||||
return;
|
||||
}
|
||||
type2 = this.b.get(TypeVariableKey.b(type2));
|
||||
}
|
||||
this.b.put(typeVariableKey, type);
|
||||
}
|
||||
}
|
||||
|
||||
private TypeResolver(TypeTable typeTable) {
|
||||
this.a = typeTable;
|
||||
}
|
||||
|
||||
public TypeResolver a(Type type, Type type2) {
|
||||
HashMap b = Maps.b();
|
||||
Preconditions.a(type);
|
||||
Preconditions.a(type2);
|
||||
b(b, type, type2);
|
||||
return a(b);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static <T> T b(Class<T> cls, Object obj) {
|
||||
try {
|
||||
return cls.cast(obj);
|
||||
} catch (ClassCastException unused) {
|
||||
throw new IllegalArgumentException(obj + " is not a " + cls.getSimpleName());
|
||||
}
|
||||
}
|
||||
|
||||
TypeResolver a(Map<TypeVariableKey, ? extends Type> map) {
|
||||
return new TypeResolver(this.a.a(map));
|
||||
}
|
||||
|
||||
public Type a(Type type) {
|
||||
Preconditions.a(type);
|
||||
if (type instanceof TypeVariable) {
|
||||
return this.a.a((TypeVariable<?>) type);
|
||||
}
|
||||
if (type instanceof ParameterizedType) {
|
||||
return a((ParameterizedType) type);
|
||||
}
|
||||
if (type instanceof GenericArrayType) {
|
||||
return a((GenericArrayType) type);
|
||||
}
|
||||
return type instanceof WildcardType ? a((WildcardType) type) : type;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public Type[] a(Type[] typeArr) {
|
||||
Type[] typeArr2 = new Type[typeArr.length];
|
||||
for (int i = 0; i < typeArr.length; i++) {
|
||||
typeArr2[i] = a(typeArr[i]);
|
||||
}
|
||||
return typeArr2;
|
||||
}
|
||||
|
||||
private WildcardType a(WildcardType wildcardType) {
|
||||
return new Types.WildcardTypeImpl(a(wildcardType.getLowerBounds()), a(wildcardType.getUpperBounds()));
|
||||
}
|
||||
|
||||
private Type a(GenericArrayType genericArrayType) {
|
||||
return Types.b(a(genericArrayType.getGenericComponentType()));
|
||||
}
|
||||
|
||||
private ParameterizedType a(ParameterizedType parameterizedType) {
|
||||
Type ownerType = parameterizedType.getOwnerType();
|
||||
return Types.a(ownerType == null ? null : a(ownerType), (Class<?>) a(parameterizedType.getRawType()), a(parameterizedType.getActualTypeArguments()));
|
||||
}
|
||||
}
|
820
sources/com/google/common/reflect/TypeToken.java
Normal file
820
sources/com/google/common/reflect/TypeToken.java
Normal file
@@ -0,0 +1,820 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.FluentIterable;
|
||||
import com.google.common.collect.ForwardingSet;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.google.common.collect.UnmodifiableIterator;
|
||||
import com.google.common.primitives.Primitives;
|
||||
import com.google.common.reflect.Invokable;
|
||||
import com.google.common.reflect.TypeResolver;
|
||||
import com.google.common.reflect.Types;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.GenericArrayType;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.lang.reflect.WildcardType;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public abstract class TypeToken<T> extends TypeCapture<T> implements Serializable {
|
||||
private final Type runtimeType;
|
||||
private transient TypeResolver typeResolver;
|
||||
|
||||
private static class Bounds {
|
||||
private final Type[] a;
|
||||
private final boolean b;
|
||||
|
||||
Bounds(Type[] typeArr, boolean z) {
|
||||
this.a = typeArr;
|
||||
this.b = z;
|
||||
}
|
||||
|
||||
boolean a(Type type) {
|
||||
for (Type type2 : this.a) {
|
||||
boolean isSubtypeOf = TypeToken.of(type2).isSubtypeOf(type);
|
||||
boolean z = this.b;
|
||||
if (isSubtypeOf == z) {
|
||||
return z;
|
||||
}
|
||||
}
|
||||
return !this.b;
|
||||
}
|
||||
|
||||
boolean b(Type type) {
|
||||
TypeToken<?> of = TypeToken.of(type);
|
||||
for (Type type2 : this.a) {
|
||||
boolean isSubtypeOf = of.isSubtypeOf(type2);
|
||||
boolean z = this.b;
|
||||
if (isSubtypeOf == z) {
|
||||
return z;
|
||||
}
|
||||
}
|
||||
return !this.b;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class SimpleTypeToken<T> extends TypeToken<T> {
|
||||
SimpleTypeToken(Type type) {
|
||||
super(type);
|
||||
}
|
||||
}
|
||||
|
||||
private static abstract class TypeCollector<K> {
|
||||
static final TypeCollector<TypeToken<?>> a = new TypeCollector<TypeToken<?>>() { // from class: com.google.common.reflect.TypeToken.TypeCollector.1
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public Iterable<? extends TypeToken<?>> b(TypeToken<?> typeToken) {
|
||||
return typeToken.getGenericInterfaces();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* renamed from: b, reason: avoid collision after fix types in other method and merged with bridge method [inline-methods] */
|
||||
public Class<?> c(TypeToken<?> typeToken) {
|
||||
return typeToken.getRawType();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* renamed from: c, reason: avoid collision after fix types in other method and merged with bridge method [inline-methods] */
|
||||
public TypeToken<?> d(TypeToken<?> typeToken) {
|
||||
return typeToken.getGenericSuperclass();
|
||||
}
|
||||
};
|
||||
static final TypeCollector<Class<?>> b = new TypeCollector<Class<?>>() { // from class: com.google.common.reflect.TypeToken.TypeCollector.2
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public Iterable<? extends Class<?>> b(Class<?> cls) {
|
||||
return Arrays.asList(cls.getInterfaces());
|
||||
}
|
||||
|
||||
/* renamed from: b, reason: avoid collision after fix types in other method */
|
||||
Class<?> b2(Class<?> cls) {
|
||||
return cls;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* bridge */ /* synthetic */ Class c(Class<?> cls) {
|
||||
Class<?> cls2 = cls;
|
||||
b2(cls2);
|
||||
return cls2;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
/* renamed from: c, reason: avoid collision after fix types in other method and merged with bridge method [inline-methods] */
|
||||
public Class<?> d(Class<?> cls) {
|
||||
return cls.getSuperclass();
|
||||
}
|
||||
};
|
||||
|
||||
private static class ForwardingTypeCollector<K> extends TypeCollector<K> {
|
||||
private final TypeCollector<K> c;
|
||||
|
||||
ForwardingTypeCollector(TypeCollector<K> typeCollector) {
|
||||
super();
|
||||
this.c = typeCollector;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
Class<?> c(K k) {
|
||||
return this.c.c(k);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
K d(K k) {
|
||||
return this.c.d(k);
|
||||
}
|
||||
}
|
||||
|
||||
private TypeCollector() {
|
||||
}
|
||||
|
||||
final TypeCollector<K> a() {
|
||||
return new ForwardingTypeCollector<K>(this, this) { // from class: com.google.common.reflect.TypeToken.TypeCollector.3
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
ImmutableList<K> a(Iterable<? extends K> iterable) {
|
||||
ImmutableList.Builder builder = ImmutableList.builder();
|
||||
for (K k : iterable) {
|
||||
if (!c(k).isInterface()) {
|
||||
builder.a((ImmutableList.Builder) k);
|
||||
}
|
||||
}
|
||||
return super.a((Iterable) builder.a());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeCollector
|
||||
Iterable<? extends K> b(K k) {
|
||||
return ImmutableSet.of();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
abstract Iterable<? extends K> b(K k);
|
||||
|
||||
abstract Class<?> c(K k);
|
||||
|
||||
abstract K d(K k);
|
||||
|
||||
final ImmutableList<K> a(K k) {
|
||||
return a((Iterable) ImmutableList.of(k));
|
||||
}
|
||||
|
||||
ImmutableList<K> a(Iterable<? extends K> iterable) {
|
||||
HashMap b2 = Maps.b();
|
||||
Iterator<? extends K> it = iterable.iterator();
|
||||
while (it.hasNext()) {
|
||||
a((TypeCollector<K>) it.next(), (Map<? super TypeCollector<K>, Integer>) b2);
|
||||
}
|
||||
return a(b2, Ordering.c().b());
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
private int a(K k, Map<? super K, Integer> map) {
|
||||
Integer num = map.get(k);
|
||||
if (num != null) {
|
||||
return num.intValue();
|
||||
}
|
||||
boolean isInterface = c(k).isInterface();
|
||||
Iterator<? extends K> it = b(k).iterator();
|
||||
int i = isInterface;
|
||||
while (it.hasNext()) {
|
||||
i = Math.max(i, a((TypeCollector<K>) it.next(), (Map<? super TypeCollector<K>, Integer>) map));
|
||||
}
|
||||
K d = d(k);
|
||||
int i2 = i;
|
||||
if (d != null) {
|
||||
i2 = Math.max(i, a((TypeCollector<K>) d, (Map<? super TypeCollector<K>, Integer>) map));
|
||||
}
|
||||
int i3 = i2 + 1;
|
||||
map.put(k, Integer.valueOf(i3));
|
||||
return i3;
|
||||
}
|
||||
|
||||
private static <K, V> ImmutableList<K> a(final Map<K, V> map, final Comparator<? super V> comparator) {
|
||||
return (ImmutableList<K>) new Ordering<K>() { // from class: com.google.common.reflect.TypeToken.TypeCollector.4
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // com.google.common.collect.Ordering, java.util.Comparator
|
||||
public int compare(K k, K k2) {
|
||||
return comparator.compare(map.get(k), map.get(k2));
|
||||
}
|
||||
}.a(map.keySet());
|
||||
}
|
||||
}
|
||||
|
||||
private enum TypeFilter implements Predicate<TypeToken<?>> {
|
||||
IGNORE_TYPE_VARIABLE_OR_WILDCARD { // from class: com.google.common.reflect.TypeToken.TypeFilter.1
|
||||
@Override // com.google.common.base.Predicate
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public boolean apply(TypeToken<?> typeToken) {
|
||||
return ((((TypeToken) typeToken).runtimeType instanceof TypeVariable) || (((TypeToken) typeToken).runtimeType instanceof WildcardType)) ? false : true;
|
||||
}
|
||||
},
|
||||
INTERFACE_ONLY { // from class: com.google.common.reflect.TypeToken.TypeFilter.2
|
||||
@Override // com.google.common.base.Predicate
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public boolean apply(TypeToken<?> typeToken) {
|
||||
return typeToken.getRawType().isInterface();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Bounds any(Type[] typeArr) {
|
||||
return new Bounds(typeArr, true);
|
||||
}
|
||||
|
||||
private TypeToken<? super T> boundAsSuperclass(Type type) {
|
||||
TypeToken<? super T> typeToken = (TypeToken<? super T>) of(type);
|
||||
if (typeToken.getRawType().isInterface()) {
|
||||
return null;
|
||||
}
|
||||
return typeToken;
|
||||
}
|
||||
|
||||
private ImmutableList<TypeToken<? super T>> boundsAsInterfaces(Type[] typeArr) {
|
||||
ImmutableList.Builder builder = ImmutableList.builder();
|
||||
for (Type type : typeArr) {
|
||||
TypeToken<?> of = of(type);
|
||||
if (of.getRawType().isInterface()) {
|
||||
builder.a((ImmutableList.Builder) of);
|
||||
}
|
||||
}
|
||||
return builder.a();
|
||||
}
|
||||
|
||||
private static Bounds every(Type[] typeArr) {
|
||||
return new Bounds(typeArr, false);
|
||||
}
|
||||
|
||||
private TypeToken<? extends T> getArraySubtype(Class<?> cls) {
|
||||
return (TypeToken<? extends T>) of(newArrayClassOrGenericArrayType(getComponentType().getSubtype(cls.getComponentType()).runtimeType));
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
private TypeToken<? super T> getArraySupertype(Class<? super T> cls) {
|
||||
TypeCapture componentType = getComponentType();
|
||||
Preconditions.a(componentType, "%s isn't a super type of %s", cls, this);
|
||||
return (TypeToken<? super T>) of(newArrayClassOrGenericArrayType(((TypeToken) componentType).getSupertype(cls.getComponentType()).runtimeType));
|
||||
}
|
||||
|
||||
private Type getOwnerTypeIfPresent() {
|
||||
Type type = this.runtimeType;
|
||||
if (type instanceof ParameterizedType) {
|
||||
return ((ParameterizedType) type).getOwnerType();
|
||||
}
|
||||
if (type instanceof Class) {
|
||||
return ((Class) type).getEnclosingClass();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public ImmutableSet<Class<? super T>> getRawTypes() {
|
||||
final ImmutableSet.Builder builder = ImmutableSet.builder();
|
||||
new TypeVisitor(this) { // from class: com.google.common.reflect.TypeToken.4
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(TypeVariable<?> typeVariable) {
|
||||
a(typeVariable.getBounds());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(WildcardType wildcardType) {
|
||||
a(wildcardType.getUpperBounds());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(ParameterizedType parameterizedType) {
|
||||
builder.a((ImmutableSet.Builder) parameterizedType.getRawType());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(Class<?> cls) {
|
||||
builder.a((ImmutableSet.Builder) cls);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(GenericArrayType genericArrayType) {
|
||||
builder.a((ImmutableSet.Builder) Types.a((Class<?>) TypeToken.of(genericArrayType.getGenericComponentType()).getRawType()));
|
||||
}
|
||||
}.a(this.runtimeType);
|
||||
return builder.a();
|
||||
}
|
||||
|
||||
private TypeToken<? extends T> getSubtypeFromLowerBounds(Class<?> cls, Type[] typeArr) {
|
||||
if (typeArr.length > 0) {
|
||||
return (TypeToken<? extends T>) of(typeArr[0]).getSubtype(cls);
|
||||
}
|
||||
throw new IllegalArgumentException(cls + " isn't a subclass of " + this);
|
||||
}
|
||||
|
||||
private TypeToken<? super T> getSupertypeFromUpperBounds(Class<? super T> cls, Type[] typeArr) {
|
||||
for (Type type : typeArr) {
|
||||
TypeToken<?> of = of(type);
|
||||
if (of.isSubtypeOf(cls)) {
|
||||
return (TypeToken<? super T>) of.getSupertype(cls);
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(cls + " isn't a super type of " + this);
|
||||
}
|
||||
|
||||
private boolean is(Type type) {
|
||||
if (this.runtimeType.equals(type)) {
|
||||
return true;
|
||||
}
|
||||
if (!(type instanceof WildcardType)) {
|
||||
return false;
|
||||
}
|
||||
WildcardType wildcardType = (WildcardType) type;
|
||||
return every(wildcardType.getUpperBounds()).b(this.runtimeType) && every(wildcardType.getLowerBounds()).a(this.runtimeType);
|
||||
}
|
||||
|
||||
private boolean isOwnedBySubtypeOf(Type type) {
|
||||
Iterator<TypeToken<? super T>> it = getTypes().iterator();
|
||||
while (it.hasNext()) {
|
||||
Type ownerTypeIfPresent = it.next().getOwnerTypeIfPresent();
|
||||
if (ownerTypeIfPresent != null && of(ownerTypeIfPresent).isSubtypeOf(type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isSubtypeOfArrayType(GenericArrayType genericArrayType) {
|
||||
Type type = this.runtimeType;
|
||||
if (!(type instanceof Class)) {
|
||||
if (type instanceof GenericArrayType) {
|
||||
return of(((GenericArrayType) type).getGenericComponentType()).isSubtypeOf(genericArrayType.getGenericComponentType());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Class cls = (Class) type;
|
||||
if (cls.isArray()) {
|
||||
return of((Class) cls.getComponentType()).isSubtypeOf(genericArrayType.getGenericComponentType());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isSubtypeOfParameterizedType(ParameterizedType parameterizedType) {
|
||||
Class<? super Object> rawType = of(parameterizedType).getRawType();
|
||||
if (!someRawTypeIsSubclassOf(rawType)) {
|
||||
return false;
|
||||
}
|
||||
TypeVariable<Class<? super Object>>[] typeParameters = rawType.getTypeParameters();
|
||||
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
|
||||
for (int i = 0; i < typeParameters.length; i++) {
|
||||
if (!resolveType(typeParameters[i]).is(actualTypeArguments[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return Modifier.isStatic(((Class) parameterizedType.getRawType()).getModifiers()) || parameterizedType.getOwnerType() == null || isOwnedBySubtypeOf(parameterizedType.getOwnerType());
|
||||
}
|
||||
|
||||
private boolean isSupertypeOfArray(GenericArrayType genericArrayType) {
|
||||
Type type = this.runtimeType;
|
||||
if (type instanceof Class) {
|
||||
Class cls = (Class) type;
|
||||
return !cls.isArray() ? cls.isAssignableFrom(Object[].class) : of(genericArrayType.getGenericComponentType()).isSubtypeOf(cls.getComponentType());
|
||||
}
|
||||
if (type instanceof GenericArrayType) {
|
||||
return of(genericArrayType.getGenericComponentType()).isSubtypeOf(((GenericArrayType) this.runtimeType).getGenericComponentType());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isWrapper() {
|
||||
return Primitives.a().contains(this.runtimeType);
|
||||
}
|
||||
|
||||
private static Type newArrayClassOrGenericArrayType(Type type) {
|
||||
return Types.JavaVersion.JAVA7.a(type);
|
||||
}
|
||||
|
||||
public static <T> TypeToken<T> of(Class<T> cls) {
|
||||
return new SimpleTypeToken(cls);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public Type[] resolveInPlace(Type[] typeArr) {
|
||||
for (int i = 0; i < typeArr.length; i++) {
|
||||
typeArr[i] = resolveType(typeArr[i]).getType();
|
||||
}
|
||||
return typeArr;
|
||||
}
|
||||
|
||||
private TypeToken<?> resolveSupertype(Type type) {
|
||||
TypeToken<?> resolveType = resolveType(type);
|
||||
resolveType.typeResolver = this.typeResolver;
|
||||
return resolveType;
|
||||
}
|
||||
|
||||
private Type resolveTypeArgsForSubclass(Class<?> cls) {
|
||||
if ((this.runtimeType instanceof Class) && (cls.getTypeParameters().length == 0 || getRawType().getTypeParameters().length != 0)) {
|
||||
return cls;
|
||||
}
|
||||
TypeToken genericType = toGenericType(cls);
|
||||
return new TypeResolver().a(genericType.getSupertype(getRawType()).runtimeType, this.runtimeType).a(genericType.runtimeType);
|
||||
}
|
||||
|
||||
private boolean someRawTypeIsSubclassOf(Class<?> cls) {
|
||||
UnmodifiableIterator<Class<? super T>> it = getRawTypes().iterator();
|
||||
while (it.hasNext()) {
|
||||
if (cls.isAssignableFrom(it.next())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static <T> TypeToken<? extends T> toGenericType(Class<T> cls) {
|
||||
if (cls.isArray()) {
|
||||
return (TypeToken<? extends T>) of(Types.b(toGenericType(cls.getComponentType()).runtimeType));
|
||||
}
|
||||
TypeVariable<Class<T>>[] typeParameters = cls.getTypeParameters();
|
||||
Type type = (!cls.isMemberClass() || Modifier.isStatic(cls.getModifiers())) ? null : toGenericType(cls.getEnclosingClass()).runtimeType;
|
||||
return (typeParameters.length > 0 || !(type == null || type == cls.getEnclosingClass())) ? (TypeToken<? extends T>) of(Types.a(type, (Class<?>) cls, (Type[]) typeParameters)) : of((Class) cls);
|
||||
}
|
||||
|
||||
public final Invokable<T, T> constructor(Constructor<?> constructor) {
|
||||
Preconditions.a(constructor.getDeclaringClass() == getRawType(), "%s not declared by %s", constructor, getRawType());
|
||||
return new Invokable.ConstructorInvokable<T>(constructor) { // from class: com.google.common.reflect.TypeToken.2
|
||||
@Override // com.google.common.reflect.Element
|
||||
public TypeToken<T> a() {
|
||||
return TypeToken.this;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Invokable.ConstructorInvokable
|
||||
Type[] b() {
|
||||
return TypeToken.this.resolveInPlace(super.b());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Element
|
||||
public String toString() {
|
||||
return a() + "(" + Joiner.b(", ").a((Object[]) b()) + ")";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof TypeToken) {
|
||||
return this.runtimeType.equals(((TypeToken) obj).runtimeType);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public final TypeToken<?> getComponentType() {
|
||||
Type a = Types.a(this.runtimeType);
|
||||
if (a == null) {
|
||||
return null;
|
||||
}
|
||||
return of(a);
|
||||
}
|
||||
|
||||
final ImmutableList<TypeToken<? super T>> getGenericInterfaces() {
|
||||
Type type = this.runtimeType;
|
||||
if (type instanceof TypeVariable) {
|
||||
return boundsAsInterfaces(((TypeVariable) type).getBounds());
|
||||
}
|
||||
if (type instanceof WildcardType) {
|
||||
return boundsAsInterfaces(((WildcardType) type).getUpperBounds());
|
||||
}
|
||||
ImmutableList.Builder builder = ImmutableList.builder();
|
||||
for (Type type2 : getRawType().getGenericInterfaces()) {
|
||||
builder.a((ImmutableList.Builder) resolveSupertype(type2));
|
||||
}
|
||||
return builder.a();
|
||||
}
|
||||
|
||||
final TypeToken<? super T> getGenericSuperclass() {
|
||||
Type type = this.runtimeType;
|
||||
if (type instanceof TypeVariable) {
|
||||
return boundAsSuperclass(((TypeVariable) type).getBounds()[0]);
|
||||
}
|
||||
if (type instanceof WildcardType) {
|
||||
return boundAsSuperclass(((WildcardType) type).getUpperBounds()[0]);
|
||||
}
|
||||
Type genericSuperclass = getRawType().getGenericSuperclass();
|
||||
if (genericSuperclass == null) {
|
||||
return null;
|
||||
}
|
||||
return (TypeToken<? super T>) resolveSupertype(genericSuperclass);
|
||||
}
|
||||
|
||||
public final Class<? super T> getRawType() {
|
||||
return getRawTypes().iterator().next();
|
||||
}
|
||||
|
||||
public final TypeToken<? extends T> getSubtype(Class<?> cls) {
|
||||
Preconditions.a(!(this.runtimeType instanceof TypeVariable), "Cannot get subtype of type variable <%s>", this);
|
||||
Type type = this.runtimeType;
|
||||
if (type instanceof WildcardType) {
|
||||
return getSubtypeFromLowerBounds(cls, ((WildcardType) type).getLowerBounds());
|
||||
}
|
||||
if (isArray()) {
|
||||
return getArraySubtype(cls);
|
||||
}
|
||||
Preconditions.a(getRawType().isAssignableFrom(cls), "%s isn't a subclass of %s", cls, this);
|
||||
return (TypeToken<? extends T>) of(resolveTypeArgsForSubclass(cls));
|
||||
}
|
||||
|
||||
public final TypeToken<? super T> getSupertype(Class<? super T> cls) {
|
||||
Preconditions.a(someRawTypeIsSubclassOf(cls), "%s is not a super class of %s", cls, this);
|
||||
Type type = this.runtimeType;
|
||||
return type instanceof TypeVariable ? getSupertypeFromUpperBounds(cls, ((TypeVariable) type).getBounds()) : type instanceof WildcardType ? getSupertypeFromUpperBounds(cls, ((WildcardType) type).getUpperBounds()) : cls.isArray() ? getArraySupertype(cls) : (TypeToken<? super T>) resolveSupertype(toGenericType(cls).runtimeType);
|
||||
}
|
||||
|
||||
public final Type getType() {
|
||||
return this.runtimeType;
|
||||
}
|
||||
|
||||
public final TypeToken<T>.TypeSet getTypes() {
|
||||
return new TypeSet();
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return this.runtimeType.hashCode();
|
||||
}
|
||||
|
||||
public final boolean isArray() {
|
||||
return getComponentType() != null;
|
||||
}
|
||||
|
||||
public final boolean isPrimitive() {
|
||||
Type type = this.runtimeType;
|
||||
return (type instanceof Class) && ((Class) type).isPrimitive();
|
||||
}
|
||||
|
||||
public final boolean isSubtypeOf(TypeToken<?> typeToken) {
|
||||
return isSubtypeOf(typeToken.getType());
|
||||
}
|
||||
|
||||
public final boolean isSupertypeOf(TypeToken<?> typeToken) {
|
||||
return typeToken.isSubtypeOf(getType());
|
||||
}
|
||||
|
||||
public final Invokable<T, Object> method(Method method) {
|
||||
Preconditions.a(someRawTypeIsSubclassOf(method.getDeclaringClass()), "%s not declared by %s", method, this);
|
||||
return new Invokable.MethodInvokable<T>(method) { // from class: com.google.common.reflect.TypeToken.1
|
||||
@Override // com.google.common.reflect.Element
|
||||
public TypeToken<T> a() {
|
||||
return TypeToken.this;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Element
|
||||
public String toString() {
|
||||
return a() + "." + super.toString();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
final TypeToken<T> rejectTypeVariables() {
|
||||
new TypeVisitor() { // from class: com.google.common.reflect.TypeToken.3
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(TypeVariable<?> typeVariable) {
|
||||
throw new IllegalArgumentException(TypeToken.this.runtimeType + "contains a type variable and is not safe for the operation");
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(WildcardType wildcardType) {
|
||||
a(wildcardType.getLowerBounds());
|
||||
a(wildcardType.getUpperBounds());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(ParameterizedType parameterizedType) {
|
||||
a(parameterizedType.getActualTypeArguments());
|
||||
a(parameterizedType.getOwnerType());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(GenericArrayType genericArrayType) {
|
||||
a(genericArrayType.getGenericComponentType());
|
||||
}
|
||||
}.a(this.runtimeType);
|
||||
return this;
|
||||
}
|
||||
|
||||
public final TypeToken<?> resolveType(Type type) {
|
||||
Preconditions.a(type);
|
||||
TypeResolver typeResolver = this.typeResolver;
|
||||
if (typeResolver == null) {
|
||||
typeResolver = TypeResolver.b(this.runtimeType);
|
||||
this.typeResolver = typeResolver;
|
||||
}
|
||||
return of(typeResolver.a(type));
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return Types.e(this.runtimeType);
|
||||
}
|
||||
|
||||
public final TypeToken<T> unwrap() {
|
||||
return isWrapper() ? of(Primitives.a((Class) this.runtimeType)) : this;
|
||||
}
|
||||
|
||||
public final <X> TypeToken<T> where(TypeParameter<X> typeParameter, TypeToken<X> typeToken) {
|
||||
return new SimpleTypeToken(new TypeResolver().a(ImmutableMap.of(new TypeResolver.TypeVariableKey(typeParameter.a), typeToken.runtimeType)).a(this.runtimeType));
|
||||
}
|
||||
|
||||
public final TypeToken<T> wrap() {
|
||||
return isPrimitive() ? of(Primitives.b((Class) this.runtimeType)) : this;
|
||||
}
|
||||
|
||||
protected Object writeReplace() {
|
||||
return of(new TypeResolver().a(this.runtimeType));
|
||||
}
|
||||
|
||||
private final class ClassSet extends TypeToken<T>.TypeSet {
|
||||
private transient ImmutableSet<TypeToken<? super T>> a;
|
||||
|
||||
private ClassSet() {
|
||||
super();
|
||||
}
|
||||
|
||||
private Object readResolve() {
|
||||
return TypeToken.this.getTypes().classes();
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public TypeToken<T>.TypeSet classes() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public TypeToken<T>.TypeSet interfaces() {
|
||||
throw new UnsupportedOperationException("classes().interfaces() not supported.");
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public Set<Class<? super T>> rawTypes() {
|
||||
return ImmutableSet.copyOf((Collection) TypeCollector.b.a().a(TypeToken.this.getRawTypes()));
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet, com.google.common.collect.ForwardingSet, com.google.common.collect.ForwardingCollection, com.google.common.collect.ForwardingObject
|
||||
public Set<TypeToken<? super T>> delegate() {
|
||||
ImmutableSet<TypeToken<? super T>> immutableSet = this.a;
|
||||
if (immutableSet != null) {
|
||||
return immutableSet;
|
||||
}
|
||||
ImmutableSet<TypeToken<? super T>> a = FluentIterable.b(TypeCollector.a.a().a((TypeCollector<TypeToken<?>>) TypeToken.this)).a(TypeFilter.IGNORE_TYPE_VARIABLE_OR_WILDCARD).a();
|
||||
this.a = a;
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
private final class InterfaceSet extends TypeToken<T>.TypeSet {
|
||||
private final transient TypeToken<T>.TypeSet a;
|
||||
private transient ImmutableSet<TypeToken<? super T>> b;
|
||||
|
||||
InterfaceSet(TypeToken<T>.TypeSet typeSet) {
|
||||
super();
|
||||
this.a = typeSet;
|
||||
}
|
||||
|
||||
private Object readResolve() {
|
||||
return TypeToken.this.getTypes().interfaces();
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public TypeToken<T>.TypeSet classes() {
|
||||
throw new UnsupportedOperationException("interfaces().classes() not supported.");
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public TypeToken<T>.TypeSet interfaces() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet
|
||||
public Set<Class<? super T>> rawTypes() {
|
||||
return FluentIterable.b(TypeCollector.b.a(TypeToken.this.getRawTypes())).a(new Predicate<Class<?>>(this) { // from class: com.google.common.reflect.TypeToken.InterfaceSet.1
|
||||
@Override // com.google.common.base.Predicate
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public boolean apply(Class<?> cls) {
|
||||
return cls.isInterface();
|
||||
}
|
||||
}).a();
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
@Override // com.google.common.reflect.TypeToken.TypeSet, com.google.common.collect.ForwardingSet, com.google.common.collect.ForwardingCollection, com.google.common.collect.ForwardingObject
|
||||
public Set<TypeToken<? super T>> delegate() {
|
||||
ImmutableSet<TypeToken<? super T>> immutableSet = this.b;
|
||||
if (immutableSet != null) {
|
||||
return immutableSet;
|
||||
}
|
||||
ImmutableSet<TypeToken<? super T>> a = FluentIterable.b(this.a).a(TypeFilter.INTERFACE_ONLY).a();
|
||||
this.b = a;
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
public class TypeSet extends ForwardingSet<TypeToken<? super T>> implements Serializable {
|
||||
private static final long serialVersionUID = 0;
|
||||
private transient ImmutableSet<TypeToken<? super T>> types;
|
||||
|
||||
TypeSet() {
|
||||
}
|
||||
|
||||
public TypeToken<T>.TypeSet classes() {
|
||||
return new ClassSet();
|
||||
}
|
||||
|
||||
public TypeToken<T>.TypeSet interfaces() {
|
||||
return new InterfaceSet(this);
|
||||
}
|
||||
|
||||
public Set<Class<? super T>> rawTypes() {
|
||||
return ImmutableSet.copyOf((Collection) TypeCollector.b.a(TypeToken.this.getRawTypes()));
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: protected */
|
||||
@Override // com.google.common.collect.ForwardingSet, com.google.common.collect.ForwardingCollection, com.google.common.collect.ForwardingObject
|
||||
public Set<TypeToken<? super T>> delegate() {
|
||||
ImmutableSet<TypeToken<? super T>> immutableSet = this.types;
|
||||
if (immutableSet != null) {
|
||||
return immutableSet;
|
||||
}
|
||||
ImmutableSet<TypeToken<? super T>> a = FluentIterable.b(TypeCollector.a.a((TypeCollector<TypeToken<?>>) TypeToken.this)).a(TypeFilter.IGNORE_TYPE_VARIABLE_OR_WILDCARD).a();
|
||||
this.types = a;
|
||||
return a;
|
||||
}
|
||||
}
|
||||
|
||||
protected TypeToken() {
|
||||
this.runtimeType = capture();
|
||||
Preconditions.b(!(r0 instanceof TypeVariable), "Cannot construct a TypeToken for a type variable.\nYou probably meant to call new TypeToken<%s>(getClass()) that can resolve the type variable for you.\nIf you do need to create a TypeToken of a type variable, please use TypeToken.of() instead.", this.runtimeType);
|
||||
}
|
||||
|
||||
public static TypeToken<?> of(Type type) {
|
||||
return new SimpleTypeToken(type);
|
||||
}
|
||||
|
||||
public final boolean isSubtypeOf(Type type) {
|
||||
Preconditions.a(type);
|
||||
if (type instanceof WildcardType) {
|
||||
return any(((WildcardType) type).getLowerBounds()).b(this.runtimeType);
|
||||
}
|
||||
Type type2 = this.runtimeType;
|
||||
if (type2 instanceof WildcardType) {
|
||||
return any(((WildcardType) type2).getUpperBounds()).a(type);
|
||||
}
|
||||
if (type2 instanceof TypeVariable) {
|
||||
return type2.equals(type) || any(((TypeVariable) this.runtimeType).getBounds()).a(type);
|
||||
}
|
||||
if (type2 instanceof GenericArrayType) {
|
||||
return of(type).isSupertypeOfArray((GenericArrayType) this.runtimeType);
|
||||
}
|
||||
if (type instanceof Class) {
|
||||
return someRawTypeIsSubclassOf((Class) type);
|
||||
}
|
||||
if (type instanceof ParameterizedType) {
|
||||
return isSubtypeOfParameterizedType((ParameterizedType) type);
|
||||
}
|
||||
if (type instanceof GenericArrayType) {
|
||||
return isSubtypeOfArrayType((GenericArrayType) type);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public final boolean isSupertypeOf(Type type) {
|
||||
return of(type).isSubtypeOf(getType());
|
||||
}
|
||||
|
||||
protected TypeToken(Class<?> cls) {
|
||||
Type capture = super.capture();
|
||||
if (capture instanceof Class) {
|
||||
this.runtimeType = capture;
|
||||
} else {
|
||||
this.runtimeType = of((Class) cls).resolveType(capture).runtimeType;
|
||||
}
|
||||
}
|
||||
|
||||
public final <X> TypeToken<T> where(TypeParameter<X> typeParameter, Class<X> cls) {
|
||||
return where(typeParameter, of((Class) cls));
|
||||
}
|
||||
|
||||
private TypeToken(Type type) {
|
||||
Preconditions.a(type);
|
||||
this.runtimeType = type;
|
||||
}
|
||||
}
|
56
sources/com/google/common/reflect/TypeVisitor.java
Normal file
56
sources/com/google/common/reflect/TypeVisitor.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
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.Set;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
abstract class TypeVisitor {
|
||||
private final Set<Type> a = Sets.a();
|
||||
|
||||
TypeVisitor() {
|
||||
}
|
||||
|
||||
void a(Class<?> cls) {
|
||||
}
|
||||
|
||||
void a(GenericArrayType genericArrayType) {
|
||||
}
|
||||
|
||||
void a(ParameterizedType parameterizedType) {
|
||||
}
|
||||
|
||||
abstract void a(TypeVariable<?> typeVariable);
|
||||
|
||||
abstract void a(WildcardType wildcardType);
|
||||
|
||||
public final void a(Type... typeArr) {
|
||||
for (Type type : typeArr) {
|
||||
if (type != null && this.a.add(type)) {
|
||||
try {
|
||||
if (type instanceof TypeVariable) {
|
||||
a((TypeVariable<?>) type);
|
||||
} else if (type instanceof WildcardType) {
|
||||
a((WildcardType) type);
|
||||
} else if (type instanceof ParameterizedType) {
|
||||
a((ParameterizedType) type);
|
||||
} else if (type instanceof Class) {
|
||||
a((Class<?>) type);
|
||||
} else {
|
||||
if (!(type instanceof GenericArrayType)) {
|
||||
throw new AssertionError("Unknown type: " + type);
|
||||
}
|
||||
a((GenericArrayType) type);
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
this.a.remove(type);
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
501
sources/com/google/common/reflect/Types.java
Normal file
501
sources/com/google/common/reflect/Types.java
Normal file
@@ -0,0 +1,501 @@
|
||||
package com.google.common.reflect;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.UnmodifiableIterator;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.AnnotatedElement;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.GenericArrayType;
|
||||
import java.lang.reflect.GenericDeclaration;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.lang.reflect.WildcardType;
|
||||
import java.security.AccessControlException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
final class Types {
|
||||
private static final Function<Type, String> a = new Function<Type, String>() { // from class: com.google.common.reflect.Types.1
|
||||
@Override // com.google.common.base.Function
|
||||
/* renamed from: a, reason: merged with bridge method [inline-methods] */
|
||||
public String apply(Type type) {
|
||||
return JavaVersion.d.b(type);
|
||||
}
|
||||
};
|
||||
private static final Joiner b = Joiner.b(", ").a("null");
|
||||
|
||||
private enum ClassOwnership {
|
||||
OWNED_BY_ENCLOSING_CLASS { // from class: com.google.common.reflect.Types.ClassOwnership.1
|
||||
@Override // com.google.common.reflect.Types.ClassOwnership
|
||||
Class<?> a(Class<?> cls) {
|
||||
return cls.getEnclosingClass();
|
||||
}
|
||||
},
|
||||
LOCAL_CLASS_HAS_NO_OWNER { // from class: com.google.common.reflect.Types.ClassOwnership.2
|
||||
@Override // com.google.common.reflect.Types.ClassOwnership
|
||||
Class<?> a(Class<?> cls) {
|
||||
if (cls.isLocalClass()) {
|
||||
return null;
|
||||
}
|
||||
return cls.getEnclosingClass();
|
||||
}
|
||||
};
|
||||
|
||||
static final ClassOwnership c = c();
|
||||
|
||||
private static ClassOwnership c() {
|
||||
new C1LocalClass<String>() { // from class: com.google.common.reflect.Types.ClassOwnership.3
|
||||
};
|
||||
ParameterizedType parameterizedType = (ParameterizedType) AnonymousClass3.class.getGenericSuperclass();
|
||||
for (ClassOwnership classOwnership : values()) {
|
||||
if (classOwnership.a(C1LocalClass.class) == parameterizedType.getOwnerType()) {
|
||||
return classOwnership;
|
||||
}
|
||||
}
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
abstract Class<?> a(Class<?> cls);
|
||||
}
|
||||
|
||||
private static final class GenericArrayTypeImpl implements GenericArrayType, Serializable {
|
||||
private final Type a;
|
||||
|
||||
GenericArrayTypeImpl(Type type) {
|
||||
this.a = JavaVersion.d.c(type);
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof GenericArrayType) {
|
||||
return Objects.a(getGenericComponentType(), ((GenericArrayType) obj).getGenericComponentType());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.GenericArrayType
|
||||
public Type getGenericComponentType() {
|
||||
return this.a;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return this.a.hashCode();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return Types.e(this.a) + "[]";
|
||||
}
|
||||
}
|
||||
|
||||
enum JavaVersion {
|
||||
JAVA6 { // from class: com.google.common.reflect.Types.JavaVersion.1
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
Type c(Type type) {
|
||||
Preconditions.a(type);
|
||||
if (!(type instanceof Class)) {
|
||||
return type;
|
||||
}
|
||||
Class cls = (Class) type;
|
||||
return cls.isArray() ? new GenericArrayTypeImpl(cls.getComponentType()) : type;
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
public GenericArrayType a(Type type) {
|
||||
return new GenericArrayTypeImpl(type);
|
||||
}
|
||||
},
|
||||
JAVA7 { // from class: com.google.common.reflect.Types.JavaVersion.2
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
Type a(Type type) {
|
||||
return type instanceof Class ? Types.a((Class<?>) type) : new GenericArrayTypeImpl(type);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
Type c(Type type) {
|
||||
Preconditions.a(type);
|
||||
return type;
|
||||
}
|
||||
},
|
||||
JAVA8 { // from class: com.google.common.reflect.Types.JavaVersion.3
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
Type a(Type type) {
|
||||
return JavaVersion.JAVA7.a(type);
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
String b(Type type) {
|
||||
try {
|
||||
return (String) Type.class.getMethod("getTypeName", new Class[0]).invoke(type, new Object[0]);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (NoSuchMethodException unused) {
|
||||
throw new AssertionError("Type.getTypeName should be available in Java 8");
|
||||
} catch (InvocationTargetException e2) {
|
||||
throw new RuntimeException(e2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.Types.JavaVersion
|
||||
Type c(Type type) {
|
||||
return JavaVersion.JAVA7.c(type);
|
||||
}
|
||||
};
|
||||
|
||||
static final JavaVersion d;
|
||||
|
||||
static {
|
||||
if (AnnotatedElement.class.isAssignableFrom(TypeVariable.class)) {
|
||||
d = JAVA8;
|
||||
} else if (new TypeCapture<int[]>() { // from class: com.google.common.reflect.Types.JavaVersion.4
|
||||
}.capture() instanceof Class) {
|
||||
d = JAVA7;
|
||||
} else {
|
||||
d = JAVA6;
|
||||
}
|
||||
}
|
||||
|
||||
final ImmutableList<Type> a(Type[] typeArr) {
|
||||
ImmutableList.Builder builder = ImmutableList.builder();
|
||||
for (Type type : typeArr) {
|
||||
builder.a((ImmutableList.Builder) c(type));
|
||||
}
|
||||
return builder.a();
|
||||
}
|
||||
|
||||
abstract Type a(Type type);
|
||||
|
||||
String b(Type type) {
|
||||
return Types.e(type);
|
||||
}
|
||||
|
||||
abstract Type c(Type type);
|
||||
}
|
||||
|
||||
static final class NativeTypeVariableEquals<X> {
|
||||
static final boolean a = !NativeTypeVariableEquals.class.getTypeParameters()[0].equals(Types.a(NativeTypeVariableEquals.class, "X", new Type[0]));
|
||||
|
||||
NativeTypeVariableEquals() {
|
||||
}
|
||||
}
|
||||
|
||||
private static final class ParameterizedTypeImpl implements ParameterizedType, Serializable {
|
||||
private final Type a;
|
||||
private final ImmutableList<Type> b;
|
||||
private final Class<?> c;
|
||||
|
||||
ParameterizedTypeImpl(Type type, Class<?> cls, Type[] typeArr) {
|
||||
Preconditions.a(cls);
|
||||
Preconditions.a(typeArr.length == cls.getTypeParameters().length);
|
||||
Types.b(typeArr, "type parameter");
|
||||
this.a = type;
|
||||
this.c = cls;
|
||||
this.b = JavaVersion.d.a(typeArr);
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof ParameterizedType)) {
|
||||
return false;
|
||||
}
|
||||
ParameterizedType parameterizedType = (ParameterizedType) obj;
|
||||
return getRawType().equals(parameterizedType.getRawType()) && Objects.a(getOwnerType(), parameterizedType.getOwnerType()) && Arrays.equals(getActualTypeArguments(), parameterizedType.getActualTypeArguments());
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.ParameterizedType
|
||||
public Type[] getActualTypeArguments() {
|
||||
return Types.b((Collection<Type>) this.b);
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.ParameterizedType
|
||||
public Type getOwnerType() {
|
||||
return this.a;
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.ParameterizedType
|
||||
public Type getRawType() {
|
||||
return this.c;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
Type type = this.a;
|
||||
return ((type == null ? 0 : type.hashCode()) ^ this.b.hashCode()) ^ this.c.hashCode();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
Type type = this.a;
|
||||
if (type != null) {
|
||||
sb.append(JavaVersion.d.b(type));
|
||||
sb.append('.');
|
||||
}
|
||||
sb.append(this.c.getName());
|
||||
sb.append('<');
|
||||
sb.append(Types.b.a(Iterables.a((Iterable) this.b, Types.a)));
|
||||
sb.append('>');
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
private static final class TypeVariableImpl<D extends GenericDeclaration> {
|
||||
private final D a;
|
||||
private final String b;
|
||||
private final ImmutableList<Type> c;
|
||||
|
||||
TypeVariableImpl(D d, String str, Type[] typeArr) {
|
||||
Types.b(typeArr, "bound for type variable");
|
||||
Preconditions.a(d);
|
||||
this.a = d;
|
||||
Preconditions.a(str);
|
||||
this.b = str;
|
||||
this.c = ImmutableList.copyOf(typeArr);
|
||||
}
|
||||
|
||||
public D a() {
|
||||
return this.a;
|
||||
}
|
||||
|
||||
public String b() {
|
||||
return this.b;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (!NativeTypeVariableEquals.a) {
|
||||
if (!(obj instanceof TypeVariable)) {
|
||||
return false;
|
||||
}
|
||||
TypeVariable typeVariable = (TypeVariable) obj;
|
||||
return this.b.equals(typeVariable.getName()) && this.a.equals(typeVariable.getGenericDeclaration());
|
||||
}
|
||||
if (obj == null || !Proxy.isProxyClass(obj.getClass()) || !(Proxy.getInvocationHandler(obj) instanceof TypeVariableInvocationHandler)) {
|
||||
return false;
|
||||
}
|
||||
TypeVariableImpl typeVariableImpl = ((TypeVariableInvocationHandler) Proxy.getInvocationHandler(obj)).a;
|
||||
return this.b.equals(typeVariableImpl.b()) && this.a.equals(typeVariableImpl.a()) && this.c.equals(typeVariableImpl.c);
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return this.a.hashCode() ^ this.b.hashCode();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.b;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class TypeVariableInvocationHandler implements InvocationHandler {
|
||||
private static final ImmutableMap<String, Method> b;
|
||||
private final TypeVariableImpl<?> a;
|
||||
|
||||
static {
|
||||
ImmutableMap.Builder builder = ImmutableMap.builder();
|
||||
for (Method method : TypeVariableImpl.class.getMethods()) {
|
||||
if (method.getDeclaringClass().equals(TypeVariableImpl.class)) {
|
||||
try {
|
||||
method.setAccessible(true);
|
||||
} catch (AccessControlException unused) {
|
||||
}
|
||||
builder.a(method.getName(), method);
|
||||
}
|
||||
}
|
||||
b = builder.a();
|
||||
}
|
||||
|
||||
TypeVariableInvocationHandler(TypeVariableImpl<?> typeVariableImpl) {
|
||||
this.a = typeVariableImpl;
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.InvocationHandler
|
||||
public Object invoke(Object obj, Method method, Object[] objArr) throws Throwable {
|
||||
String name = method.getName();
|
||||
Method method2 = b.get(name);
|
||||
if (method2 == null) {
|
||||
throw new UnsupportedOperationException(name);
|
||||
}
|
||||
try {
|
||||
return method2.invoke(this.a, objArr);
|
||||
} catch (InvocationTargetException e) {
|
||||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static final class WildcardTypeImpl implements WildcardType, Serializable {
|
||||
private final ImmutableList<Type> a;
|
||||
private final ImmutableList<Type> b;
|
||||
|
||||
WildcardTypeImpl(Type[] typeArr, Type[] typeArr2) {
|
||||
Types.b(typeArr, "lower bound for wildcard");
|
||||
Types.b(typeArr2, "upper bound for wildcard");
|
||||
this.a = JavaVersion.d.a(typeArr);
|
||||
this.b = JavaVersion.d.a(typeArr2);
|
||||
}
|
||||
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof WildcardType)) {
|
||||
return false;
|
||||
}
|
||||
WildcardType wildcardType = (WildcardType) obj;
|
||||
return this.a.equals(Arrays.asList(wildcardType.getLowerBounds())) && this.b.equals(Arrays.asList(wildcardType.getUpperBounds()));
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.WildcardType
|
||||
public Type[] getLowerBounds() {
|
||||
return Types.b((Collection<Type>) this.a);
|
||||
}
|
||||
|
||||
@Override // java.lang.reflect.WildcardType
|
||||
public Type[] getUpperBounds() {
|
||||
return Types.b((Collection<Type>) this.b);
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return this.a.hashCode() ^ this.b.hashCode();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("?");
|
||||
UnmodifiableIterator<Type> it = this.a.iterator();
|
||||
while (it.hasNext()) {
|
||||
Type next = it.next();
|
||||
sb.append(" super ");
|
||||
sb.append(JavaVersion.d.b(next));
|
||||
}
|
||||
for (Type type : Types.b((Iterable<Type>) this.b)) {
|
||||
sb.append(" extends ");
|
||||
sb.append(JavaVersion.d.b(type));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
static WildcardType c(Type type) {
|
||||
return new WildcardTypeImpl(new Type[0], new Type[]{type});
|
||||
}
|
||||
|
||||
static WildcardType d(Type type) {
|
||||
return new WildcardTypeImpl(new Type[]{type}, new Type[]{Object.class});
|
||||
}
|
||||
|
||||
static String e(Type type) {
|
||||
return type instanceof Class ? ((Class) type).getName() : type.toString();
|
||||
}
|
||||
|
||||
static Type b(Type type) {
|
||||
if (!(type instanceof WildcardType)) {
|
||||
return JavaVersion.d.a(type);
|
||||
}
|
||||
WildcardType wildcardType = (WildcardType) type;
|
||||
Type[] lowerBounds = wildcardType.getLowerBounds();
|
||||
Preconditions.a(lowerBounds.length <= 1, "Wildcard cannot have more than one lower bounds.");
|
||||
if (lowerBounds.length == 1) {
|
||||
return d(b(lowerBounds[0]));
|
||||
}
|
||||
Type[] upperBounds = wildcardType.getUpperBounds();
|
||||
Preconditions.a(upperBounds.length == 1, "Wildcard should have only one upper bound.");
|
||||
return c(b(upperBounds[0]));
|
||||
}
|
||||
|
||||
static ParameterizedType a(Type type, Class<?> cls, Type... typeArr) {
|
||||
if (type == null) {
|
||||
return a(cls, typeArr);
|
||||
}
|
||||
Preconditions.a(typeArr);
|
||||
Preconditions.a(cls.getEnclosingClass() != null, "Owner type for unenclosed %s", cls);
|
||||
return new ParameterizedTypeImpl(type, cls, typeArr);
|
||||
}
|
||||
|
||||
static ParameterizedType a(Class<?> cls, Type... typeArr) {
|
||||
return new ParameterizedTypeImpl(ClassOwnership.c.a(cls), cls, typeArr);
|
||||
}
|
||||
|
||||
static <D extends GenericDeclaration> TypeVariable<D> a(D d, String str, Type... typeArr) {
|
||||
if (typeArr.length == 0) {
|
||||
typeArr = new Type[]{Object.class};
|
||||
}
|
||||
return b(d, str, typeArr);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static Type b(Type[] typeArr) {
|
||||
for (Type type : typeArr) {
|
||||
Type a2 = a(type);
|
||||
if (a2 != null) {
|
||||
if (a2 instanceof Class) {
|
||||
Class cls = (Class) a2;
|
||||
if (cls.isPrimitive()) {
|
||||
return cls;
|
||||
}
|
||||
}
|
||||
return c(a2);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static Type a(Type type) {
|
||||
Preconditions.a(type);
|
||||
final AtomicReference atomicReference = new AtomicReference();
|
||||
new TypeVisitor() { // from class: com.google.common.reflect.Types.2
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(TypeVariable<?> typeVariable) {
|
||||
atomicReference.set(Types.b(typeVariable.getBounds()));
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(WildcardType wildcardType) {
|
||||
atomicReference.set(Types.b(wildcardType.getUpperBounds()));
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(GenericArrayType genericArrayType) {
|
||||
atomicReference.set(genericArrayType.getGenericComponentType());
|
||||
}
|
||||
|
||||
@Override // com.google.common.reflect.TypeVisitor
|
||||
void a(Class<?> cls) {
|
||||
atomicReference.set(cls.getComponentType());
|
||||
}
|
||||
}.a(type);
|
||||
return (Type) atomicReference.get();
|
||||
}
|
||||
|
||||
static Class<?> a(Class<?> cls) {
|
||||
return Array.newInstance(cls, 0).getClass();
|
||||
}
|
||||
|
||||
private static <D extends GenericDeclaration> TypeVariable<D> b(D d, String str, Type[] typeArr) {
|
||||
return (TypeVariable) Reflection.a(TypeVariable.class, new TypeVariableInvocationHandler(new TypeVariableImpl(d, str, typeArr)));
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static Type[] b(Collection<Type> collection) {
|
||||
return (Type[]) collection.toArray(new Type[collection.size()]);
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static Iterable<Type> b(Iterable<Type> iterable) {
|
||||
return Iterables.b(iterable, Predicates.a(Predicates.a(Object.class)));
|
||||
}
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: private */
|
||||
public static void b(Type[] typeArr, String str) {
|
||||
for (Type type : typeArr) {
|
||||
if (type instanceof Class) {
|
||||
Preconditions.a(!r2.isPrimitive(), "Primitive type '%s' used as %s", (Class) type, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user