package Ġcom . vic pin . extras injector . processor . writ ter . implementation Ċ Ċ import Ġcom . vic pin . but cher knife . annotation . processor . entity . Extra Property Ċ import Ġcom . vic pin . extras injector . processor . model . Model Ċ import Ġcom . vic pin . extras injector . processor . writ ter . File Writ ter Ċ import Ġcom . vic pin . extras injector . processor . writ ter . ab straction . Writ ter Ċ import Ġjavax . annotation . processing . Processing Environment Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠV ictor Ġon Ġ 2 6 / 0 1 / 2 0 1 8 . Ċ Ġ*/ Ċ class ĠEx tras Injector Writ ter Ġ: ĠWrit ter () Ġ{ ĊĊĠĠĠ Ġoverride Ġvar ĠCLASS _ NAME Ġ= Ġ" Extras Injector Factory " ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Package ( pack page : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . set Package ( pack page ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Imports () Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . write Import (" import Ġandroid . content . Context ") ĊĠĠĠĠĠĠĠ Ġwrit ter . write Import (" import Ġandroid . app . Activity ") ĊĠĠĠĠĠĠĠ Ġwrit ter . write Import (" import Ġandroidx . fragment . app . Fragment ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . open Class (" object Ġ$ CLASS _ NAME ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite Model ( model : ĠModel , Ġprocessing Env : ĠProcessing Environment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextras By Activity Present ers Ġ= Ġmodel . get Extras For Activity Present ers () ĊĠĠĠĠĠĠĠ Ġval Ġextras By Fragment Present ers Ġ= Ġmodel . get Extras For Fragment Present ers () ĊĊĠĠĠĠĠĠĠ Ġif ( extras By Activity Present ers . isNotEmpty () Ġ|| Ġextras By Fragment Present ers . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Package ( File Writ ter . PACKAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Imports () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Class () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( extras By Activity Present ers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Activity Bind Generic Method ( activity Present ers Ġ= Ġextras By Activity Present ers . keys . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( extras For Activities Ġin Ġmodel . get Extras For Activity Present ers ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Activity Bind Method ( target Class Ġ= Ġextras For Activities . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Extras Ġ= Ġextras For Activities . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( extras By Fragment Present ers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Fragment Bind Generic Method ( fragment Present ers Ġ= Ġextras By Fragment Present ers . keys . toList ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( extras For Fragments Ġin Ġmodel . get Extras For Fragment Present ers ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Fragment Bind Method ( target Class Ġ= Ġextras For Fragments . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Extras Ġ= Ġextras For Fragments . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrit ter . generate File ( processing Env , ĠCLASS _ NAME ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Activity Bind Generic Method ( activity Present ers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Method ("@ Jvm Static Ġfun Ġbind ( act : ĠActivity , Ġtarget : ĠAny )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" when ( target ) Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( presenter Ġin Ġactivity Present ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" is Ġ$ presenter Ġ-> Ġbind ( act , Ġtarget )", Ġindentation Level Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" else Ġ-> Ġandroid . util . Log . w (\" Extras Injector \",\" Target Ġ\ ${ target :: class . java . name } Ġsupplied Ġto Ġbind Ġfunction Ġis Ġnot Ġvalid . ĠHave Ġyou Ġannotated Ġthis Ġclass Ġwith Ġ@ For Activity ?\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Fragment Bind Generic Method ( fragment Present ers : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Method ("@ Jvm Static Ġfun Ġbind ( act : ĠFragment , Ġtarget : ĠAny )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" when ( target ) Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( presenter Ġin Ġfragment Present ers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" is Ġ$ presenter Ġ-> Ġbind ( act , Ġtarget )", Ġindentation Level Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" else Ġ-> Ġandroid . util . Log . w (\" Extras Injector \",\" Target Ġ\ ${ target :: class . java . name } Ġsupplied Ġto Ġbind Ġfunction Ġis Ġnot Ġvalid . ĠHave Ġyou Ġannotated Ġthis Ġclass Ġwith Ġ@ For Fragment ?\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Activity Bind Method ( target Class : ĠString , Ġwith Extras : ĠList < Extra Property >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Method (" fun Ġbind ( act : ĠActivity , Ġtarget : Ġ$ target Class )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" act . intent . extras ?. apply Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( extra Ġin Ġwith Extras ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body ( extra . get Bind Method (" target "), Ġindentation Level Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Fragment Bind Method ( target Class : ĠString , Ġwith Extras : ĠList < Extra Property >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrit ter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Method (" fun Ġbind ( fragment : ĠFragment , Ġtarget : Ġ$ target Class )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" fragment . arguments ?. apply Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( extra Ġin Ġwith Extras ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body ( extra . get Bind Method (" target "), Ġindentation Level Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Body (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Method () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }