Kotlin Analysis API, основанное на PSI, предоставляет более удобный и мощный механизм для статического анализа кода, чем старый подход через AST. Новое API позволяет легко получать типы, включая Any/Nothing/Unit, а также проверять «нулабельность», модификаторы видимости и аннотации. Ключевой сущностью является Symbol, содержащий семантическую информацию. Для работы с Kotlin Analysis API необходимо использовать блок
TestMode в Android Lint позволяет проводить дополнительные тесты, имитируя различные условия: подмену импортов, добавление полных путей, двойные пробелы и другие изменения. Это помогает создавать более надёжные детекторы, устойчивые к разным вариантам написания кода. Для отключения TestMode можно использовать
Для предоставления нескольких вариантов исправления через lintFix используется
DataFlowAnalyzer позволяет проверять, был ли вызов метода для экземпляра класса, что полезно, например, для проверки наличия
analyze
, избегая сохранения KaSession
вне этого блока. Изображение носит иллюстративный характер
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, которые могут пригодится при написании детекторов.