package Ġcom . so y wiz . k orge . gradle . util Ċ Ċ import Ġgro ovy . lang .* Ċ import Ġorg . gradle . api .* Ċ import Ġjava . lang . reflect .* Ċ Ċ fun Ġ< T > ĠProject . closure ( callback : Ġ() Ġ-> ĠT ) Ġ= ĠGro ovy Closure ( this , Ġcallback ) Ċ Ċ fun Ġ< T > ĠGro ovy Closure ( owner : ĠAny ?, Ġcallback : Ġ() Ġ-> ĠT ): ĠClosure < T > Ġ{ Ċ ĉ return Ġobject Ġ: ĠClosure < T >( owner ) Ġ{ Ċĉ ĉ override Ġfun Ġcall (): ĠT Ġ{ Ċĉĉ ĉ return Ġcallback () Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ internal Ġoperator Ġfun ĠAny ?. get ( key : ĠString ): ĠAny ? Ġ{ Ċ ĉ if Ġ( this Ġ== Ġnull ) Ġreturn Ġnull ĊĊ ĉ if Ġ( this Ġis ĠMap < *, Ġ* >) Ġ{ Ċĉ ĉ return Ġ( this Ġas ĠMap < Any ?, ĠAny ?> )[ key ] Ċ ĉ } ĊĊ ĉ if Ġ( this Ġis ĠGro ovy Object ) Ġ{ Ċĉ ĉ return Ġthis . getProperty ( key ) Ċ ĉ } ĊĊ ĉ val Ġfield Ġ= Ġtry GetField ( this . java Class , Ġkey ) Ċ ĉ if Ġ( field Ġ!= Ġnull ) Ġreturn Ġfield . get ( this ) ĊĊ ĉ val Ġmethod Ġ= Ġtry Get Empty Method ( this . java Class , Ġ" get " Ġ+ Ġkey . capitalize ()) Ċ ĉ if Ġ( method Ġ!= Ġnull ) Ġreturn Ġmethod . invoke ( this ) ĊĊ ĉ // if Ġ( this Ġis ĠIterable <* >) Ġ{ Ċ ĉ // ĠĠĠ Ġreturn Ġthis . map Ġ{ Ġit [ key ] Ġ} Ċ ĉ //} ĊĊ ĉ return Ġnull Ċ } Ċ Ċ private Ġfun Ġtry GetField ( clazz : ĠClass <* >, Ġname : ĠString ): ĠField ? Ġ{ Ċ ĉ val Ġfield Ġ= Ġrun Catch ing Ġ{ Ġclazz . getDeclared Field ( name ) Ġ}. get OrNull () Ċ ĉ return Ġwhen Ġ{ Ċĉ ĉ field Ġ!= Ġnull Ġ-> Ġfield . apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} Ċĉ ĉ clazz . super class Ġ!= Ġnull Ġ-> Ġreturn Ġtry GetField ( clazz . super class , Ġname ) Ċĉ ĉ else Ġ-> Ġnull Ċ ĉ } Ċ } Ċ Ċ private Ġfun Ġtry GetMethod ( clazz : ĠClass <* >, Ġname : ĠString ): ĠMethod ? Ġ{ Ċ ĉ val Ġfield Ġ= Ġrun Catch ing Ġ{ Ġclazz . declared Methods . first OrNull Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ}. get OrNull () Ċ ĉ return Ġwhen Ġ{ Ċĉ ĉ field Ġ!= Ġnull Ġ-> Ġfield . apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} Ċĉ ĉ clazz . super class Ġ!= Ġnull Ġ-> Ġreturn Ġtry GetMethod ( clazz . super class , Ġname ) Ċĉ ĉ else Ġ-> Ġnull Ċ ĉ } Ċ } Ċ Ċ private Ġfun Ġtry Get Empty Method ( clazz : ĠClass <* >, Ġname : ĠString ): ĠMethod ? Ġ{ Ċ ĉ val Ġfield Ġ= Ġrun Catch ing Ġ{ Ġclazz . getDeclared Method ( name ) Ġ}. get OrNull () Ċ ĉ return Ġwhen Ġ{ Ċĉ ĉ field Ġ!= Ġnull Ġ-> Ġfield . apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} Ċĉ ĉ clazz . super class Ġ!= Ġnull Ġ-> Ġreturn Ġtry GetMethod ( clazz . super class , Ġname ) Ċĉ ĉ else Ġ-> Ġnull Ċ ĉ } Ċ } Ċ