# Kotlin บน Maguyva: กราฟโค้ดสำหรับ Android และ JVM

Canonical source: https://maguyva.ai/th/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 รองรับ Kotlin ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส ฟังก์ชันส่วนขยาย และโครูทีนในโค้ด Android และ JVM

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .kt, .kts
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- ทีม Android ที่มีแอปหลายโมดูลขนาดใหญ่ ซึ่ง ViewModel, repository และยูสเคส เรียกกันข้ามขอบเขตโมดูล
- Kotlin ฝั่งเซิร์ฟเวอร์และบริการ Kotlin/JVM ที่ผสม Kotlin กับโค้ด Java รุ่นเก่า
- งาน build ของ Gradle ที่เขียนด้วยสคริปต์ Kotlin (`.kts`) ซึ่งเอเจนต์ต้องอ่านควบคู่กับโค้ดแอป

## เวิร์กโฟลว์ของเอเจนต์

- หาผู้เรียกทุกรายของคลาส repository หรือยูสเคสก่อนเปลี่ยน API
- ติดตามโฟลว์ของโครูทีนจาก `launch` ใน ViewModel ผ่าน `withContext` ไปจนถึงชั้นข้อมูล
- ทำแผนที่คลาสที่อิมพลีเมนต์อินเทอร์เฟซหรือ override เมธอดฐาน ก่อนการรีแฟกเตอร์

## จุดที่ Kotlin ทำให้เครื่องมือ AI แบบผิวเผินสะดุด

Kotlin กระชับเพราะซ่อนการเชื่อมต่อไว้ `apply`, `let`, `also`, `run` และ `with` เปลี่ยนความหมายของ `this` และ `it` ฟังก์ชันส่วนขยายเพิ่มพฤติกรรมให้ชนิดข้อมูลที่นิยามไว้ที่อื่น โครูทีนย้ายงานไปมาระหว่าง `launch`, `async` และ `withContext` เอเจนต์ที่อ่านทีละไฟล์จะเห็นการเรียก แต่ไม่เห็นรีซีฟเวอร์ที่อยู่เบื้องหลัง

Maguyva รีโซลฟ์โครงสร้างเหล่านี้ได้มากขึ้นตั้งแต่ตอนทำดัชนี เพื่อให้เอเจนต์ถามได้ว่าใครเรียกฟังก์ชันหนึ่ง และได้คำตอบที่แท้จริง

## Maguyva ดึงอะไรจาก Kotlin ได้บ้าง

Maguyva ครอบคลุม `.kt` และ `.kts` ฟังก์ชัน คลาส ออบเจกต์ และคอมแพเนียนออบเจกต์ถูกดึงออกมา และซิกเนเจอร์ของฟังก์ชันบันทึกรีซีฟเวอร์ของส่วนขยาย ชื่อพารามิเตอร์ ค่าเริ่มต้น และพารามิเตอร์ `vararg`

ความสัมพันธ์การเรียกเก็บชื่อที่ระบุคลาสไว้ `OrderRepository.save` จึงไม่ปนกับ `save` ตัวอื่น การระบุชนิดของรีซีฟเวอร์ติดตาม `this` ภายใน `apply` และ `run`, `it` ภายใน `let` และ `also` และอาร์กิวเมนต์ของ `with` การเรียกภายในฟังก์ชันขอบเขตจึงถูกรีโซลฟ์ไปยังชนิดข้อมูลที่ถูกต้อง ตัวสร้างโครูทีนและตัวดำเนินการของ Flow (`launch`, `async`, `withContext`, `coroutineScope`, `supervisorScope`, `flow`, `emit`, `delay`, `Channel`) ถูกเก็บไว้ในกราฟโดยตั้งใจ

กราฟยังบันทึกการสืบทอด การอิมพลีเมนต์อินเทอร์เฟซ การ override การสร้างอินสแตนซ์ แอนโนเทชัน การอ้างอิงชนิดข้อมูล การอ่านและการเขียน และเส้นเชื่อมการ throw และ catch เอกซ์เซปชันด้วย

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "ใครเรียก `CheckoutUseCase.invoke` และเรียกจาก ViewModel ใดบ้าง" (`find_symbol` แล้วตามด้วย `dependency_search` ทิศทางขาเข้า)
- "ติดตามโฟลว์การซิงก์จาก `SyncWorker` ไปจนถึงไคลเอนต์เครือข่าย" (`get_task_context`)
- "คลาสใดบ้างที่อิมพลีเมนต์ `PaymentGateway`" (`dependency_search`)

## ข้อจำกัดที่ทราบ

- การเรียกไลบรารีมาตรฐานและแพลตฟอร์มของ Kotlin ราว 250 รายการถูกกรองออกจากความสัมพันธ์ ตัวช่วยอย่าง `listOf`, `map`, `filter` และ `println` จึงไม่เป็นเส้นเชื่อมในกราฟ ใช้ `text_pattern_search` สำหรับกรณีเหล่านี้

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) สำหรับโค้ดเบสที่ผสมกัน ให้อ่าน[คู่มือภาษา Java](/th/languages/java) ด้วย

## รายละเอียดเอนจิน

- การรองรับ Kotlin ครอบคลุม `.kt` และ `.kts` ซิกเนเจอร์บันทึกรีซีฟเวอร์ของส่วนขยาย ชื่อพารามิเตอร์ ค่าเริ่มต้น และพารามิเตอร์ `vararg`
- การระบุชนิดของรีซีฟเวอร์ติดตาม `this` ใน `apply` และ `run`, `it` ใน `let` และ `also` และอาร์กิวเมนต์ของ `with` ส่วนการเรียกเก็บชื่อที่ระบุคลาสไว้
- ตัวสร้างโครูทีนและตัวดำเนินการของ Flow เช่น `launch`, `withContext` และ `flow` ยังอยู่ในกราฟ ขณะที่การเรียกไลบรารีมาตรฐานราว 250 รายการถูกกรองออก

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้กับคลาส ยูสเคส หรือฟังก์ชันส่วนขยาย เมื่อต้องการนิยามและการอ้างอิง
- `dependency_search`: ก่อนเปลี่ยน API ใช้การท่องกราฟทิศทางขาเข้าบนคลาส repository หรืออินเทอร์เฟซ เพื่อดูผู้เรียกและการอิมพลีเมนต์
- `get_task_context`: ใช้กับพรอมต์อย่าง “ติดตามโฟลว์การซิงก์จาก `SyncWorker` ไปจนถึงไคลเอนต์เครือข่าย”
