Перейти к содержимому
cd /languages
  • Современная JVM
  • Программирование
  • Поддержка AST и символов

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

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

Где 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.

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

Подключите репозиторий по быстрому старту, затем изучите матрицу поддержки на странице совместимости. Для смешанных кодовых баз прочитайте и руководство по Java.

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

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

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

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

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

  • > Поддержка 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` до сетевого клиента».