package Ġcom . ram cost a . compose dest inations . codegen . writ ers Ċ Ċ import Ġcom . ram cost a . compose dest inations . codegen . code Gen Base PackageName Ċ import Ġcom . ram cost a . compose dest inations . codegen . commons .* Ċ import Ġcom . ram cost a . compose dest inations . codegen . fac ades . Code OutputStream Maker Ċ import Ġcom . ram cost a . compose dest inations . codegen . fac ades . Logger Ċ import Ġcom . ram cost a . compose dest inations . codegen . model .* Ċ import Ġcom . ram cost a . compose dest inations . codegen . templates .* Ċ import Ġcom . ram cost a . compose dest inations . codegen . writ ers . sub . Destination Content Function Writer Ċ import Ġcom . ram cost a . compose dest inations . codegen . writ ers . sub . Nav Arg Resolver Ċ Ċ class ĠSingle Destination Writer ( ĊĠĠĠ Ġprivate Ġval Ġcode Generator : ĠCode OutputStream Maker , ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger , ĊĠĠĠ Ġprivate Ġval Ġcore : ĠCore , ĊĠĠĠ Ġprivate Ġval Ġnav Arg Resolver : ĠNav Arg Resolver , ĊĠĠĠ Ġprivate Ġval Ġdestination : ĠDestination Generating Params With Nav Args , ĊĠĠĠ Ġprivate Ġval Ġcustom Nav Type ByType : ĠMap < ClassType , ĠCustom Nav Type > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadditional Imports Ġ= Ġmutable Set Of < String >() ĊĠĠĠ Ġprivate Ġval Ġnav Args Ġget () Ġ= Ġdestination . nav Args ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( destination . is Start Ġ&& Ġdestination . nav Args . any Ġ{ Ġit . is Mandatory Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Dest inations Setup ("\" ' ${ destination . comp osable Name }' Ġcomp osable : ĠStart Ġdest inations Ġcannot Ġhave Ġmandatory Ġnavigation Ġarguments !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite (): ĠGenerated Destination Ġ= Ġwith ( destination ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcode Generator . make File ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġ"$ code Gen Base PackageName . dest inations ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ids Ġ= Ġsource Ids . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠoutputStream Ġ+= Ġdestination Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( DEST INATION _ NAME , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace Super class Destination () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Nav Args Data Class () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( REQUIRE _ OPT _ IN _ AN NOT ATIONS _ PLACE HOLDER , Ġobject Wide Require Opt In Annotations ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( COMP O SED _ ROUTE , Ġconstruct Route ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( NAV _ ARGUMENT S , Ġnav Arguments Declaration Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( DE EP _ LIN KS , Ġdeep Links Declaration Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( DEST INATION _ STYLE , Ġdestination Style ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( CONTENT _ FUNCTION _ CODE , Ġcontent Function Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Invoke With Args Method () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( ARGS _ FROM _ METHO DS , Ġargs From Functions ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( AD DITION AL _ IMPORT S , Ġadditional Imports ()) ĊĊĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGenerated Destination ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ids Ġ= Ġsource Ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqualified Name Ġ= Ġqualified Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Name Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Start Destination Ġ= Ġis Start , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Graph Route Ġ= Ġnav Graph Route , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Opt In Annotation Types Ġ= Ġbase Opt In Annotations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . is Opt ed In Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . class Type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . replace Super class Destination (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreplace ( SUPER TYPE , ĠGENERATED _ NO _ ARGS _ DEST INATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsuper Type Ġ= Ġif Ġ( destination . nav Args Delegate Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ GENERATED _ DEST INATION } < ${ destination . nav Args Delegate Type . simple Name }> " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ GENERATED _ DEST INATION } < ${ destination . name }. Nav Args >" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreplace ( SUPER TYPE , Ġsuper Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . add Nav Args Data Class (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Args . isEmpty () Ġ|| Ġdestination . nav Args Delegate Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġremove Instances Of ( NAV _ ARGS _ DATA _ CLASS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ n \ n " ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ tdata Ġclass ĠNav Args (\ n " ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"${ inner Nav Args Parameters Code ( true )}\ n " ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ t )" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreplace ( NAV _ ARGS _ DATA _ CLASS , Ġcode . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbase Opt In Annotations (): ĠList < Opt In Annotation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġopt In By Annotation Ġ= Ġdestination . require Opt In Annotation Types . associate With To ( mutable Map Of ()) Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( destination . destination Style Type Ġis ĠDestination Style Type . Animated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopt In By Annotation . put All ( destination . destination Style Type . require Opt In Annotations . associate With To ( mutable Map Of ()) Ġ{ Ġfalse Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isRequired Receiver Experimental Opt ed In () Ġ|| Ġis Required Animation Experimental Opt ed In ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Ġhas Ġopt ed Ġin , Ġso Ġwe Ġwill Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( experimental Animation Api Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopt In By Annotation [ experimental Animation Api Type ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġopt In By Annotation . map Ġ{ ĠOpt In Annotation ( it . key , Ġit . value ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Required Animation Experimental Opt ed In (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdestination . destination Style Type Ġis ĠDestination Style Type . Animated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! destination . destination Style Type . require Opt In Annotations . contains ( experimental Animation Api Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Required Receiver Experimental Opt ed In (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdestination . comp osable Receiver Simple Name Ġ== ĠAN IM ATED _ VIS IBILITY _ SCOPE _ SIMPLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! destination . require Opt In Annotation Types . contains ( experimental Animation Api Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobject Wide Require Opt In Annotations (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġopt In By Annotation Ġ= Ġbase Opt In Annotations () ĊĊĠĠĠĠĠĠĠ Ġopt In By Annotation . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( it . class Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġif Ġ( it . is Opt ed In ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ Opt In (${ it . class Type . simple Name } :: class )\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ ${ it . class Type . simple Name }\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadditional Imports (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimports Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġadditional Imports . add ( destination . comp osable QualifiedName ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( destination . parameters . any Ġ{ Ġit . type . class Type . qualified Name Ġ== ĠDEST IN ATIONS _ NAV IG ATOR _ QUAL IFI ED _ NAME Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( CORE _ NAV _ DEST IN ATIONS _ NAV IG ATION _ QUAL IFI ED _ NAME ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadditional Imports . sorted (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports Ġ+= Ġ"\ n import Ġ$ it " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġimports . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . add Invoke With Args Method (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreplace ( ARGS _ TO _ ROUT ED _ METHOD , Ġinvoke With Args Method ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvoke With Args Method (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Args . isEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġoperator Ġfun Ġinvoke () Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġoperator Ġfun Ġinvoke ( ĊĠĠĠĠĠĠĠ Ġ| % s 1 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ): Ġ$ CORE _ DIRECTION Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: Ġ$ CORE _ DIRECTION Ġ{ ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġroute Ġ= Ġ% s 2 ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠĠĠĠĠ Ġvar Ġroute Ġ= Ġ"\" ${ construct Route () }\ "" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("/", Ġ"\" Ġ+ Ġ\ n \ t \ t \ t \ t \ t \" /") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" ?", Ġ"\" Ġ+ Ġ\ n \ t \ t \ t \ t \ t \" ?") ĊĊĠĠĠĠĠĠĠ Ġnav Args . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Ġ= Ġroute . replace ("{ ${ it . name }} ", Ġ"\ ${ ${ it . stringify For Navigation ()}} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtemplate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% s 1 ", Ġinner Nav Args Parameters Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% s 2 ", Ġroute ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinner Nav Args Parameters Code ( prefix With Val : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġarg Prefix Ġ= Ġif Ġ( prefix With Val ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" val Ġ" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠ Ġnav Args . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ+= Ġ"\ t \ t $ arg Prefix ${ it . name }: Ġ${ it . type . class Type . simple Name }${ if Ġ( it . is Nullable ) Ġ" ?" Ġelse Ġ"" }${ defaultValue For With Args Function ( it )}, " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġnav Args . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Ġ+= Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġargs . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠParameter . stringify For Navigation (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Complex Type Nav Arg ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav TypeName Ġ= Ġcustom Nav Type ByType [ type . class Type ] !!. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ("$ code Gen Base PackageName . nav type .$ nav TypeName ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( if Null Prefix , Ġif Null Suffix ) Ġ= Ġif Ġ( is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ name ?. let Ġ{ Ġ" Ġto Ġ" Ġ} Ġ?: Ġ\" { ${ name }} \"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" Ġto Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ if Null Prefix $ nav TypeName . serialize Value ($ name , Ġ$ is Mandatory )$ if Null Suffix " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġif Null Suffix Ġ= Ġif Ġ( is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ?: Ġ\" { ${ name }} \"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . class Type . simple Name Ġ== Ġ" String ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ CORE _ STRING _ NAV _ TYPE . serialize Value ($ name , Ġ$ is Mandatory )$ if Null Suffix " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġif Null Before ToString Ġ= Ġif Ġ( is Nullable ) Ġ" ?" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ name }$ if Null Before ToString ${ ". toString () "} $ if Null Suffix " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġargs From Functions (): ĠString Ġ= Ġwith ( destination ) Ġ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Type Ġ= Ġif Ġ( nav Args Delegate Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nav Args " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( nav Args Delegate Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Args Delegate Type . simple Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġargs From Nav Back Stack Entry ( args Type ) Ġ+ Ġ"\ n " Ġ+ Ġargs From Saved State Handle ( args Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġargs From Nav Back Stack Entry ( args Type : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠ Ġ| override Ġfun Ġargs From ( nav Back Stack Entry : Ġ$ NAV _ BACK _ STACK _ ENTRY _ SIMPLE _ NAME ): Ġ$ args Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġ${ args Type } (% s 2 ĊĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġnav Args . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġ"\ n \ t \ t ${ it . name } Ġ= Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġnav Arg Resolver . resolve ( destination , Ġadditional Imports , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġ"," ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% s 2 ", Ġarguments . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepend Indent ("\ t ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġargs From Saved State Handle ( args Type : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġadditional Imports . add ( SA VED _ STATE _ HANDLE _ QUAL IFI ED _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠ Ġ| override Ġfun Ġargs From ( saved State Handle : Ġ$ SA VED _ STATE _ HANDLE _ SIMPLE _ NAME ): Ġ$ args Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġ${ args Type } (% s 2 ĊĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġnav Args . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġ"\ n \ t \ t ${ it . name } Ġ= Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġnav Arg Resolver . resolve From Saved State Handle ( destination , Ġadditional Imports , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ+= Ġ"," ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% s 2 ", Ġarguments . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepend Indent ("\ t ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠdefaultValue For With Args Function ( it : ĠParameter ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . has Default Ġ-> Ġ" Ġ= Ġ${ it . defaultValue ?. code }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Nullable Ġ-> Ġ" Ġ= Ġnull " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstruct Route ( args : ĠList < Parameter > Ġ= Ġnav Args ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmandatory Args Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġoptional Args Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġargs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Mandatory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmandatory Args Ġ+= Ġ"/ { ${ it . name }}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptional Args Ġ+= Ġ"? ${ it . name } ={ ${ it . name }}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdestination . clean Route Ġ+ Ġmandatory Args . toString () Ġ+ Ġoptional Args . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontent Function Code (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDestination Content Function Writer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Args , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports ĊĠĠĠĠĠĠĠ Ġ). write () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnav Arguments Declaration Code (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġnav Args . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ n \ to verride Ġval Ġarguments Ġget () Ġ= ĠlistOf (\ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Nav TypeCode Ġ= Ġit . to Nav TypeCode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ" nav Argument (\" ${ it . name }\ ") Ġ{\ n \ t \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ" type Ġ= Ġ$ to Nav TypeCode \ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( to Nav TypeCode Ġ!= ĠCORE _ STRING _ NAV _ TYPE Ġ&& Ġ! it . is Complex Type Nav Arg ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Dest inations Setup (" Composable Ġ'${ destination . comp osable Name }', Ġargument Ġ'${ it . name } ': ĠOnly ĠString , ĠParcel able , ĠSerializable Ġand ĠEnum Ġnavigation Ġarguments Ġcan Ġbe Ġnullable ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ tn ull able Ġ= Ġtrue \ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġnav Arg Default Code ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ" }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġif Ġ( i Ġ!= Ġnav Args . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", \ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n \ t )\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdeep Links Declaration Code (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġdestination . deep Links . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add (" android x . navigation . nav Deep Link ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ n \ to verride Ġval Ġdeep Links Ġget () Ġ= ĠlistOf (\ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ" nav Deep Link Ġ{\ n \ t \ t " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . action . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ t action Ġ= Ġ\" ${ it . action } \"\ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . mime Type . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ tm ime Type Ġ= Ġ\" ${ it . mime Type } \"\ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . uri Pattern . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Pattern Ġ= Ġif Ġ( it . uri Pattern . contains ( DE EP _ LINK _ AN NOT ATION _ FULL _ ROUTE _ PLACE HOLDER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . uri Pattern . endsWith ( DE EP _ LINK _ AN NOT ATION _ FULL _ ROUTE _ PLACE HOLDER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . uri Pattern . replace ( DE EP _ LINK _ AN NOT ATION _ FULL _ ROUTE _ PLACE HOLDER , Ġconstruct Route For Deep Link Placeholder ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Dest inations Setup (" Composable Ġ'${ destination . comp osable Name } ': Ġdeep Ġlink Ġusage Ġof Ġ' FULL _ ROUTE _ PLACE HOLDER ' Ġmust Ġbe Ġas Ġa Ġsuffix ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . uri Pattern ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ"\ t uri Pattern Ġ= Ġ\"$ uri Pattern \"\ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġ" }" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ+= Ġif Ġ( i Ġ!= Ġdestination . deep Links . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", \ n \ t \ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n \ t )\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconstruct Route For Deep Link Placeholder (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġnav Args ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Complex Type Ġ= Ġit . is Complex Type Nav Arg () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Custom Serializer Ġ= Ġcustom Nav Type ByType [ it . type . class Type ]?. serializer Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Mandatory Ġ&& Ġis Complex Type Ġ&& Ġ! has Custom Serializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Dest inations Setup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Composable Ġ'${ destination . comp osable Name }', Ġarg Ġname = Ġ'${ it . name } ': Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" deep Ġlinks Ġcannot Ġcontain Ġmandatory Ġnavigation Ġtypes Ġof Ġcomplex Ġtype Ġunless Ġyou Ġdefine " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a Ġcustom Ġserializer Ġwith Ġ@ Nav Type Serializer ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġlets Ġyou Ġcontrol Ġhow Ġthe Ġcomplex Ġtype Ġclass Ġis Ġdefined Ġin Ġthe Ġstring Ġroute ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Complex Type Ġ&& Ġ! it . is Mandatory Ġ&& Ġ! has Custom Serializer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconstruct Route ( args ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestination Style (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( destination . destination Style Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDestination Style Type . Default Ġ-> Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDestination Style Type . Bottom Sheet Ġ-> Ġdestination Style Bottom Sheet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDestination Style Type . Animated Ġ-> Ġdestination Style Animated ( destination . destination Style Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDestination Style Type . Dialog Ġ-> Ġdestination Style Dialog ( destination . destination Style Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestination Style Dialog ( destination Style Type : ĠDestination Style Type . Dialog ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġadditional Imports . add ( destination Style Type . type . class Type . qualified Name ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"\ n \ to verride Ġval Ġstyle Ġ= Ġ${ destination Style Type . type . class Type . simple Name }\ n " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestination Style Animated ( destination Style Type : ĠDestination Style Type . Animated ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( core Ġ!= ĠCore . ANIM ATIONS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMissing Required Dependency (" You Ġneed Ġto Ġinclude Ġ'$ CORE _ ANIM ATIONS _ DEPEND ENCY ' Ġto Ġuse Ġ$ CORE _ DEST INATION _ ANIM ATION _ STYLE !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadditional Imports . add ( experimental Animation Api Type . qualified Name ) ĊĠĠĠĠĠĠĠ Ġadditional Imports . add ( destination Style Type . type . class Type . qualified Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( destination . comp osable Receiver Simple Name Ġ== ĠAN IM ATED _ VIS IBILITY _ SCOPE _ SIMPLE _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( ANIM ATED _ VIS IBILITY _ SCOPE _ QUAL IFI ED _ NAME ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"\ n \ to verride Ġval Ġstyle Ġ= Ġ${ destination Style Type . type . class Type . simple Name }\ n " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdestination Style Bottom Sheet (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( core Ġ!= ĠCore . ANIM ATIONS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMissing Required Dependency (" You Ġneed Ġto Ġinclude Ġ'$ CORE _ ANIM ATIONS _ DEPEND ENCY ' Ġto Ġuse Ġ$ CORE _ BOTTOM _ SHE ET _ DEST INATION _ STYLE !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadditional Imports . add ("$ CORE _ PACKAGE _ NAME . spec . Destination Style ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ"\ n \ to verride Ġval Ġstyle Ġ= Ġ$ CORE _ BOTTOM _ SHE ET _ DEST INATION _ STYLE \ n " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnav Arg Default Code ( param : ĠParameter ): ĠString Ġ= Ġparam . defaultValue . let Ġ{ ĠdefaultValue Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( defaultValue Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( defaultValue . code Ġ== Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"\ t defaultValue Ġ= Ġnull \ n \ t \ t " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( param . type . is Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"\ t defaultValue Ġ= Ġ${ defaultValue . code }. toString ()\ n \ t \ t " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"\ t defaultValue Ġ= Ġ${ defaultValue . code }\ n \ t \ t " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠParameter . to Nav TypeCode (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprimitive Nav TypeCode Ġ= Ġtype . to Primitive Nav TypeCode OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( primitive Nav TypeCode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprimitive Nav TypeCode ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Complex Type Nav Arg ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( type . class Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcustom Nav Type ByType [ type . class Type ] !!. name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( type . is Enum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Imports . add ( type . class Type . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCORE _ STRING _ NAV _ TYPE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegal Dest inations Setup (" Composable Ġ'${ destination . comp osable Name } ': ĠUnknown Ġtype Ġ${ type . class Type . qualified Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠOpt In Annotation ( ĊĠĠĠĠĠĠĠ Ġval Ġclass Type : ĠClass Type , ĊĠĠĠĠĠĠĠ Ġval Ġis Opt ed In : ĠBoolean , ĊĠĠĠ Ġ) Ċ }