跳至主要內容
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、repository 與使用案例會跨模組彼此呼叫。
  • > 伺服器端 Kotlin 與 Kotlin/JVM 服務,其中 Kotlin 與較舊的 Java 程式碼混用。
  • > 以 Kotlin 腳本(`.kts`)撰寫、需要讓代理與應用程式碼一起閱讀的 Gradle 建置。

代理工作流程

  • > 在變更 repository 或使用案例類別的 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 之前,對 repository 或介面使用 incoming 走訪,查看呼叫端與實作類別。

  • get_task_context

    適合用於「追蹤從 `SyncWorker` 到網路用戶端的同步流程」這類提示。