1 package expo.modules.devmenu.helpers
2 
3 import java.lang.reflect.Field
4 import java.lang.reflect.Modifier
5 
6 @Suppress("UNCHECKED_CAST")
getPrivateDeclaredFieldValuenull7 fun <T, R> Class<out T>.getPrivateDeclaredFieldValue(filedName: String, obj: T): R {
8   val field = getDeclaredField(filedName)
9   field.isAccessible = true
10   return field.get(obj) as R
11 }
12 
setPrivateDeclaredFieldValuenull13 fun <T> Class<out T>.setPrivateDeclaredFieldValue(filedName: String, obj: T, newValue: Any) {
14   val field = getDeclaredField(filedName)
15   val modifiersField = Field::class.java.getDeclaredField("accessFlags")
16 
17   field.isAccessible = true
18   modifiersField.isAccessible = true
19 
20   modifiersField.setInt(
21     field,
22     field.modifiers and Modifier.FINAL.inv()
23   )
24 
25   field.set(obj, newValue)
26 }
27