package Ġorg . server ct . par rot . par ro tx . ui . feature . util Ċ Ċ import Ġorg . server ct . par rot . par ro tx . container . Simple Registry Ċ import Ġorg . server ct . par rot . par ro tx . ui . Menu Component Ċ import Ġorg . server ct . par rot . par ro tx . ui . Menu Feature Ċ import Ġorg . server ct . par rot . par ro tx . ui . config . Menu Configuration Ċ import Ġtab ool ib . common . Life Cycle Ċ import Ġtab ool ib . common . inject . Injector Ċ import Ġtab ool ib . common . platform . Aw ake Ċ import Ġtab ool ib . module . ui . Click Event Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . util . function . Supplier Ċ Ċ interface ĠMenu Op ener Ġ{ ĊĊĠĠĠ Ġvar Ġname : ĠString ĊĊĠĠĠ Ġfun Ġopen ( config : ĠMenu Configuration , Ġdata : ĠMap < *, Ġ* >, Ġevent : ĠClick Event , Ġvar arg Ġargs : ĠAny ?) ĊĊĠĠĠ Ġobject ĠRegistry Ġ: ĠSimple Registry < String , ĠMenu Op ener >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġregistered : ĠMutable Map < String , ĠMenu Op ener > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠMenu Op ener . key : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġname ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġmenu Op ener ( handler : ĠMenu Feature . Handler < Click Event >) Ġ= Ġobject Ġ: ĠMenu Op ener Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġname : ĠString Ġ= Ġ" Anonymous " ĊĠĠĠ Ġoverride Ġfun Ġopen ( config : ĠMenu Configuration , Ġdata : ĠMap < *, Ġ* >, Ġevent : ĠClick Event , Ġvar arg Ġargs : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler . handle ( config , Ġdata , Ġevent , Ġ* args ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Aw ake Ċ internal Ġobject ĠMenu Op ener Register Ġ: ĠInject or . Classes , ĠInject or . Fields Ġ{ ĊĠĠĠ Ġoverride Ġval Ġlife Cycle : ĠLife Cycle Ġ= ĠLife Cycle . ENABLE ĊĠĠĠ Ġoverride Ġval Ġpriority : ĠByte Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġinject ( clazz : ĠClass <* >, Ġinstance : ĠSupplier <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Menu Op ener :: class . java . isAssignableFrom ( clazz )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMenu Op ener . Registry . register ( instance . get () Ġas ĠMenu Op ener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġopen ers : ĠMutable Map < String , ĠMutable Map < String , ĠMenu Op ener >> Ġ= ĠHashMap () ĊĊĠĠĠ Ġoverride Ġfun Ġinject ( field : ĠField , Ġclazz : ĠClass <* >, Ġinstance : ĠSupplier <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Menu Op ener :: class . java Ġ== Ġfield . type Ġ|| ĠMenu Op ener :: class . java Ġin Ġfield . type . interfaces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġfield . getAnnotation ( Menu Component :: class . java ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġannotation . name . if Blank Ġ{ Ġfield . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġop ener Ġ= Ġfield . get ( instance . get ()) Ġas ĠMenu Op ener ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen ers . compute ( clazz . name ) Ġ{ Ġ_, Ġmembers Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( members Ġ?: ĠHashMap ()). also Ġ{ Ġit [ name ] Ġ= Ġop ener Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Inject ( clazz : ĠClass <* >, Ġinstance : ĠSupplier <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġopen ers . remove ( clazz . name ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= Ġclazz . getAnnotation ( Menu Component :: class . java )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . name . if Blank Ġ{ Ġclazz . simple Name Ġ}} $" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġmembers . forEach Ġ{ Ġ( name , Ġop ener ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( op ener . name Ġ== Ġ" Anonymous ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġop ener . name Ġ= Ġ"$ group $ name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMenu Op ener . Registry . register ( op ener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ