# Kotlin-tuki Maguyva-palvelussa: koodigraafit Androidille ja JVM:lle

Canonical source: https://maguyva.ai/fi/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 tukee Kotlinia AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, laajennusfunktioita ja korutiineja Android- ja JVM-koodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .kt, .kts
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Android-tiimit, joilla on suuria monimoduulisovelluksia, joissa ViewModelit, repositoriot ja käyttötapaukset kutsuvat toisiaan moduulirajojen yli.
- Palvelinpuolen Kotlin ja Kotlin/JVM-palvelut, joissa Kotlin on vanhemman Java-koodin rinnalla.
- Kotlin-skriptillä (`.kts`) kirjoitetut Gradle-koonnit, joita agenttien on luettava sovelluskoodin ohella.

## Agenttien työnkulut

- Löytää kaikki repositorio- tai käyttötapausluokan kutsujat ennen kuin sen API:a muutetaan.
- Jäljittää korutiinivuo ViewModelin `launch`-kutsusta `withContext`-kutsun kautta datakerrokseen.
- Kartoittaa ennen refaktorointia, mitkä luokat toteuttavat rajapinnan tai ylikirjoittavat kantametodin.

## Missä Kotlin kampittaa pinnallisia tekoälytyökaluja

Kotlin on tiivis, koska se kätkee kytkennät. `apply`, `let`, `also`, `run` ja `with` muuttavat sitä, mitä `this` ja `it` tarkoittavat. Laajennusfunktiot lisäävät toimintaa muualla määritellyille tyypeille. Korutiinit siirtävät työtä kutsujen `launch`, `async` ja `withContext` välillä. Tiedoston kerrallaan lukeva agentti näkee kutsut mutta ei niiden takana olevia vastaanottajia.

Maguyva ratkaisee suuremman osan tästä rakenteesta jo indeksoinnissa, joten agentti voi kysyä, kuka funktiota kutsuu, ja saada todellisen vastauksen.

## Mitä Maguyva poimii Kotlinista

Maguyva kattaa tiedostot `.kt` ja `.kts`. Funktiot, luokat, oliot ja kumppanioliot poimitaan, ja funktioiden allekirjoituksiin tallentuvat laajennusvastaanottajat, parametrien nimet, oletusarvot ja `vararg`-parametrit.

Kutsusuhteet säilyttävät luokalla tarkennetut nimet, joten `OrderRepository.save` erottuu muista `save`-funktioista. Vastaanottajan tyypitys seuraa `this`-viittausta funktioiden `apply` ja `run` sisällä, `it`-viittausta funktioiden `let` ja `also` sisällä sekä funktion `with` argumenttia, jotta näkyvyysalueen funktioiden kutsut ratkeavat oikeaan tyyppiin. Korutiinien rakentajat ja Flow-operaattorit (`launch`, `async`, `withContext`, `coroutineScope`, `supervisorScope`, `flow`, `emit`, `delay`, `Channel`) säilytetään graafissa tarkoituksella.

Graafi tallentaa myös periytymisen, rajapintojen toteutukset, ylikirjoitukset, ilmentymien luonnin, annotaatiot, tyyppiviittaukset, luvut ja kirjoitukset sekä poikkeusten heittämisen ja kiinniottamisen kaaret.

## Esimerkkikehotteita agenteille

- "Kuka kutsuu funktiota `CheckoutUseCase.invoke`, ja mistä ViewModeleista?" (`find_symbol`, sitten `dependency_search` incoming)
- "Jäljitä synkronointivuo luokasta `SyncWorker` verkkoasiakkaaseen." (`get_task_context`)
- "Mitkä luokat toteuttavat rajapinnan `PaymentGateway`?" (`dependency_search`)

## Tunnetut rajoitukset

- Noin 250 Kotlinin standardikirjaston ja alustan kutsua suodatetaan pois suhteista, joten apufunktiot kuten `listOf`, `map`, `filter` ja `println` eivät ole graafin kaaria. Käytä niihin työkalua `text_pattern_search`.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Sekakoodikannoissa lue myös [Java-opas](/fi/languages/java).

## Moottorin yksityiskohdat

- Kotlin-tuki kattaa tiedostot `.kt` ja `.kts`. Allekirjoituksiin tallentuvat laajennusvastaanottajat, parametrien nimet, oletusarvot ja `vararg`-parametrit.
- Vastaanottajan tyypitys seuraa `this`-viittausta funktioissa `apply` ja `run`, `it`-viittausta funktioissa `let` ja `also` sekä funktion `with` argumenttia, ja kutsut säilyttävät luokalla tarkennetut nimet.
- Korutiinien rakentajat ja Flow-operaattorit, kuten `launch`, `withContext` ja `flow`, jäävät graafiin, kun taas noin 250 standardikirjaston kutsua suodatetaan pois.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä luokalle, käyttötapaukselle tai laajennusfunktiolle, kun tarvitset määrittelyn ja viittaukset.
- `dependency_search`: Käytä ennen API-muutosta incoming-läpikäyntiä repositorioon tai rajapintaan nähdäksesi kutsujat ja toteutukset.
- `get_task_context`: Käytä sitä kehotteisiin kuten "jäljitä synkronointivuo luokasta `SyncWorker` verkkoasiakkaaseen".
