Pular para o conteúdo
cd /languages
  • JVM moderna
  • Programação
  • Suporte a AST e símbolos

Kotlin no Maguyva: grafos de código para Android e JVM

O Maguyva oferece suporte a Kotlin com AST, símbolos e grafo, para que agentes de IA sigam classes, funções de extensão e coroutines em código Android e JVM.

Onde Kotlin derruba ferramentas de IA superficiais

Kotlin é conciso porque esconde a fiação. apply, let, also, run e with mudam o que this e it significam. Funções de extensão acrescentam comportamento a tipos definidos em outro lugar. Coroutines movem o trabalho entre launch, async e withContext. Um agente que lê um arquivo por vez vê as chamadas, mas não os receivers por trás delas.

O Maguyva resolve mais dessa estrutura na indexação, para que um agente possa perguntar quem chama uma função e receber a resposta real.

O que o Maguyva extrai em Kotlin

O Maguyva cobre .kt e .kts. Funções, classes, objetos e companion objects são extraídos, e as assinaturas de funções registram receivers de extensão, nomes de parâmetros, valores padrão e parâmetros vararg.

As relações de chamada preservam nomes qualificados pela classe, então OrderRepository.save continua distinto de outro save. A tipagem de receivers segue this dentro de apply e run, it dentro de let e also, e o argumento de with, para que chamadas dentro de scope functions sejam resolvidas para o tipo certo. Builders de coroutines e operadores de Flow (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) são mantidos de propósito no grafo.

O grafo também registra herança, implementação de interfaces, sobrescritas, instanciação, anotações, referências de tipo, leituras e escritas, e arestas de lançamento e captura de exceções.

Exemplos de prompts para agentes

  • “Quem chama CheckoutUseCase.invoke e a partir de quais ViewModels?” (find_symbol, depois dependency_search incoming)
  • “Rastreie o fluxo de sincronização de SyncWorker até o cliente de rede.” (get_task_context)
  • “Quais classes implementam PaymentGateway?” (dependency_search)

Limitações conhecidas

  • Cerca de 250 chamadas da biblioteca padrão do Kotlin e da plataforma são filtradas das relações, então helpers como listOf, map, filter e println não são arestas do grafo. Use text_pattern_search para encontrá-los.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Para bases de código mistas, leia também o guia de Java.

Uso ideal

  • > Equipes Android com grandes apps multimódulo em que ViewModels, repositórios e casos de uso se chamam entre módulos.
  • > Kotlin no servidor e serviços Kotlin/JVM que misturam Kotlin com código Java mais antigo.
  • > Builds Gradle escritos em Kotlin script (`.kts`) que os agentes precisam ler junto com o código da aplicação.

Fluxos de trabalho de agente

  • > Encontrar todos os chamadores de uma classe de repositório ou de caso de uso antes de mudar sua API.
  • > Rastrear um fluxo de coroutines do `launch` de um ViewModel, passando por `withContext`, até a camada de dados.
  • > Mapear quais classes implementam uma interface ou sobrescrevem um método base antes de uma refatoração.

Detalhes do motor

  • > O suporte a Kotlin cobre `.kt` e `.kts`. As assinaturas registram receivers de extensão, nomes de parâmetros, valores padrão e parâmetros `vararg`.
  • > A tipagem de receivers segue `this` em `apply` e `run`, `it` em `let` e `also`, e o argumento de `with`, e as chamadas preservam nomes qualificados pela classe.
  • > Builders de coroutines e operadores de Flow como `launch`, `withContext` e `flow` ficam no grafo, enquanto cerca de 250 chamadas da biblioteca padrão são filtradas.

Pontos de entrada MCP úteis

  • find_symbol

    Use com uma classe, caso de uso ou função de extensão quando precisar da definição e das referências.

  • dependency_search

    Use a travessia incoming em um repositório ou interface para ver chamadores e implementações antes de mudar uma API.

  • get_task_context

    Use para prompts como "rastreie o fluxo de sincronização de `SyncWorker` até o cliente de rede".