# Groovy-tuki Maguyva-palvelussa: koodigraafit Gradle- ja Jenkins-koodille

Canonical source: https://maguyva.ai/fi/languages/groovy

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 Groovya AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, sulkeumia ja kutsuja Groovy-sovelluksissa, Gradle-buildeissa ja Jenkinsfile-tiedostoissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .gradle, .groovy, .jenkinsfile
- 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

- Groovylla kirjoitetut Gradle-buildit, joissa jaettu build-logiikka on hajallaan monessa `.gradle`-tiedostossa.
- Jenkins-putket ja jaetut kirjastot, jotka agenttien on luettava ennen CI:n muuttamista.
- Groovy-sovellukset ja Spock-testisarjat JVM:llä.

## Agenttien työnkulut

- Löytää jaetun kirjaston askeleen kaikki kutsujat ennen sen argumenttien muuttamista.
- Jäljittää, mitkä build-skriptit kutsuvat yhteisessä `.gradle`-tiedostossa määriteltyä apufunktiota.
- Kartoittaa ennen refaktorointia, mitkä luokat perivät kantaluokasta.

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

Groovy näyttää usein konfiguraatiolta. Gradle-buildissa `dependencies { implementation ... }` on sulkeumia sisältävä metodikutsujen ketju, ja deklaratiivinen Jenkinsfile on samanlainen. Builderit muuttavat mitä tahansa nimiä kutsuiksi, ja GDK lisää jokaiseen olioon metodeja kuten `each` ja `collect`. Työkalu, joka tallentaa jokaisen kutsun, hukkuu tähän kohinaan.

Maguyva suodattaa DSL- ja GDK-kerroksen pois, jotta omat metodisi ja luokkasi erottuvat.

## Mitä Maguyva poimii Groovysta

Maguyva kattaa `.groovy`- ja `.gradle`-tiedostot sekä `Jenkinsfile`-tiedostot. Luokat, funktiot ja metodit poimitaan, ja tuonnit normalisoivat `import static`- ja `as`-aliakset. Kutsujen nimistä poistetaan loppuun jäävät sulkeumalohkot ja turvallisen navigoinnin operaattori `?.`, joten `repo?.save(order) { ... }` tallentuu kutsuksi `save`. Vastaanottajaton kutsu luokan sisällä ratkeaa luokan omaksi metodiksi.

Kohina suodatetaan kerroksittain:

- Noin 140 standardikirjaston, Gradlen ja Spockin nimeä, kuten `dependencies`, `implementation`, `task`, `given`, `when`, `then` ja `Mock`.
- Noin 260 GDK-metodia, kuten `each`, `collect`, `inject` ja `eachLine`.
- Builder-DSL:n nimet, myös Jenkins-askeleet kuten `pipeline`, `stage`, `steps` ja `sh`, kun niitä käytetään builder-tyylisesti eikä kutsuta sulkeiden kanssa.
- AST-muunnosten ja kehysten annotaatiot, kuten `@CompileStatic`, `@Immutable` ja `@Autowired`, joita ei koskaan tallenneta kutsuiksi.

Graafi tallentaa myös perinnän, instanssien luonnit sekä luvut ja kirjoitukset.

## Esimerkkikehotteita agenteille

- ”Kuka kutsuu funktiota `deployToStaging` ja mistä putkista?” (`find_symbol`, sitten `dependency_search` incoming)
- ”Mitkä luokat perivät luokasta `BaseIntegrationSpec`?” (`dependency_search`)
- ”Selitä, miten julkaisutehtävä rakentaa ja julkaisee artefaktit.” (`get_task_context`)

## Tunnetut rajoitukset

- Groovyn metodit ja vapaat funktiot jakavat saman syntaksisolmun, joten `structural_search`-työkalun esiasetus `methods` ei valitse mitään. Käytä sen sijaan esiasetusta `functions` tai `find_symbol`-työkalua.
- Oma metodi, jolla on sama nimi kuin GDK- tai DSL-metodilla, kuten `collect` tai `stage`, voi suodattua pois niiden mukana. Käytä `text_pattern_search`-työkalua, jos jokin kutsuja näyttää puuttuvan.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Buildiesi kääntämää JVM-koodia varten lue [Java-opas](/fi/languages/java) ja [Kotlin-opas](/fi/languages/kotlin).

## Moottorin yksityiskohdat

- Groovy-tuki kattaa `.groovy`- ja `.gradle`-tiedostot sekä `Jenkinsfile`-tiedostot. Kutsujen nimistä poistetaan sulkeumalohkot ja `?.`-turvanavigointi.
- Noin 140 standardikirjaston, Gradlen ja Spockin nimeä sekä noin 260 GDK-metodia suodatetaan pois suhteista.
- Builder-DSL:n nimet, myös Jenkins-askeleet kuten `stage` ja `sh`, suodatetaan builder-tyylissä, eikä annotaatioita koskaan tallenneta kutsuiksi.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä jaetun kirjaston askeleelle, build-apufunktiolle tai luokalle, kun tarvitset määritelmän ja kutsujat.
- `dependency_search`: Käytä incoming-läpikäyntiä build-apufunktiolle nähdäksesi, mitkä skriptit ja putket kutsuvat sitä.
- `text_pattern_search`: Käytä sitä DSL-kutsuihin ja GDK-metodeihin, jotka suodatetaan pois graafista.
