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