# لغة Kotlin في Maguyva: رسوم بيانية للشيفرة في Android وJVM

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الفئات ودوال الامتداد والروتينات المشتركة في شيفرة Android وJVM.

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .kt, .kts
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

- فرق Android ذات التطبيقات الكبيرة متعددة الوحدات، حيث تستدعي ViewModels والمستودعات وحالات الاستخدام بعضها بعضًا عبر حدود الوحدات.
- Kotlin على الخادم وخدمات Kotlin/JVM التي تمزج Kotlin بشيفرة Java أقدم.
- عمليات بناء Gradle المكتوبة بسكربت Kotlin (`.kts`)، والتي يحتاج الوكلاء إلى قراءتها مع شيفرة التطبيق.

## سير عمل الوكلاء

- العثور على كل من يستدعي فئة مستودع أو حالة استخدام قبل تغيير واجهتها البرمجية.
- تتبّع تدفق الروتينات المشتركة من `launch` في ViewModel، عبر `withContext`، وصولًا إلى طبقة البيانات.
- رسم خريطة الفئات التي تنفّذ واجهة أو تتجاوز أسلوبًا أساسيًا قبل إعادة الهيكلة.

## أين تُربك Kotlin أدوات الذكاء الاصطناعي السطحية

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`).

ويسجّل الرسم البياني أيضًا الوراثة وتنفيذ الواجهات والتجاوزات وإنشاء المثيلات والتعليقات التوضيحية (annotations) ومراجع الأنواع والقراءات والكتابات وحواف رمي الاستثناءات والتقاطها.

## أمثلة على مطالبات الوكلاء

- "من يستدعي `CheckoutUseCase.invoke`، ومن أي ViewModels؟" (`find_symbol` ثم `dependency_search` في الاتجاه الوارد)
- "تتبّع تدفق المزامنة من `SyncWorker` إلى عميل الشبكة." (`get_task_context`)
- "ما الفئات التي تنفّذ `PaymentGateway`؟" (`dependency_search`)

## القيود المعروفة

- يُستبعد من العلاقات نحو 250 استدعاءً من المكتبة القياسية لـ Kotlin والمنصة، لذا فإن الأدوات المساعدة مثل `listOf` و`map` و`filter` و`println` ليست حوافَّ في الرسم البياني. استخدم `text_pattern_search` لها.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). ولقواعد الشيفرة المختلطة، اقرأ أيضًا [دليل لغة Java](/ar/languages/java).

## تفاصيل المحرك

- يغطي دعم Kotlin الملفات `.kt` و`.kts`. تسجّل التوقيعات مستقبِلات الامتداد وأسماء المعاملات والقيم الافتراضية ومعاملات `vararg`.
- يتتبّع تحديد نوع المستقبِل `this` في `apply` و`run`، و`it` في `let` و`also`، ووسيط `with`، وتحتفظ الاستدعاءات بالأسماء المؤهَّلة بالفئة.
- تبقى في الرسم البياني بانيات الروتينات المشتركة ومعاملات Flow مثل `launch` و`withContext` و`flow`، بينما يُستبعد نحو 250 استدعاءً من المكتبة القياسية.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه لفئة أو حالة استخدام أو دالة امتداد حين تحتاج إلى التعريف والمراجع.
- `dependency_search`: قبل تغيير الواجهة البرمجية، استخدم التتبّع في الاتجاه الوارد على مستودع أو واجهة لرؤية المستدعين والتنفيذات.
- `get_task_context`: استخدمه لمطالبات مثل «تتبّع تدفق المزامنة من `SyncWorker` إلى عميل الشبكة».
