Установка "isAccessible" для отраженного делегированного свойства в выпуске приводит к сбою приложения
Я пытаюсь получить доступ к свойству экземпляра объекта DelegatedProperty:
val key: String = preferences.getKey(Preferences::projectName)
функция getKey возвращает желаемое значение:
fun getKey(property: KProperty1<Preferences, *>): String {
property.isAccessible = true // note this line
val delegate = property.getDelegate(this)
return when (delegate) {
is PreferencesProperty<*> -> delegate.key
is WrapperPreferencesProperty<*, *> -> delegate.key
else -> throw IllegalStateException("Can't observe the property - ${property.name}")
}
}
Рассматриваемое свойство делегата записывается так:
var projectName: String by PreferencesProperty(context, "project_name", "")
В отладке он работает нормально, но когда я запускаю его в релизе, строка:
property.isAccessible = true
вылетает приложение.
ошибка:
Свойство 'projectName' (подпись JVM: getProjectName()Ljava/lang/String;) не разрешено в классе (имя приложения указывается здесь).
и трассировка стека:
“e.i.b.a.R.b(KDeclarationContainerImpl.kt:114)”
“e.i.b.a.Ga.invoke(KPropertyImpl.kt:101)”
“e.i.b.a.Ga.invoke(KPropertyImpl.kt:29)”
“e.i.b.a.Xa$a.a(ReflectProperties.java:92)”
“e.i.b.a.Ba.f(KPropertyImpl.kt:104)”
“e.i.b.a.Ha.invoke(KPropertyImpl.kt:51)”
“e.i.b.a.Ha.invoke(KPropertyImpl.kt:29)”
“e.i.b.a.Xa$a.a(ReflectProperties.java:92)”
“e.i.b.a.Ba.k(KPropertyImpl.kt:78)”
“e.i.b.c.a(ReflectJvmMapping.kt:40)”
“e.i.b.a.a(KCallablesJvm.kt:65)”
“(application name goes here).Preferences.getKey(Preferences.kt:115)”
Естественно, поскольку он настроен на выпуск, он сжат и неразборчив.
Какие-нибудь мысли?