#kotlin #annotation-processing #android-lint
#котлин #обработка аннотаций #android-линт
Вопрос:
Фон:
У меня есть делегат , которого можно собрать как StateFlow
, например, так:
@Suppress("UNCHECKED_CAST") val lt;Tgt; KProperty0lt;Tgt;.flow: StateFlowlt;Tgt; get() = getDelegate() as StateFlowlt;Tgt; class FlowContainer { val value: Int by flowDelegate(0) } class Example { fun foo() { val container = FlowContainer() scope.launch { container::value.flow.collect { /*...*/ } } return } }
Проблема, очевидно, в том, что это связано с непроверенными приведениями, и нет никаких индикаторов для потребителей, имеет ли свойство эту возможность делегирования. Моя текущая идея состоит в том, чтобы аннотировать любое свойство с помощью:
@Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.SOURCE) @MustBeDocumented annotation class FlowObservable
И убедитесь, что любое использование .flow
метода относится к аннотированному свойству.
Вопрос:
Lint, который использует PSI/UAST, похоже, не имеет никакого понятия «свойство», только поля и методы. Кто-нибудь знает, как вы могли бы получить свойства и их аннотации?