Установка «isAccessible» для отраженного делегированного свойства в выпуске приводит к сбою приложения - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь получить доступ к свойству экземпляра объекта 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)”

Естественно, поскольку он настроен на выпуск, он сжат и неразборчив.

Есть мысли?

...