package Ġcom . free let ics . mad . w het stone . codegen . renderer Ċ Ċ import Ġcom . free let ics . mad . w het stone . Renderer Fragment Data Ċ import Ġcom . free let ics . mad . w het stone . codegen . common . viewModel ClassName Ċ import Ġcom . free let ics . mad . w het stone . codegen . common . viewModel Component Name Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . Generator Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . propertyName Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . bundle Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . fragment Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . late init Property Spec Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . layout Inflater Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . navigation Handler Handle Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . opt In Annotation Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . renderer Connect Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . view Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . view Group Ċ import Ġcom . free let ics . mad . w het stone . codegen . util . viewModel Provider Ċ import Ġcom . squareup . kotlin po et . Code Block Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier . OVERRIDE Ċ import Ġcom . squareup . kotlin po et . K Modifier . PRIVATE Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ Ċ internal Ġclass ĠRenderer Fragment Generator ( ĊĠĠĠ Ġoverride Ġval Ġdata : ĠRenderer Fragment Data , Ċ ) Ġ: ĠGenerator < Renderer Fragment Data >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrenderer Fragment ClassName Ġ= ĠClass Name ("${ data . base Name } Fragment ") ĊĊĠĠĠ Ġinternal Ġfun Ġgenerate (): ĠType Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠType Spec . class Builder ( renderer Fragment ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( opt In Annotation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. super class ( data . fragment Base Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( late init Property Spec ( data . factory )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( late init Property Spec ( data . state Machine )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addFunction ( renderer On Create View Fun ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addFunction ( renderer Inject Fun ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrenderer On Create View Fun (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder (" onCreate View ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( OVERRIDE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" in flater ", Ġlayout Inflater ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" container ", Ġview Group . copy ( nullable Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" savedInstanceState ", Ġbundle . copy ( nullable Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin Control Flow (" if Ġ(! :: % L . isInitialized )", Ġdata . state Machine . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ("% L ()", Ġrenderer Fragment Inject Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. end Control Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Code ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinf late : Ġexternal Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val Ġrenderer Ġ= Ġ% L . inflate ( in flater , Ġcontainer )", Ġdata . factory . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconnect : Ġexternal Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ("% M ( renderer , Ġ% L )", Ġrenderer Connect , Ġdata . state Machine . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġrenderer . root View ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrenderer Fragment Inject Name Ġ= Ġ" inject " ĊĊĠĠĠ Ġprivate Ġfun Ġrenderer Inject Fun (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( renderer Fragment Inject Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin Control Flow (" val ĠviewModel Provider Ġ= Ġ% M <% T >( this , Ġ% T :: class ) Ġ{ Ġdependencies , Ġhandle Ġ-> Ġ", ĠviewModel Provider , Ġdata . dependencies , Ġdata . parent Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarguments : Ġexternal Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val Ġarguments Ġ= Ġarguments Ġ?: Ġ% T . EMPTY ", Ġbundle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ("% T ( dependencies , Ġhandle , Ġarguments )", ĠviewModel ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. end Control Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val ĠviewModel Ġ= ĠviewModel Provider [% T :: class . java ]", ĠviewModel ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val Ġcomponent Ġ= ĠviewModel .% L ", ĠviewModel Component Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Code ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ("% 1 L Ġ= Ġcomponent .% 1 L ", Ġdata . factory . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ("% 1 L Ġ= Ġcomponent .% 1 L ", Ġdata . state Machine . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Code ( renderer Navigation Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrenderer Navigation Code (): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . navigation Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCode Block . of ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCode Block . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val Ġhandler Ġ= Ġcomponent .% L ", Ġdata . navigation . navigation Handler . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" val Ġnavigator Ġ= Ġcomponent .% L ", Ġdata . navigation . navigator . propertyName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlifecycle : Ġexternal Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" handler .% N ( this , Ġnavigator )", Ġnavigation Handler Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ