Vai al contenuto
cd /languages
  • JVM moderna
  • Programmazione
  • Supporto AST e simboli

Kotlin in Maguyva: grafi del codice per Android e JVM

Maguyva supporta Kotlin con AST, simboli e grafo, così gli agenti IA seguono classi, funzioni di estensione e coroutine nel codice Android e JVM.

Dove Kotlin fa inciampare gli strumenti di IA superficiali

Kotlin è conciso perché nasconde i collegamenti. apply, let, also, run e with cambiano il significato di this e it. Le funzioni di estensione aggiungono comportamento a tipi definiti altrove. Le coroutine spostano il lavoro tra launch, async e withContext. Un agente che legge un file alla volta vede le chiamate, ma non i receiver che ci stanno dietro.

Maguyva risolve più di questa struttura già in fase di indicizzazione, così un agente può chiedere chi chiama una funzione e ottenere la risposta vera.

Cosa estrae Maguyva in Kotlin

Maguyva copre .kt e .kts. Vengono estratti funzioni, classi, object e companion object, e le firme delle funzioni registrano receiver di estensione, nomi dei parametri, valori predefiniti e parametri vararg.

Le relazioni di chiamata mantengono i nomi qualificati dalla classe, così OrderRepository.save resta distinto da un altro save. La tipizzazione dei receiver segue this dentro apply e run, it dentro let e also, e l’argomento di with, così le chiamate dentro le scope function si risolvono nel tipo giusto. I builder di coroutine e gli operatori Flow (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) restano di proposito nel grafo.

Il grafo registra anche ereditarietà, implementazione di interfacce, override, istanziazione, annotazioni, riferimenti di tipo, letture e scritture, e archi di lancio e cattura delle eccezioni.

Esempi di prompt per agenti

  • “Chi chiama CheckoutUseCase.invoke e da quali ViewModel?” (find_symbol, poi dependency_search incoming)
  • “Traccia il flusso di sincronizzazione da SyncWorker al client di rete.” (get_task_context)
  • “Quali classi implementano PaymentGateway?” (dependency_search)

Limiti noti

  • Circa 250 chiamate della libreria standard di Kotlin e della piattaforma vengono filtrate dalle relazioni, quindi helper come listOf, map, filter e println non sono archi del grafo. Usa text_pattern_search per trovarli.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per basi di codice miste, leggi anche la guida a Java.

Il più adatto per

  • > Team Android con grandi app multimodulo in cui ViewModel, repository e use case si chiamano tra moduli.
  • > Kotlin lato server e servizi Kotlin/JVM che mescolano Kotlin con codice Java più vecchio.
  • > Build Gradle scritte in Kotlin script (`.kts`) che gli agenti devono leggere insieme al codice applicativo.

Workflow degli agenti

  • > Trovare tutti i chiamanti di una classe repository o use case prima di cambiarne l'API.
  • > Tracciare un flusso di coroutine dal `launch` di un ViewModel, attraverso `withContext`, fino al livello dati.
  • > Mappare quali classi implementano un'interfaccia o ridefiniscono un metodo base prima di un refactoring.

Dettagli del motore

  • > Il supporto a Kotlin copre `.kt` e `.kts`. Le firme registrano receiver di estensione, nomi dei parametri, valori predefiniti e parametri `vararg`.
  • > La tipizzazione dei receiver segue `this` in `apply` e `run`, `it` in `let` e `also`, e l'argomento di `with`, e le chiamate mantengono i nomi qualificati dalla classe.
  • > I builder di coroutine e gli operatori Flow come `launch`, `withContext` e `flow` restano nel grafo, mentre circa 250 chiamate della libreria standard vengono filtrate.

Punti di ingresso MCP utili

  • find_symbol

    Usalo con una classe, uno use case o una funzione di estensione quando ti servono definizione e riferimenti.

  • dependency_search

    Usa la navigazione incoming su un repository o un'interfaccia per vedere chiamanti e implementazioni prima di cambiare un'API.

  • get_task_context

    Usalo per prompt come "traccia il flusso di sincronizzazione da `SyncWorker` al client di rete".