Во время выполнения мне нужно получить доступ к свойствам в экземпляре делегата делегированного свойства.
Когда я компилирую следующий код в отладке, он работает просто отлично:
class Potato {
val somePropGoesHere: Int by PotatoDeletgate("This is the key", 0)
fun getKey(property: KProperty1<Potato, *>): String {
property.isAccessible = true
val delegate = property.getDelegate(this)
return when (delegate) {
is PotatoDeletgate<*> -> delegate.key
else -> throw IllegalStateException("Can't observe the property - ${property.name}")
}
}
class PotatoDeletgate<T>(val key: String,
defaultValue: T) {
private var innerValue = defaultValue
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
// more logic
return innerValue
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
// more logic
innerValue = value
}
}
}
class PotatoShredder {
fun doStuff() {
val potato = Potato()
val key = potato.getKey(Potato::somePropGoesHere)
}
}
Когда явызовите метод "doStuff" в отладке, val "key" получит строку "This is the key".
Однако, когда я скомпилирую этот код в релизе, я получу ошибку:
2019-11-07 16: 16: 04.141 7496-7496 /? E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.trax.retailexecution, PID: 7496
eaaaj0: Свойство 'somePropGoesHere' (подпись JVM: getSomePropGoesHere () I) не разрешена в классе com.traxtionile. util.Potato
в eaaapc (KDeclarationContainerImpl.kt: 40)
в eaaaz $ d.invoke (KPropertyImpl.kt: 4)
в eaaal0.a (ReflectProperties. Java: 4)
в eaaaze (KPropertyImpl.kt: 2)
Я не знаю, как
в eaaaz $ e.invoke (KPropertyImpl.kt: 1)
в eaaam0.a (ReflectProperties.java:3)
в eaaazi (KPropertyImpl.kt: 1)
в cmabaa (DefaultConfigurationFactory.java:82)
в cmabaa (DefaultConfigurationFactory.java:153)
в com.trax.retailexecution.util.Potato.getKey (Potato.kt: 1)
в mynamespacegoeshere.PotatoShredder.doStuff (Potato.kt: 2)
Я думал, что это как-то связано с proguard, так как класс и / или методы, которые мы удаляем во время сжатия /сокращается, но я не могу найти способ правильно решить проблему.