Detekt: Как создать правило Lint, которое влияет на свойства типа Android -specifi c? - PullRequest
0 голосов
/ 22 апреля 2020

Я использую detekt для запуска проверки пуха в моем Android проекте. Следуя информации в разделе «Расширение Detekt» на сайте проекта, я пытаюсь создать собственную проверку пуха, чтобы проверить в моих классах публичные c свойства типа MutableLiveData.

На основе рассмотрения других правил в проекте я до сих пор придумал это:

class PublicMutableLiveData(config: Config = Config.empty) : Rule(config) {

    override val issue = Issue(javaClass.simpleName,
        Severity.Maintainability,
        "MutableLi veData must be private", Debt.TEN_MINS)


    override fun visitProperty(property: KtProperty) {
        if (property.isPublic && property.anyDescendantOfType<androidx.lifecycle.MutableLiveData>()) {
            report(property)
        }
        super.visitProperty(property)
    }

   private fun report(property: KtNamedDeclaration) {
        report(
            CodeSmell(issue, Entity.from(property), "The property ${property.nameAsSafeName} of type MutableLiveData should not be public")
        )
    }
}

Пока я не знаю, является ли isAnyDescendantOfType<>() правильной проверкой для меня, но я не могу проверить это, потому что я не знаю, как сделать библиотеку android -specifi c, содержащую класс MutableLiveData, доступной для Detekt (androidx.lifecycle: lifecycle-viewmodel-ktx: 2.2.0).

У меня небольшой опыт работы с не Android JVM-проектами, и я не совсем понимаю, как сделать это доступным здесь, чтобы правильно указать желаемый тип без предупреждения. Кто-нибудь может помочь?

...