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

Canonical source: https://maguyva.ai/zh-hans/languages/kotlin

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## 支持情况速览

- 支持等级: AST 和符号支持
- 编程语言
- 扩展名: .kt, .kts
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

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

## 智能体工作流

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

## 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`。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。对于混合代码库，也请阅读 [Java 指南](/zh-hans/languages/java)。

## 引擎细节

- 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` 到网络客户端的同步流程”这类提示词。
