Comprendre la syntaxe groovy dans une définition de tâche progressive

Je suis nouveau à Gradle et Groovy et essaye de comprendre ce qui se passe au niveau du groovy quand une tâche de graduation est définie.

task hello { println "configuring task hello" doLast { println "hello there" } } 

En lisant le livre “Gradle In Action”, je sais que la task hello {} est vraiment un appel à la méthode task() de l’interface groovy Project . Sur la page 77, il montre qu’il existe 4 méthodes appelées tâche sur l’interface du Project

 task(args: Map, name:Ssortingng) task(args: Map, name:Ssortingng, c:Closure) task(name: Ssortingng) task(name: Ssortingng, c:Closure) 

Je comprends que le {} est le corps de fermeture.

Ce que je ne comprends pas, c’est comment groovy interprète hello dans la task hello { } selon https://stackoverflow.com/a/25592665/438319 il y a un plugin groovy de compilateur qui convertit la task hello { } en task('hello', { })

Mes questions:

  • Où puis-je trouver des informations sur le plug-in Gradle Groovy Comstackr qui effectue la conversion?

  • Est-ce que l’affirmation selon laquelle les scripts Gradle sont des programmes groovy techniquement incorrects puisque gradle étend en quelque sorte le langage de programmation Groovy?

  • Est-il possible d’obtenir la commande gradle pour imprimer le code groovy de base généré après l’exécution du plug-in du compilateur?

Gradle utilise AST Transformations pour étendre la syntaxe Groovy. La syntaxe de définition de tâche que vous mentionnez n’est qu’une des transformations appliquées par Gradle. Vous pouvez trouver l’implémentation de cette transformation ici . Pour répondre à vos questions spécifiques:

  • Les transformations individuelles appliquées par Gradle ne sont pas documentées de manière spécifique, à ma connaissance. Vous pouvez cependant regarder les autres classes dans le même paquet du lien ci-dessus.

  • Les scripts Gradle prennent en charge un super-ensemble de syntaxe Groovy. Tout Groovy valide est également valide dans un script Gradle, cependant, un script Gradle n’est pas nécessairement (et généralement pas) “Groovy par défaut” valide.

  • Il n’y a pas moyen d’obtenir une sortie du code Groovy équivalent car c’est l’arbre de syntaxe abstraite réel qui est manipulé en mémoire.