package Ġcom . gue t . flex box . build Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Color . parse Color Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġcom . facebook . l ith o . Component Ċ import Ġcom . facebook . l ith o . Component Context Ċ import Ġcom . gue t . flex box . NodeInfo Ċ import Ġcom . gue t . flex box . el . EL Exception Ċ import Ġcom . gue t . flex box . el . EL Manager Ċ import Ġcom . gue t . flex box . el . EL Processor Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . lang . reflect . Modifier Ċ Ċ class ĠBuild Context ( val Ġcomponent Context : ĠComponent Context , Ġdata : ĠAny ?) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġel Ġ= ĠEL Processor () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Scope ( try ToMap ( data )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfunctions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel . define Function ( it . getAnnotation ( Prefix :: class . java ). value , Ġit . name , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġenter Scope ( scope : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠ Ġel . el Manager . el Context . enter Lambda Scope ( scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġexit Scope () Ġ{ ĊĠĠĠĠĠĠĠ Ġel . el Manager . el Context . exit Lambda Scope (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( EL Exception :: class ) ĊĠĠĠ Ġfun Ġ< T > ĠgetValue ( expr : ĠString , Ġtype : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġve Ġ= ĠEL Manager . get Expression Factory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Value Expression ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . el Manager . el Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġve . getValue ( el . el Manager . el Context ) Ġ?: Ġthrow ĠEL Exception () ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġv Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġ@ Throws ( EL Exception :: class ) ĊĠĠĠ Ġfun Ġget Color ( expr : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse Color ( expr ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġscope ( color Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠgetValue ( expr , ĠAny :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠNumber ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Color ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinline Ġfun Ġ< T > Ġscope ( scope : ĠMap < String , ĠAny >, Ġaction : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġenter Scope ( scope ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaction () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Scope () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) ĊĠĠĠ Ġfun Ġcreate Layout ( root : ĠNode Info ): ĠComponent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate From Element ( root ). single (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate From Element ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement : ĠNode Info , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupper Visibility : ĠInt Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ): ĠList < Component . Builder <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransforms . getValue ( element . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupper Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcolor Map Ġ= ĠHashMap (( Color :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDeclared Field (" s Color Name Map ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( null ) Ġas ĠMap < String , ĠInt > )) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfunctions : ĠList < Method > Ġ= ĠFunctions :: class . java . declared Methods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . modifiers . let Ġ{ Ġmod Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . is Public ( mod ) Ġ&& ĠModifier . is Static ( mod ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ&& Ġit . is Annotation Present ( Prefix :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ Ġit . is Accessible Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtransforms Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Image " Ġto ĠImage Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Flex " Ġto ĠFlex Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Text " Ġto ĠText Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Frame " Ġto ĠFrame Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Native " Ġto ĠNative Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Scroller " Ġto ĠSc roller Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Empty " Ġto ĠEmpty Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" for " Ġto ĠFor Transform ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target ( Annotation Target . FUNCTION ) ĊĠĠĠ Ġ@ Retention ( Annotation Retention . RUNTIME ) ĊĠĠĠ Ġprivate Ġannotation Ġclass ĠPrefix ( val Ġvalue : ĠString ) ĊĊĠĠĠ Ġprivate Ġobject ĠFunctions Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Prefix (" utils ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" check ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġcheck ( o : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( o ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġo . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCollection < *> Ġ-> Ġ! o . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġo . toInt () Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġo Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Prefix (" draw ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" gradient ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġgradient ( orientation : ĠGradient Drawable . Orientation , Ġvar arg Ġcolors : ĠString ): ĠGradient Drawable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGradient Drawable ( orientation , Ġcolors . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Color ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to IntArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ