/* Ċ Ġ* Ġ Ġ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 . di . api Ċ Ċ import Ġkotlin . reflect . K Annotated Element Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Mutable Property Ċ import Ġkotlin . reflect . K Parameter Ċ import Ġkotlin . reflect . jvm . java Setter Ċ import Ġkotlin . reflect . jvm . jvm Er asure Ċ Ċ data Ġclass ĠDependency Target ( val Ġid : Component Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner : ĠK Class <* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty : ĠK Mutable Property < *> ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter : ĠK Parameter ?) Ġ{ ĊĊĠĠĠ Ġconstructor ( id : ĠComponent Id , Ġowner : ĠK Class <* >, Ġproperty : ĠK Mutable Property <* >) Ġ: Ġthis ( id , Ġowner , Ġproperty , Ġnull ) ĊĠĠĠ Ġconstructor ( id : ĠComponent Id , Ġowner : ĠK Class <* >, Ġparameter : ĠK Parameter ) Ġ: Ġthis ( id , Ġowner , Ġnull , Ġparameter ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( property Ġ!= Ġnull Ġ&& Ġparameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" an Ġeither Ġbe Ġproperty Ġor Ġparameter Ġbut Ġnot Ġboth ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( property Ġ== Ġnull Ġ&& Ġparameter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" must Ġdefine Ġeither Ġparameter Ġto Ġproperty ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtarget Type : ĠK Class < *> Ġget () Ġ= Ġperform ({ Ġit . returnType . jvm Er asure Ġ}, Ġ{ Ġit . type . jvm Er asure Ġ}) ĊĊĠĠĠ Ġval Ġname : ĠString Ġget () Ġ= Ġperform ({ Ġit . name Ġ}, Ġ{ Ġit . name !! Ġ}) ĊĊĠĠĠ Ġval Ġpath : String Ġget () Ġ= Ġ"${ owner . simple Name }. $ name " ĊĊĠĠĠ Ġval Ġannotated Element : ĠK Annotated Element Ġget () Ġ= Ġperform ({ Ġit Ġ}, Ġ{ Ġit Ġ}) ĊĊĠĠĠ Ġval Ġis Nullable : Boolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . property Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . property . returnType . is Marked Nullable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this . parameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . parameter . type . is Marked Nullable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// should Ġnever Ġget Ġhere ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" an Ġeither Ġbe Ġproperty Ġor Ġparameter Ġbut Ġnot Ġboth ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġis Optional : Boolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . property Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this . parameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . parameter . is Optional ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// should Ġnever Ġget Ġhere ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" an Ġeither Ġbe Ġproperty Ġor Ġparameter Ġbut Ġnot Ġboth ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsupports ( dependency : ĠDependency ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġperform ({ Ġdependency . supports ( it ) Ġ}, Ġ{ Ġdependency . supports ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġperform ( property : Ġ( p : ĠK Mutable Property <* >) Ġ-> ĠT , Ġparameter : Ġ( p : ĠK Parameter ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . property Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperty ( this . property ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( this . parameter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparameter ( this . parameter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// should Ġnever Ġget Ġhere ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" an Ġeither Ġbe Ġproperty Ġor Ġparameter Ġbut Ġnot Ġboth ") ĊĠĠĠ Ġ} ĊĊĊĊ Ċ }