# Kotlin trên Maguyva: đồ thị mã cho Android và JVM

Canonical source: https://maguyva.ai/vi/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 hỗ trợ Kotlin với AST, ký hiệu và đồ thị, để agent AI có thể lần theo lớp, hàm mở rộng và coroutine trong mã Android và JVM.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .kt, .kts
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Các nhóm Android có ứng dụng lớn nhiều module, nơi ViewModel, repository và use case gọi lẫn nhau xuyên qua ranh giới module.
- Kotlin phía máy chủ và các dịch vụ Kotlin/JVM kết hợp Kotlin với mã Java cũ hơn.
- Bản build Gradle viết bằng Kotlin script (`.kts`) mà agent cần đọc cùng với mã ứng dụng.

## Workflow agent

- Tìm mọi nơi gọi một lớp repository hoặc use case trước khi API của nó thay đổi.
- Lần theo luồng coroutine từ `launch` trong ViewModel, qua `withContext`, xuống tầng dữ liệu.
- Lập bản đồ các lớp triển khai một interface hoặc ghi đè một phương thức cơ sở trước khi refactor.

## Kotlin làm khó các công cụ AI hời hợt ở đâu

Kotlin ngắn gọn vì nó giấu đi phần liên kết. `apply`, `let`, `also`, `run` và `with` thay đổi ý nghĩa của `this` và `it`. Hàm mở rộng thêm hành vi cho các kiểu được định nghĩa ở nơi khác. Coroutine chuyển công việc qua lại giữa `launch`, `async` và `withContext`. Một agent đọc từng tệp một sẽ thấy lời gọi, nhưng không thấy receiver phía sau.

Maguyva phân giải được nhiều hơn phần cấu trúc này ngay khi lập chỉ mục, để agent có thể hỏi ai gọi một hàm và nhận được câu trả lời thực sự.

## Maguyva trích xuất gì từ Kotlin

Maguyva bao phủ `.kt` và `.kts`. Hàm, lớp, object và companion object được trích xuất, và chữ ký hàm ghi lại receiver mở rộng, tên tham số, giá trị mặc định và tham số `vararg`.

Quan hệ lời gọi giữ tên có định danh lớp, nên `OrderRepository.save` không bị lẫn với một `save` khác. Việc xác định kiểu receiver theo dõi `this` bên trong `apply` và `run`, `it` bên trong `let` và `also`, và đối số của `with`, nên lời gọi bên trong scope function được phân giải về đúng kiểu. Coroutine builder và toán tử Flow (`launch`, `async`, `withContext`, `coroutineScope`, `supervisorScope`, `flow`, `emit`, `delay`, `Channel`) được giữ lại có chủ đích trong đồ thị.

Đồ thị cũng ghi lại kế thừa, triển khai interface, ghi đè, khởi tạo, annotation, tham chiếu kiểu, đọc và ghi, cùng các cạnh throw và catch ngoại lệ.

## Ví dụ prompt cho agent

- "Ai gọi `CheckoutUseCase.invoke`, và từ những ViewModel nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "Lần theo luồng đồng bộ từ `SyncWorker` tới network client." (`get_task_context`)
- "Những lớp nào triển khai `PaymentGateway`?" (`dependency_search`)

## Giới hạn đã biết

- Khoảng 250 lời gọi thư viện chuẩn và nền tảng của Kotlin bị lọc khỏi quan hệ, nên các helper như `listOf`, `map`, `filter` và `println` không phải là cạnh đồ thị. Dùng `text_pattern_search` cho chúng.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Với codebase hỗn hợp, hãy đọc thêm [hướng dẫn Java](/vi/languages/java).

## Chi tiết engine

- Hỗ trợ Kotlin bao phủ `.kt` và `.kts`. Chữ ký ghi lại receiver mở rộng, tên tham số, giá trị mặc định và tham số `vararg`.
- Việc xác định kiểu receiver theo dõi `this` trong `apply` và `run`, `it` trong `let` và `also`, và đối số của `with`, còn lời gọi giữ tên có định danh lớp.
- Coroutine builder và toán tử Flow như `launch`, `withContext` và `flow` vẫn ở trong đồ thị, trong khi khoảng 250 lời gọi thư viện chuẩn bị lọc.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng cho một lớp, use case hoặc hàm mở rộng khi bạn cần định nghĩa và các tham chiếu.
- `dependency_search`: Trước khi đổi API, dùng duyệt theo chiều vào trên một repository hoặc interface để thấy nơi gọi và phần triển khai.
- `get_task_context`: Dùng cho các prompt như “lần theo luồng đồng bộ từ `SyncWorker` tới network client”.
