// ĠOriginal Ġbug : ĠK T - 1 0 6 6 0 Ċ Ċ package Ġde . d iz ay n design . utils . overlap 2 d čĊč Ċ import Ġkotlin . properties . Deleg ates č Ċ import Ġkotlin . properties . ReadOnly Property č Ċ import Ġkotlin . reflect . K Property čĊč Ċ /** čĊ Ġ* ĠCreated Ġby ĠOs man Ġon Ġ 0 3 . 0 8 . 2 0 1 5 . čĊ Ġ* čĊ Ġ*/ čĊč Ċ class ĠO 2 d Injection Closure < Prop Type Ġ: ĠAny >( val Ġmeta Ġ: ĠInject Deleg ation Meta , Ġpublic Ġvar Ġinitializer Ġ: Ġ( prop Name Ġ: ĠString ) Ġ-> ĠProp Type ) čĊĠĠĠ Ġ: ĠReadOnly Property < Any ?, ĠProp Type > Ġ{ čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġmeta . inject Closure Ġ= Ġthis čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġpublic Ġvar Ġvalue : ĠProp Type ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġprivate Ġset čĊčĊčĊĠĠĠ Ġpublic Ġinline Ġfun Ġappend Initializer ( cross inline Ġappended : Ġ( Prop Type ) Ġ-> ĠProp Type ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcur Initializer Ġ= Ġinitializer čĊĠĠĠĠĠĠĠ Ġinitializer Ġ= Ġ{ Ġprop Name Ġ-> Ġappended ( cur Initializer ( prop Name )) Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdo Injection () Ġ{ čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġinitializer (" NO ĠPROPERTY ĠNAME ĠG IV EN ") čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠType CastException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" injection Ġfailed Ġfor Ġproperty !") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġpublic Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠProp Type Ġ= Ġvalue !! č Ċ } čĊč Ċ class ĠInject Deleg ation Meta Ġ{ čĊĠĠĠ Ġvar Ġinject Closure Ġ: ĠO 2 d Injection Closure < *> Ġby ĠDeleg ates . notNull () č Ċ } čĊ