Saltar al contenido
cd /languages
  • JVM moderna
  • Programación
  • Soporte de AST y símbolos

Kotlin en Maguyva: grafos de código para Android y la JVM

Maguyva admite Kotlin con AST, símbolos y grafo, para que los agentes de IA sigan clases, funciones de extensión y corrutinas en código Android y JVM.

Dónde Kotlin hace tropezar a las herramientas de IA superficiales

Kotlin es conciso porque oculta el cableado. apply, let, also, run y with cambian lo que significan this e it. Las funciones de extensión añaden comportamiento a tipos definidos en otro lugar. Las corrutinas mueven el trabajo entre launch, async y withContext. Un agente que lee un archivo a la vez ve las llamadas, pero no los receptores detrás de ellas.

Maguyva resuelve más de esa estructura al indexar, para que un agente pueda preguntar quién llama a una función y obtener la respuesta real.

Qué extrae Maguyva en Kotlin

Maguyva cubre .kt y .kts. Se extraen funciones, clases, objetos y objetos companion, y las firmas de funciones registran receptores de extensión, nombres de parámetros, valores por defecto y parámetros vararg.

Las relaciones de llamada conservan los nombres calificados por clase, así que OrderRepository.save se distingue de cualquier otro save. La tipificación de receptores sigue this dentro de apply y run, it dentro de let y also, y el argumento de with, para que las llamadas dentro de funciones de alcance se resuelvan al tipo correcto. Los constructores de corrutinas y los operadores de Flow (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) se mantienen a propósito en el grafo.

El grafo también registra herencia, implementación de interfaces, sobrescrituras, instanciación, anotaciones, referencias de tipo, lecturas y escrituras, y aristas de lanzamiento y captura de excepciones.

Ejemplos de prompts para agentes

  • “¿Quién llama a CheckoutUseCase.invoke y desde qué ViewModels?” (find_symbol y luego dependency_search incoming)
  • “Rastrea el flujo de sincronización desde SyncWorker hasta el cliente de red.” (get_task_context)
  • “¿Qué clases implementan PaymentGateway?” (dependency_search)

Limitaciones conocidas

  • Unas 250 llamadas de la biblioteca estándar de Kotlin y de la plataforma se filtran de las relaciones, así que helpers como listOf, map, filter y println no son aristas del grafo. Usa text_pattern_search para encontrarlos.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para bases de código mixtas, lee también la guía de Java.

Mejor uso

  • > Equipos Android con grandes apps multimódulo donde ViewModels, repositorios y casos de uso se llaman entre módulos.
  • > Kotlin del lado del servidor y servicios Kotlin/JVM que combinan Kotlin con código Java más antiguo.
  • > Builds de Gradle escritos en script de Kotlin (`.kts`) que los agentes deben leer junto al código de la aplicación.

Flujos de trabajo del agente

  • > Encontrar todos los llamadores de una clase de repositorio o de caso de uso antes de cambiar su API.
  • > Rastrear un flujo de corrutinas desde el `launch` de un ViewModel, pasando por `withContext`, hasta la capa de datos.
  • > Mapear qué clases implementan una interfaz o sobrescriben un método base antes de una refactorización.

Detalles del motor

  • > La compatibilidad con Kotlin cubre `.kt` y `.kts`. Las firmas registran receptores de extensión, nombres de parámetros, valores por defecto y parámetros `vararg`.
  • > La tipificación de receptores sigue `this` en `apply` y `run`, `it` en `let` y `also`, y el argumento de `with`, y las llamadas conservan los nombres calificados por clase.
  • > Los constructores de corrutinas y operadores de Flow como `launch`, `withContext` y `flow` permanecen en el grafo, mientras que unas 250 llamadas de la biblioteca estándar se filtran.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo con una clase, un caso de uso o una función de extensión cuando necesites la definición y las referencias.

  • dependency_search

    Usa el recorrido incoming sobre un repositorio o una interfaz para ver llamadores e implementaciones antes de cambiar una API.

  • get_task_context

    Úsalo para prompts como "rastrea el flujo de sincronización desde `SyncWorker` hasta el cliente de red".