Przejdź do treści
cd /languages
  • Nowoczesna JVM
  • Programowanie
  • Obsługa AST i symboli

Kotlin w Maguyva: grafy kodu dla Androida i JVM

Maguyva obsługuje Kotlina przez AST, symbole i graf, dzięki czemu agenci AI śledzą klasy, funkcje rozszerzające i korutyny w kodzie Androida i JVM.

Gdzie Kotlin sprawia kłopot powierzchownym narzędziom AI

Kotlin jest zwięzły, bo ukrywa połączenia. apply, let, also, run i with zmieniają znaczenie this i it. Funkcje rozszerzające dodają zachowanie do typów zdefiniowanych gdzie indziej. Korutyny przenoszą pracę między launch, async i withContext. Agent czytający jeden plik naraz widzi wywołania, ale nie odbiorców, którzy za nimi stoją.

Maguyva rozwiązuje większą część tej struktury już podczas indeksowania, więc agent może zapytać, kto wywołuje funkcję, i dostać prawdziwą odpowiedź.

Co Maguyva wyodrębnia w Kotlinie

Maguyva obejmuje .kt i .kts. Wyodrębniane są funkcje, klasy, obiekty i obiekty towarzyszące, a sygnatury funkcji zapisują odbiorców rozszerzeń, nazwy parametrów, wartości domyślne i parametry vararg.

Relacje wywołań zachowują nazwy kwalifikowane klasą, więc OrderRepository.save pozostaje odróżnialne od innego save. Typowanie odbiorców śledzi this wewnątrz apply i run, it wewnątrz let i also oraz argument with, dzięki czemu wywołania w funkcjach zakresu są rozwiązywane do właściwego typu. Konstruktory korutyn i operatory Flow (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) są celowo zachowywane w grafie.

Graf zapisuje też dziedziczenie, implementację interfejsów, nadpisania, tworzenie instancji, adnotacje, odwołania do typów, odczyty i zapisy oraz krawędzie rzucania i przechwytywania wyjątków.

Przykładowe prompty dla agentów

  • „Kto wywołuje CheckoutUseCase.invoke i z których ViewModeli?” (find_symbol, potem dependency_search incoming)
  • „Prześledź przepływ synchronizacji od SyncWorker do klienta sieciowego.” (get_task_context)
  • „Które klasy implementują PaymentGateway?” (dependency_search)

Znane ograniczenia

  • Około 250 wywołań biblioteki standardowej Kotlina i platformy jest filtrowanych z relacji, więc pomocnicze funkcje, takie jak listOf, map, filter i println, nie są krawędziami grafu. Do ich wyszukiwania użyj text_pattern_search.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. W przypadku mieszanych baz kodu przeczytaj też przewodnik po Javie.

Najlepsze dopasowanie

  • > Zespoły Androida z dużymi aplikacjami wielomodułowymi, w których ViewModele, repozytoria i przypadki użycia wywołują się między modułami.
  • > Kotlin po stronie serwera i usługi Kotlin/JVM, które łączą Kotlina ze starszym kodem w Javie.
  • > Buildy Gradle pisane w skryptach Kotlina (`.kts`), które agenci muszą czytać razem z kodem aplikacji.

Workflow agentów

  • > Znaleźć wszystkich wywołujących klasę repozytorium lub przypadku użycia przed zmianą jej API.
  • > Prześledzić przepływ korutyn od `launch` w ViewModelu przez `withContext` aż do warstwy danych.
  • > Zmapować, które klasy implementują interfejs lub nadpisują metodę bazową, przed refaktoryzacją.

Szczegóły silnika

  • > Obsługa Kotlina obejmuje `.kt` i `.kts`. Sygnatury zapisują odbiorców rozszerzeń, nazwy parametrów, wartości domyślne i parametry `vararg`.
  • > Typowanie odbiorców śledzi `this` w `apply` i `run`, `it` w `let` i `also` oraz argument `with`, a wywołania zachowują nazwy kwalifikowane klasą.
  • > Konstruktory korutyn i operatory Flow, takie jak `launch`, `withContext` i `flow`, pozostają w grafie, a około 250 wywołań biblioteki standardowej jest filtrowanych.

Przydatne punkty wejścia MCP

  • find_symbol

    Używaj go z klasą, przypadkiem użycia lub funkcją rozszerzającą, gdy potrzebujesz definicji i odwołań.

  • dependency_search

    Przed zmianą API użyj przejścia incoming na repozytorium lub interfejsie, aby zobaczyć wywołujących i implementacje.

  • get_task_context

    Używaj go do promptów typu „prześledź przepływ synchronizacji od `SyncWorker` do klienta sieciowego”.