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, которые могут пригодится при написании детекторов.


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

17900Сможет ли закон догнать искусственный интеллект, предлагающий психотерапию? 17899Цепная реакция заражения листерией из-за одного поставщика 17898Холодный расчет: как современная наука изменила правила стирки 17897Деревянная начинка: массовый отзыв корн-догов из-за угрозы травм 17896Случайное открытие, спасшее 500 миллионов жизней 17895Мастерство мобильной съемки: полное руководство по камере iPhone 17894Что мог рассказать личный набор инструментов охотника эпохи палеолита? 17893Почему крупнейшая звездная колыбель млечного пути производит непропорционально много... 17892Обречены ли мы есть инжир с мертвыми осами внутри? 17891Почему AI-помощникам выгодно лгать, а не признавать незнание? 17890Является ли творчество искусственного интеллекта предсказуемым недостатком? 17889Как каланы цепляются за надежду? 17888Расшифрованный код древнего Египта 17887Звук без компромиссов: выбор лучших активных полочных колонок 2025 года 17886Зеленая немочь: загадочная болезнь девственниц, исчезнувшая из медицины