Ssylka

Как правильно использовать Kotlin Analysis API в Android Lint?

Kotlin Analysis API, основанное на PSI, предоставляет более удобный и мощный механизм для статического анализа кода, чем старый подход через AST. Новое API позволяет легко получать типы, включая Any/Nothing/Unit, а также проверять «нулабельность», модификаторы видимости и аннотации. Ключевой сущностью является Symbol, содержащий семантическую информацию. Для работы с Kotlin Analysis API необходимо использовать блок analyze, избегая сохранения KaSession вне этого блока.
Как правильно использовать Kotlin Analysis API в Android Lint?
Изображение носит иллюстративный характер

TestMode в Android Lint позволяет проводить дополнительные тесты, имитируя различные условия: подмену импортов, добавление полных путей, двойные пробелы и другие изменения. Это помогает создавать более надёжные детекторы, устойчивые к разным вариантам написания кода. Для отключения TestMode можно использовать .skipTestModes(), а для конкретного режима .addTestModes(). Также не рекомендуется использовать trimIndent() при добавлении стабов и файлов для проверки в тестах, лучше использовать indented.

Для предоставления нескольких вариантов исправления через lintFix используется fix().composite(), но исправления в IDE будут расположены в алфавитном порядке, а не в порядке следования в массиве. Также можно настроить частичный анализ, пропуская некоторые правила по условиям, с помощью filterIncident и Constraint. С помощью getPartialResults и checkPartialResults можно передавать данные между модулями для проведения анализа, который недоступен при анализе в студии, но работает при сборке на CI.

DataFlowAnalyzer позволяет проверять, был ли вызов метода для экземпляра класса, что полезно, например, для проверки наличия show() у toast. TargetMethodDataFlowAnalyzer использует паттерн visitor и позволяет обрабатывать случаи, когда экземпляр передается как аргумент, возвращается из метода и т. д. Важные методы isTargetMethodName и isTargetMethod сопоставляют вызовы методов. Также существуют полезные классы SdkConstants, ConstantEvaluator, CommentDetector, которые могут пригодится при написании детекторов.


Новое на сайте

18666Почему мы отрицаем реальность, когда искусственный интеллект уже лишил нас когнитивного... 18665Химический след Тейи раскрыл тайну происхождения луны в ранней солнечной системе 18664Раскрывает ли извергающаяся межзвездная комета 3I/ATLAS химические тайны древней... 18663Масштабная кампания ShadyPanda заразила миллионы браузеров через официальные обновления 18662Как помидорные бои и персонажи Pixar помогают лидерам превратить корпоративную культуру 18661Как астероид 2024 YR4 стал первой исторической проверкой системы планетарной защиты и... 18660Агентные ИИ-браузеры как троянский конь новой эры кибербезопасности 18659Многовековая история изучения приливов от античных гипотез до синтеза Исаака Ньютона 18658Как выглядела защита от солнца римских легионеров в Египте 1600 лет назад? 18657Хакеры ToddyCat обновили арсенал для тотального взлома Outlook и Microsoft 365 18656Асимметрия безопасности: почему многомиллионные вложения в инструменты детекции не... 18655Как безопасно использовать репозитории Chocolatey и Winget, не подвергая инфраструктуру... 18654Масштабная утечка конфиденциальных данных через популярные онлайн-форматеры кода 18653Как расширение списка жертв взлома Gainsight связано с запуском вымогателя ShinySp1d3r 18652Как расширение Crypto Copilot незаметно похищает средства пользователей Solana на...