SourceCodeScanner не возвращает имя суперкласса - PullRequest
0 голосов
/ 24 февраля 2020

Я пишу собственное правило lint, и мне нужно проверить, наследует ли класс определенный класс, а затем проверить методы этого класса, чтобы применить правило. У меня проблема в том, что некоторые имена суперклассов в проекте возвращаются нормально, а другие возвращаются как Object, и я не могу понять, почему.

Вот код и вывод

Код:

        override fun visitClass(node: UClass) {
        println("CLASS: ${node.qualifiedName}")
        println("CLASS DERP: ${node.superClass?.name}")
//            node.methods.forEach {
//                visitMethod(it)
//            }
        }

Вывод:

    CLASS DERP: com.sample.mvvm.detail.DetailController
    CLASS DERP: BaseController
    CLASS DERP: com.sample.mvvm.list.ListViewModel
    CLASS DERP: Object

Итак, давайте возьмем эти 2 класса, DetailController & ListViewModel

Их соответствующие supers равны BaseController и BaseViewModel

Оба эти суперпункта abstract, с BaseViewModel, расширяющимися ViewModel и Controller расширение LifecycleController. Этот модуль, в котором живет мое пользовательское правило lint, не имеет модуля с этими надстрочными знаками в качестве зависимости, поэтому он знает, что ни одна из них не будет распознавать эту функцию завершения кода.

Учитывая все вышесказанное, я не знаю, почему супер-квалифицированное имя ViewModel возвращается как объект, а супер-квалифицированное имя Controller возвращается как фактическое имя.

...