/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 8 ĠJul ian ĠEx en ber ger Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĠĠ Ġ` * ĠĠ Ġ`[ ` http :// www . apache . org / licenses / LICENSE - 2 . 0 `]( http :// www . apache . org / licenses / LICENSE - 2 . 0 ) Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . code stream . runtime . container Ċ Ċ import Ġio . code stream . api . Component Property FailureException Ċ import Ġio . code stream . api . Kotlin Module Ċ import Ġio . code stream . api . descriptor . Parameter Descriptor Ċ import Ġio . code stream . api . annotations . Parameter Ċ import Ġio . code stream . api . met amodel . Task Def Ċ import Ġio . code stream . runtime . Task Def Id Ċ import Ġio . code stream . api . TaskId Ċ import Ġio . code stream . api . services . Language Ċ import Ġio . code stream . util . script . Script Service Ċ import Ġio . code stream . di . api . Annotation Dependency Ċ import Ġio . code stream . di . api . Context Ċ import Ġio . code stream . di . api . Dependency Target Ċ import Ġio . code stream . util . transformation . Transformer Service Ċ import Ġkotlin . reflect . full . is Subclass Of Ċ Ċ class ĠParameter Dependency Ġ: ĠAnnotation Dependency < Parameter >( Parameter :: class ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġresolve ( annotation : ĠParameter , Ġtarget : ĠDependency Target , Ġctx : ĠContext ): ĠT ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġscript Service Ġ= Ġctx . get < Script Service >( Script Service :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" No Ġ'${ Script Service :: class }' Ġregistered Ġin Ġcontext ") ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġtarget . id Ġas ĠTask Id ĊĊĠĠĠĠĠĠĠ Ġval ĠpropertyName Ġ= Ġif Ġ( annotation . alias . isNotEmpty ()) Ġannotation . alias Ġelse Ġtarget . name ĊĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= ĠKotlin Module . create Property ( target . name , Ġtarget . target Type , Ġannotation ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdef n Id Ġ= ĠTask Def Id ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġdef n Ġ= Ġctx . get < Task Def >( defn Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠComponent Property FailureException ( id . string Id , Ġtarget . name , Ġ" task Ġmissing Ġdefinition ") ĊĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġdef n . parameters [ propertyName ]?. value Defn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( property Ġ== Ġnull Ġ&& Ġannotation . default . isEmpty () Ġ&& Ġ! target . is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠComponent Property FailureException ( id . task Type . task Name , Ġtarget . name , Ġ" not Ġdefined Ġin Ġdefinition , Ġhas Ġno Ġdefault Ġand Ġis Ġnot Ġoptional ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( property Ġ== Ġnull Ġ&& Ġannotation . default . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperty ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalue Defn Ġ= Ġproperty Ġ?: Ġannotation . default ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġscript Service . eval ( property . toString (), Ġctx . bindings , Ġtrue , Ġ" m vel ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . target Type . is Subclass Of ( Enum :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransformer Service . convert With Null < Any >( value Defn , Ġtarget . target Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . type . convert < T >( value Defn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpost Processed Ġ= Ġpost Process ( result , Ġscript Service , Ġctx ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Valid ( post Processed , Ġdescriptor , Ġid ) Ġas ĠT ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġcheck Valid ( value : ĠT , Ġdescriptor : ĠParameter Descriptor , Ġid : ĠTask Id ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġdescriptor . isValid ( value ). right ?. let Ġ{ Ġthrow Ġ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Process Map ( value : ĠMap < String , ĠAny ? >, Ġscript Service : ĠScript Service , Ġctx : ĠContext ): ĠMap < String , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . map Values Ġ{ Ġ(_, Ġthe Value ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( the Value Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Service . eval ( the Value , Ġctx . bindings , Ġtrue , Ġ" m vel ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġpost Process ( value : ĠT , Ġscript Service : ĠScript Service , Ġctx : ĠContext ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġpost Process Map ( value Ġas ĠMap < String , ĠAny ? >, Ġscript Service , Ġctx ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }