跳转到内容
cd /languages
  • 现代 JVM
  • 编程语言
  • AST 和符号支持

Maguyva 的 Kotlin 支持:面向 Android 与 JVM 的代码图谱

Maguyva 以 AST、符号和图谱支持 Kotlin,让 AI 智能体跨越 Android 和 JVM 代码追踪类、扩展函数和协程。

Kotlin 让浅层 AI 工具栽跟头的地方

Kotlin 之所以简洁,是因为它隐藏了连接关系。apply、let、also、run 和 with 会改变 this 和 it 的含义。扩展函数把行为附加到在别处定义的类型上。协程让工作在 launch、async 和 withContext 之间流转。一次只读一个文件的智能体能看到调用,却看不到调用背后的接收者。

Maguyva 在建立索引时就解析出更多这类结构,因此智能体问“谁调用了这个函数”时,能得到真实的答案。

Maguyva 在 Kotlin 中提取什么

Maguyva 覆盖 .kt 和 .kts。函数、类、对象和伴生对象都会被提取,函数签名会记录扩展接收者、参数名、默认值以及 vararg 参数。

调用关系会保留类限定名,因此 OrderRepository.save 与其他 save 保持区分。接收者类型推断会跟踪 apply 和 run 内部的 this、let 和 also 内部的 it,以及 with 的参数,使作用域函数内的调用解析到正确的类型。协程构建器和 Flow 操作符(launch、async、withContext、coroutineScope、supervisorScope、flow、emit、delay、Channel)被特意保留在图谱中。

图谱还记录继承、接口实现、重写、实例化、注解、类型引用、读写,以及异常的抛出与捕获边。

智能体提示词示例

  • “谁调用了 CheckoutUseCase.invoke,来自哪些 ViewModel?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “追踪从 SyncWorker 到网络客户端的同步流程。”(get_task_context)
  • “哪些类实现了 PaymentGateway?”(dependency_search)

已知限制

  • 约 250 个 Kotlin 标准库和平台调用会从关系中过滤掉,因此 listOf、map、filter 和 println 等辅助函数不是图谱的边。查找它们请使用 text_pattern_search。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。对于混合代码库,也请阅读 Java 指南。

最适合场景

  • > 拥有大型多模块应用的 Android 团队,ViewModel、仓储和用例在各模块之间相互调用。
  • > 服务端 Kotlin 和 Kotlin/JVM 服务,其中 Kotlin 与较老的 Java 代码混用。
  • > 用 Kotlin 脚本(`.kts`)编写、需要让智能体与应用代码一起阅读的 Gradle 构建。

智能体工作流

  • > 在修改仓储类或用例类的 API 之前,找出它的所有调用方。
  • > 从 ViewModel 的 `launch` 经过 `withContext` 一直追踪到数据层的协程流程。
  • > 在重构之前,梳理哪些类实现了某个接口或重写了某个基类方法。

引擎细节

  • > Kotlin 支持覆盖 `.kt` 和 `.kts`。签名会记录扩展接收者、参数名、默认值和 `vararg` 参数。
  • > 接收者类型推断会跟踪 `apply` 和 `run` 中的 `this`、`let` 和 `also` 中的 `it`,以及 `with` 的参数,调用会保留类限定名。
  • > `launch`、`withContext` 和 `flow` 等协程构建器与 Flow 操作符保留在图谱中,约 250 个标准库调用则被过滤掉。

常用 MCP 入口工具

  • find_symbol

    需要定义和引用时,用类、用例或扩展函数来查找。

  • dependency_search

    在修改 API 之前,对仓储类或接口使用 incoming 遍历,查看调用方和实现类。

  • get_task_context

    适用于“追踪从 `SyncWorker` 到网络客户端的同步流程”这类提示词。