# Kotlin в Maguyva: графы кода для Android и JVM

Canonical source: https://maguyva.ai/ru/languages/kotlin

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva поддерживает Kotlin с AST, символами и графом, чтобы ИИ-агенты отслеживали классы, функции-расширения и корутины в коде Android и JVM.

## Сводка поддержки

- Уровень: Поддержка AST и символов
- Программирование
- Расширения: .kt, .kts
- Настоящий AST-разбор для синтаксически осведомлённого поиска и структурного контекста.
- Именованные символы обеспечивают семантический поиск и перекрёстные ссылки. Навигация по графу доступна, когда включено извлечение связей.
- Этот язык добавляет символы и связи в поиск с учётом графа; поддерживаемые типы рёбер зависят от присущих ему конструкций.
- Доступны и AST-разбор, и извлечение символов.

## Лучше всего подходит

- Android-команды с большими многомодульными приложениями, где ViewModel, репозитории и сценарии использования вызывают друг друга через модули.
- Серверный Kotlin и сервисы на Kotlin/JVM, где Kotlin соседствует со старым кодом на Java.
- Сборки Gradle на скриптах Kotlin (`.kts`), которые агентам нужно читать вместе с кодом приложения.

## Сценарии работы агента

- Найти всех, кто вызывает класс репозитория или сценария использования, прежде чем менять его API.
- Проследить поток корутин от `launch` во ViewModel через `withContext` до слоя данных.
- Перед рефакторингом составить карту классов, реализующих интерфейс или переопределяющих базовый метод.

## Где Kotlin сбивает с толку поверхностные ИИ-инструменты

Kotlin лаконичен, потому что прячет связи. `apply`, `let`, `also`, `run` и `with` меняют смысл `this` и `it`. Функции-расширения добавляют поведение типам, определённым в другом месте. Корутины переносят работу между `launch`, `async` и `withContext`. Агент, читающий по одному файлу, видит вызовы, но не получателей за ними.

Maguyva разрешает больше такой структуры ещё при индексации, поэтому агент может спросить, кто вызывает функцию, и получить настоящий ответ.

## Что Maguyva извлекает из Kotlin

Maguyva охватывает `.kt` и `.kts`. Извлекаются функции, классы, объекты и объекты-компаньоны, а сигнатуры функций фиксируют получателей расширений, имена параметров, значения по умолчанию и параметры `vararg`.

Связи вызовов сохраняют имена с квалификацией классом, поэтому `OrderRepository.save` отличается от любого другого `save`. Типизация получателей отслеживает `this` внутри `apply` и `run`, `it` внутри `let` и `also`, а также аргумент `with`, так что вызовы внутри функций области видимости разрешаются в правильный тип. Билдеры корутин и операторы Flow (`launch`, `async`, `withContext`, `coroutineScope`, `supervisorScope`, `flow`, `emit`, `delay`, `Channel`) намеренно остаются в графе.

Граф также фиксирует наследование, реализацию интерфейсов, переопределения, создание экземпляров, аннотации, ссылки на типы, чтения и записи, а также рёбра выброса и перехвата исключений.

## Примеры промптов для агентов

- «Кто вызывает `CheckoutUseCase.invoke` и из каких ViewModel?» (`find_symbol`, затем `dependency_search` incoming)
- «Проследи поток синхронизации от `SyncWorker` до сетевого клиента.» (`get_task_context`)
- «Какие классы реализуют `PaymentGateway`?» (`dependency_search`)

## Известные ограничения

- Около 250 вызовов стандартной библиотеки Kotlin и платформы отфильтровываются из связей, поэтому вспомогательные функции вроде `listOf`, `map`, `filter` и `println` не становятся рёбрами графа. Для них используйте `text_pattern_search`.

## Следующие шаги

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Для смешанных кодовых баз прочитайте и [руководство по Java](/ru/languages/java).

## Детали движка

- Поддержка Kotlin охватывает `.kt` и `.kts`. Сигнатуры фиксируют получателей расширений, имена параметров, значения по умолчанию и параметры `vararg`.
- Типизация получателей отслеживает `this` в `apply` и `run`, `it` в `let` и `also`, а также аргумент `with`, а вызовы сохраняют имена с квалификацией классом.
- Билдеры корутин и операторы Flow, такие как `launch`, `withContext` и `flow`, остаются в графе, а около 250 вызовов стандартной библиотеки отфильтровываются.

## Полезные точки входа MCP

- `find_symbol`: Используйте для класса, сценария использования или функции-расширения, когда нужны определение и ссылки.
- `dependency_search`: Перед изменением API используйте обход incoming для репозитория или интерфейса, чтобы увидеть вызывающих и реализации.
- `get_task_context`: Используйте для промптов вроде «проследи поток синхронизации от `SyncWorker` до сетевого клиента».
