Я пишу собственное правило 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
возвращается как фактическое имя.