Files
rr3-apk/decompiled/sources/com/google/gson/internal/reflect/UnsafeReflectionAccessor.java
Daniel Elliott f9d20bb3fc Add decompiled APK source code (JADX)
- 28,932 files
- Full Java source code
- Smali files
- Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-18 14:52:23 -08:00

56 lines
2.1 KiB
Java

package com.google.gson.internal.reflect;
import com.google.gson.JsonIOException;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
/* loaded from: classes3.dex */
final class UnsafeReflectionAccessor extends ReflectionAccessor {
private static Class unsafeClass;
private final Object theUnsafe = getUnsafeInstance();
private final Field overrideField = getOverrideField();
@Override // com.google.gson.internal.reflect.ReflectionAccessor
public void makeAccessible(AccessibleObject accessibleObject) {
if (makeAccessibleWithUnsafe(accessibleObject)) {
return;
}
try {
accessibleObject.setAccessible(true);
} catch (SecurityException e) {
throw new JsonIOException("Gson couldn't modify fields for " + accessibleObject + "\nand sun.misc.Unsafe not found.\nEither write a custom type adapter, or make fields accessible, or include sun.misc.Unsafe.", e);
}
}
public boolean makeAccessibleWithUnsafe(AccessibleObject accessibleObject) {
if (this.theUnsafe != null && this.overrideField != null) {
try {
unsafeClass.getMethod("putBoolean", Object.class, Long.TYPE, Boolean.TYPE).invoke(this.theUnsafe, accessibleObject, Long.valueOf(((Long) unsafeClass.getMethod("objectFieldOffset", Field.class).invoke(this.theUnsafe, this.overrideField)).longValue()), Boolean.TRUE);
return true;
} catch (Exception unused) {
}
}
return false;
}
private static Object getUnsafeInstance() {
try {
Class<?> cls = Class.forName("sun.misc.Unsafe");
unsafeClass = cls;
Field declaredField = cls.getDeclaredField("theUnsafe");
declaredField.setAccessible(true);
return declaredField.get(null);
} catch (Exception unused) {
return null;
}
}
private static Field getOverrideField() {
try {
return AccessibleObject.class.getDeclaredField("override");
} catch (Exception unused) {
return null;
}
}
}