Zum Inhalt springen
cd /languages
  • Moderne JVM
  • Programmierung
  • AST- und Symbol-Support

Kotlin in Maguyva: Code-Graphen für Android und die JVM

Maguyva unterstützt Kotlin mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Extension Functions und Coroutines über Android- und JVM-Code hinweg verfolgen.

Wo Kotlin oberflächliche KI-Tools ins Stolpern bringt

Kotlin ist knapp, weil es Verdrahtung versteckt. apply, let, also, run und with ändern, was this und it bedeuten. Extension Functions hängen Verhalten an Typen, die anderswo definiert sind. Coroutines verschieben Arbeit über launch, async und withContext. Ein Agent, der eine Datei nach der anderen liest, sieht die Aufrufe, aber nicht die Receiver dahinter.

Maguyva löst einen größeren Teil dieser Struktur schon beim Indexieren auf, sodass ein Agent fragen kann, wer eine Funktion aufruft, und die echte Antwort bekommt.

Was Maguyva in Kotlin extrahiert

Maguyva deckt .kt und .kts ab. Funktionen, Klassen, Objekte und Companion Objects werden extrahiert, und Funktionssignaturen erfassen Extension Receiver, Parameternamen, Standardwerte und vararg-Parameter.

Aufrufbeziehungen behalten klassenqualifizierte Namen, sodass OrderRepository.save von einem anderen save unterscheidbar bleibt. Die Receiver-Typisierung folgt this innerhalb von apply und run, it innerhalb von let und also sowie dem Argument von with, damit Aufrufe in Scope Functions auf den richtigen Typ aufgelöst werden. Coroutine-Builder und Flow-Operatoren (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) bleiben bewusst im Graphen.

Der Graph erfasst außerdem Vererbung, Interface-Implementierung, Overrides, Instanziierung, Annotationen, Typreferenzen, Lese- und Schreibzugriffe sowie Kanten für das Werfen und Fangen von Ausnahmen.

Beispiel-Prompts für Agenten

  • „Wer ruft CheckoutUseCase.invoke auf, und aus welchen ViewModels?“ (find_symbol, dann dependency_search incoming)
  • „Verfolge den Sync-Ablauf von SyncWorker bis zum Netzwerk-Client.“ (get_task_context)
  • „Welche Klassen implementieren PaymentGateway?“ (dependency_search)

Bekannte Grenzen

  • Etwa 250 Aufrufe der Kotlin-Standardbibliothek und der Plattform werden aus den Beziehungen gefiltert, daher sind Helfer wie listOf, map, filter und println keine Graphkanten. Verwende dafür text_pattern_search.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Bei gemischten Codebasen lies auch den Java-Leitfaden.

Am besten geeignet

  • > Android-Teams mit großen Multi-Modul-Apps, in denen ViewModels, Repositories und Use Cases sich modulübergreifend aufrufen.
  • > Serverseitiges Kotlin und Kotlin/JVM-Dienste, in denen Kotlin neben älterem Java-Code läuft.
  • > Gradle-Builds in Kotlin Script (`.kts`), die Agenten zusammen mit dem Anwendungscode lesen müssen.

Agentenabläufe

  • > Jeden Aufrufer einer Repository- oder Use-Case-Klasse finden, bevor sich ihre API ändert.
  • > Einen Coroutine-Ablauf vom `launch` eines ViewModels über `withContext` bis in die Datenschicht verfolgen.
  • > Vor einem Refactoring erfassen, welche Klassen ein Interface implementieren oder eine Basismethode überschreiben.

Engine-Einordnung

  • > Die Kotlin-Unterstützung deckt `.kt` und `.kts` ab. Signaturen erfassen Extension Receiver, Parameternamen, Standardwerte und `vararg`-Parameter.
  • > Die Receiver-Typisierung folgt `this` in `apply` und `run`, `it` in `let` und `also` sowie dem Argument von `with`, und Aufrufe behalten klassenqualifizierte Namen.
  • > Coroutine-Builder und Flow-Operatoren wie `launch`, `withContext` und `flow` bleiben im Graphen, während etwa 250 Aufrufe der Standardbibliothek gefiltert werden.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für eine Klasse, einen Use Case oder eine Extension Function, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz vor einer API-Änderung die eingehende Traversierung auf einem Repository oder Interface, um Aufrufer und Implementierungen zu sehen.

  • get_task_context

    Nutz es für Prompts wie „verfolge den Sync-Ablauf von `SyncWorker` bis zum Netzwerk-Client“.