272 lines
9.2 KiB
Java
272 lines
9.2 KiB
Java
|
package com.huawei.hms.framework.common;
|
||
|
|
||
|
import android.text.TextUtils;
|
||
|
import java.lang.reflect.Field;
|
||
|
import java.lang.reflect.Method;
|
||
|
import java.security.AccessController;
|
||
|
import java.security.PrivilegedAction;
|
||
|
|
||
|
/* loaded from: classes2.dex */
|
||
|
public class ReflectionUtils {
|
||
|
private static final String TAG = "ReflectionUtils";
|
||
|
|
||
|
private static Object invoke(Object obj, Method method, Object... objArr) throws UnsupportedOperationException {
|
||
|
if (method == null) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
return method.invoke(obj, objArr);
|
||
|
} catch (RuntimeException e) {
|
||
|
Logger.e(TAG, "RuntimeException in invoke:", e);
|
||
|
return null;
|
||
|
} catch (Exception e2) {
|
||
|
Logger.e(TAG, "Exception in invoke:", e2);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Method getMethod(Class<?> cls, String str, Class<?>... clsArr) {
|
||
|
if (cls == null || str == null) {
|
||
|
Logger.w(TAG, "targetClass is null pr name is null:");
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
return cls.getDeclaredMethod(str, clsArr);
|
||
|
} catch (NoSuchMethodException e) {
|
||
|
Logger.e(TAG, "NoSuchMethodException:", e);
|
||
|
return null;
|
||
|
} catch (SecurityException e2) {
|
||
|
Logger.e(TAG, "SecurityException:", e2);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void setClassType(Class<?>[] clsArr, Object obj, int i) {
|
||
|
if (obj instanceof Integer) {
|
||
|
clsArr[i] = Integer.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Long) {
|
||
|
clsArr[i] = Long.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Double) {
|
||
|
clsArr[i] = Double.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Float) {
|
||
|
clsArr[i] = Float.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Boolean) {
|
||
|
clsArr[i] = Boolean.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Character) {
|
||
|
clsArr[i] = Character.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Byte) {
|
||
|
clsArr[i] = Byte.TYPE;
|
||
|
return;
|
||
|
}
|
||
|
if (obj instanceof Void) {
|
||
|
clsArr[i] = Void.TYPE;
|
||
|
} else if (obj instanceof Short) {
|
||
|
clsArr[i] = Short.TYPE;
|
||
|
} else {
|
||
|
clsArr[i] = obj.getClass();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Object invokeStaticMethod(String str, String str2, Object... objArr) {
|
||
|
Class[] clsArr;
|
||
|
if (str == null) {
|
||
|
return null;
|
||
|
}
|
||
|
if (objArr != null) {
|
||
|
int length = objArr.length;
|
||
|
clsArr = new Class[length];
|
||
|
for (int i = 0; i < length; i++) {
|
||
|
setClassType(clsArr, objArr[i], i);
|
||
|
}
|
||
|
} else {
|
||
|
clsArr = null;
|
||
|
}
|
||
|
Method method = getMethod(getClass(str), str2, clsArr);
|
||
|
if (method == null) {
|
||
|
return null;
|
||
|
}
|
||
|
return invoke(null, method, objArr);
|
||
|
}
|
||
|
|
||
|
public static Object invokeStaticMethod(String str, String str2, Class<?>[] clsArr, Object... objArr) {
|
||
|
Method method = getMethod(getClass(str), str2, clsArr);
|
||
|
if (method == null) {
|
||
|
return null;
|
||
|
}
|
||
|
return invoke(null, method, objArr);
|
||
|
}
|
||
|
|
||
|
public static Object getFieldObj(Object obj, String str) {
|
||
|
if (obj == null || TextUtils.isEmpty(str)) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
Field declaredField = obj.getClass().getDeclaredField(str);
|
||
|
AccessController.doPrivileged(new PrivilegedAction(declaredField) { // from class: com.huawei.hms.framework.common.ReflectionUtils.1
|
||
|
final Field val$field;
|
||
|
|
||
|
{
|
||
|
this.val$field = declaredField;
|
||
|
}
|
||
|
|
||
|
@Override // java.security.PrivilegedAction
|
||
|
public Object run() {
|
||
|
this.val$field.setAccessible(true);
|
||
|
return null;
|
||
|
}
|
||
|
});
|
||
|
return declaredField.get(obj);
|
||
|
} catch (IllegalAccessException e) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: IllegalAccessException:", e);
|
||
|
return null;
|
||
|
} catch (IllegalArgumentException e2) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: IllegalArgumentException:", e2);
|
||
|
return null;
|
||
|
} catch (NoSuchFieldException e3) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: NoSuchFieldException:", e3);
|
||
|
return null;
|
||
|
} catch (SecurityException e4) {
|
||
|
Logger.e(TAG, "not security int method getFieldObj,SecurityException:", e4);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Field getField(Object obj, String str) {
|
||
|
if (obj == null || TextUtils.isEmpty(str)) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
Field declaredField = obj.getClass().getDeclaredField(str);
|
||
|
AccessController.doPrivileged(new PrivilegedAction(declaredField) { // from class: com.huawei.hms.framework.common.ReflectionUtils.2
|
||
|
final Field val$field;
|
||
|
|
||
|
{
|
||
|
this.val$field = declaredField;
|
||
|
}
|
||
|
|
||
|
@Override // java.security.PrivilegedAction
|
||
|
public Object run() {
|
||
|
this.val$field.setAccessible(true);
|
||
|
return null;
|
||
|
}
|
||
|
});
|
||
|
return declaredField;
|
||
|
} catch (IllegalArgumentException e) {
|
||
|
Logger.e(TAG, "Exception in getField :: IllegalArgumentException:", e);
|
||
|
return null;
|
||
|
} catch (NoSuchFieldException e2) {
|
||
|
Logger.e(TAG, "Exception in getField :: NoSuchFieldException:", e2);
|
||
|
return null;
|
||
|
} catch (SecurityException e3) {
|
||
|
Logger.e(TAG, "not security int method getField,SecurityException:", e3);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Object getStaticFieldObj(String str, String str2) {
|
||
|
Class<?> cls;
|
||
|
if (str == null || (cls = getClass(str)) == null || TextUtils.isEmpty(str2)) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
Field declaredField = cls.getDeclaredField(str2);
|
||
|
AccessController.doPrivileged(new PrivilegedAction(declaredField) { // from class: com.huawei.hms.framework.common.ReflectionUtils.3
|
||
|
final Field val$field;
|
||
|
|
||
|
{
|
||
|
this.val$field = declaredField;
|
||
|
}
|
||
|
|
||
|
@Override // java.security.PrivilegedAction
|
||
|
public Object run() {
|
||
|
this.val$field.setAccessible(true);
|
||
|
return null;
|
||
|
}
|
||
|
});
|
||
|
return declaredField.get(cls);
|
||
|
} catch (IllegalAccessException e) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: IllegalAccessException:", e);
|
||
|
return null;
|
||
|
} catch (IllegalArgumentException e2) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: IllegalArgumentException:", e2);
|
||
|
return null;
|
||
|
} catch (NoSuchFieldException e3) {
|
||
|
Logger.e(TAG, "Exception in getFieldObj :: NoSuchFieldException:", e3);
|
||
|
return null;
|
||
|
} catch (SecurityException e4) {
|
||
|
Logger.e(TAG, "not security int method getStaticFieldObj,SecurityException:", e4);
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static boolean checkCompatible(String str) {
|
||
|
try {
|
||
|
tryLoadClass(str);
|
||
|
return true;
|
||
|
} catch (Exception unused) {
|
||
|
StringBuilder sb = new StringBuilder();
|
||
|
sb.append(str);
|
||
|
sb.append("ClassNotFoundException");
|
||
|
Logger.w(TAG, sb.toString());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static boolean checkCompatible(String str, String str2, Class<?>... clsArr) {
|
||
|
try {
|
||
|
if (str == null || str2 == null) {
|
||
|
Logger.w(TAG, "targetClass is null or name is null:");
|
||
|
return false;
|
||
|
}
|
||
|
Class.forName(str).getDeclaredMethod(str2, clsArr);
|
||
|
StringBuilder sb = new StringBuilder("has method : ");
|
||
|
sb.append(str2);
|
||
|
Logger.v(TAG, sb.toString());
|
||
|
return true;
|
||
|
} catch (RuntimeException unused) {
|
||
|
StringBuilder sb2 = new StringBuilder();
|
||
|
sb2.append(str);
|
||
|
sb2.append(" RuntimeException");
|
||
|
Logger.w(TAG, sb2.toString());
|
||
|
return false;
|
||
|
} catch (Exception unused2) {
|
||
|
StringBuilder sb3 = new StringBuilder();
|
||
|
sb3.append(str2);
|
||
|
sb3.append(" NoSuchMethodException");
|
||
|
Logger.w(TAG, sb3.toString());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void tryLoadClass(String str) throws ClassNotFoundException {
|
||
|
ClassLoader classLoader = ReflectionUtils.class.getClassLoader();
|
||
|
if (classLoader == null) {
|
||
|
throw new ClassNotFoundException("not found classloader");
|
||
|
}
|
||
|
classLoader.loadClass(str);
|
||
|
}
|
||
|
|
||
|
private static Class<?> getClass(String str) {
|
||
|
if (str == null) {
|
||
|
return null;
|
||
|
}
|
||
|
try {
|
||
|
return Class.forName(str);
|
||
|
} catch (ClassNotFoundException unused) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
}
|