1 package expo.modules.devmenu.helpers 2 3 import java.lang.reflect.Field 4 import java.lang.reflect.Modifier 5 6 @Suppress("UNCHECKED_CAST") getPrivateDeclaredFieldValuenull7fun <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 setPrivateDeclaredFieldValuenull13fun <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