// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . plugins . gradle . service . resolve Ċ Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . scope . Psi Scope Processor Ċ import Ġgro ovy . lang . Closure Ċ import Ġorg . jetbrains . plugins . gradle . service . resolve . Gradle Common ClassNames . GRAD LE _ API _ PROJECT Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . impl . statements . expressions . Types Util . create Type Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . impl . synt hetic . Gr Light Method Builder Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . util . Gro ovy Common ClassNames . GRO OV Y _ LANG _ CLO S URE Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . Non Code Members Contributor Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . deleg ates To . DE LEG ATES _ TO _ KEY Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . deleg ates To . Deleg ates To Info Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . getName Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . should Process Methods Ċ import Ġorg . jetbrains . plugins . groovy . lang . resolve . should Process Properties Ċ Ċ class ĠGradle Project Extension Contributor Ġ: ĠNon Code Members Contributor () Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetParent ClassName (): ĠString ? Ġ= ĠGR AD LE _ API _ PROJECT ĊĊĠ Ġoverride Ġfun Ġprocess Dynamic Elements ( qual ifier Type : ĠPsi Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Class : ĠPsi Class ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor : ĠPsi Scope Processor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace : ĠPsi Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠResolve State ) Ġ{ ĊĠĠĠ Ġif Ġ( qual ifier Type Ġ! is ĠGradle Project Aware Type ) Ġreturn ĊĊĠĠĠ Ġval Ġprocess Methods Ġ= Ġprocessor . should Process Methods () ĊĠĠĠ Ġval Ġprocess Properties Ġ= Ġprocessor . should Process Properties () ĊĠĠĠ Ġif Ġ(! process Methods Ġ&& Ġ! process Properties ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontaining File Ġ= Ġplace . containing File ĊĠĠĠ Ġval Ġextensions Data Ġ= ĠGradle Extensions Contributor . get Extensions For ( containing File ) Ġ?: Ġreturn ĊĊĠĠĠ Ġval Ġname Ġ= Ġprocessor . getName ( state ) ĊĠĠĠ Ġval Ġall Extensions Ġ= Ġextensions Data . extensions ĊĠĠĠ Ġval Ġextensions Ġ= Ġif Ġ( name Ġ== Ġnull ) Ġall Extensions . values Ġelse ĠlistOf ( all Extensions [ name ] Ġ?: Ġreturn ) ĊĠĠĠ Ġif Ġ( extensions . isEmpty ()) Ġreturn ĊĊĠĠĠ Ġval Ġfactory Ġ= ĠPsi Element Factory . getInstance ( containing File . project ) ĊĠĠĠ Ġval Ġmanager Ġ= Ġcontaining File . manager ĊĊĠĠĠ Ġfor Ġ( extension Ġin Ġextensions ) Ġ{ ĊĠĠĠĠĠ Ġval Ġtype Ġ= ĠGradle Extension Type ( factory . create Type By FQ ClassName ( extension . root Type F qn , Ġplace . resolve Scope )) ĊĠĠĠĠĠ Ġif Ġ( process Properties ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension Property Ġ= ĠGradle Extension Property ( extension . name , Ġtype , Ġcontaining File ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! processor . execute ( extension Property , Ġstate )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( process Methods ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextension Method Ġ= ĠGr Light Method Builder ( manager , Ġextension . name ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠreturnType Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠ Ġadd AndGet Parameter (" configuration ", Ġcreate Type ( GRO OV Y _ LANG _ CLO S URE , Ġcontaining File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put UserData ( DE LEG ATES _ TO _ KEY , ĠDeleg ates To Info ( type , ĠClosure . DE LEG ATE _ FIRST )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! processor . execute ( extension Method , Ġstate )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ