/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠKen ji ĠA be Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . star _ zero . compose _ nav _ gen . processor Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . squareup . kotlin po et . k sp . Kotlin Po et K sp Preview Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġcom . tsch uch ort . compile testing . k sp Sources Dir Ċ import Ġcom . tsch uch ort . compile testing . symbol Processor Providers Ċ import Ġorg . junit . Test Ċ Ċ @ Kotlin Po et K sp Preview Ċ class ĠNav Gen Processor Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdummy Source Navigation Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠ Ġ" Navigation . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġandroidx . navigation ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠNav Controller ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠNav Graph Builder ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġplain () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas String Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name /{ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . StringType Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getString ("$ arg Name ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠString ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name /${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name /{ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas String Nullable Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ?$ arg Name ={ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . StringType ; Ġnullable Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments ?. getString ("$ arg Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠString ? Ġ= Ġnull ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name ?$ arg Name =${ " $" }{$ arg Name Ġ?: Ġ"" }${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name ?$ arg Name ={ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas String Default Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default String ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName (@ Default String (" abc ") Ġ$ arg Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ?$ arg Name ={ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . StringType ; ĠdefaultValue Ġ= Ġ" abc " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getString ("$ arg Name ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠString Ġ= Ġ" abc "): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name ?$ arg Name =${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name ?$ arg Name ={ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Int Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name /{ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . Int Type Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getInt ("$ arg Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠInt ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name /${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name /{ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Int Default Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default Int ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName (@ Default Int ( 1 2 3 ) Ġ$ arg Name : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ?$ arg Name ={ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . Int Type ; ĠdefaultValue Ġ= Ġ 1 2 3 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getInt ("$ arg Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠInt Ġ= Ġ 1 2 3 ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name ?$ arg Name =${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name ?$ arg Name ={ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Bool Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name /{ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . Bool Type Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getBoolean ("$ arg Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠBoolean ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name /${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name /{ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Bool Default Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default Bool ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName (@ Default Bool ( true ) Ġ$ arg Name : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ?$ arg Name ={ $ arg Name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name ") Ġ{ Ġtype Ġ= ĠNav Type . Bool Type ; ĠdefaultValue Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getBoolean ("$ arg Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (` $ arg Name `: ĠBoolean Ġ= Ġtrue ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name ?$ arg Name =${ "$ "} $ arg Name ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name ?$ arg Name ={ $ arg Name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Nav Controller () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" nav Controller " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . navigation . Nav Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠNav Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name ( nav Controller : ĠNav Controller ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġhas Complex Argument () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 1 Ġ= Ġ" data 1 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 2 Ġ= Ġ" data 2 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 3 Ġ= Ġ" data 3 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 4 Ġ= Ġ" data 4 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 5 Ġ= Ġ" data 5 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 6 Ġ= Ġ" data 6 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name 7 Ġ= Ġ" data 7 " ĊĠĠĠĠĠĠĠ Ġval Ġarg Nav Controller Ġ= Ġ" nav Controller " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . navigation . Nav Controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default Int ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Default Bool ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 1 : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 2 : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 3 : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 4 : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Default String (" abc ") Ġ$ arg Name 5 : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Default Int ( 1 2 3 ) Ġ$ arg Name 6 : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Default Bool ( true ) Ġ$ arg Name 7 : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Nav Controller : ĠNav Controller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation . k sp Sources Dir . walk Top Down (). filter Ġ{ Ġit . extension Ġ== Ġ" kt " Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( generated Files ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Source Ġ= Ġgenerated Files . first (). read Text () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( generated Source ). contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Graph Builder .$ nav Gen Name ($ arg Nav Controller : ĠNav Controller ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ("$ nav Gen Name /{ $ arg Name 1 }/ {$ arg Name 2 }/ {$ arg Name 3 } ?$ arg Name 4 ={ $ arg Name 4 }& $ arg Name 5 ={ $ arg Name 5 }& $ arg Name 6 ={ $ arg Name 6 }& $ arg Name 7 ={ $ arg Name 7 }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 1 ") Ġ{ Ġtype Ġ= ĠNav Type . Int Type Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 2 ") Ġ{ Ġtype Ġ= ĠNav Type . Bool Type Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 3 ") Ġ{ Ġtype Ġ= ĠNav Type . StringType Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 4 ") Ġ{ Ġtype Ġ= ĠNav Type . StringType ; Ġnullable Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 5 ") Ġ{ Ġtype Ġ= ĠNav Type . StringType ; ĠdefaultValue Ġ= Ġ" abc " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 6 ") Ġ{ Ġtype Ġ= ĠNav Type . Int Type ; ĠdefaultValue Ġ= Ġ 1 2 3 Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Argument ("$ arg Name 7 ") Ġ{ Ġtype Ġ= ĠNav Type . Bool Type ; ĠdefaultValue Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġback Stack Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ methodName ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getInt ("$ arg Name 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getBoolean ("$ arg Name 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getString ("$ arg Name 3 ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments ?. getString ("$ arg Name 4 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getString ("$ arg Name 5 ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getInt ("$ arg Name 6 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Entry . arguments !!. getBoolean ("$ arg Name 7 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Nav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfun ĠNav Controller .$ nav Gen Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 1 : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 2 : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 3 : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 4 : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 5 : ĠString Ġ= Ġ" abc ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 6 : ĠInt Ġ= Ġ 1 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ arg Name 7 : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ($ {" \" \"\ "" }$ nav Gen Name /${ "$ "} $ arg Name 1 /${ "$ "} $ arg Name 2 /${ "$ "} $ arg Name 3 ?$ arg Name 4 =${ " $" }{$ arg Name 4 Ġ?: Ġ"" }& $ arg Name 5 =${ "$ "} $ arg Name 5 & $ arg Name 6 =${ "$ "} $ arg Name 6 & $ arg Name 7 =${ "$ "} $ arg Name 7 ${ " \" \"\ "" }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġval ĠNav Gen Routes .$ nav Gen Name : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ nav Gen Name /{ $ arg Name 1 }/ {$ arg Name 2 }/ {$ arg Name 3 } ?$ arg Name 4 ={ $ arg Name 4 }& $ arg Name 5 ={ $ arg Name 5 }& $ arg Name 6 ={ $ arg Name 6 }& $ arg Name 7 ={ $ arg Name 7 }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnot Supported Argument Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . messages ). contains (" Not Ġsupported Ġargument Ġtype ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnot Allow Int Nullable () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . messages ). contains (" Int Ġargument Ġdoes Ġnot Ġallow Ġnullable ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnot Allow Bool Nullable () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Gen Name Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġval ĠmethodName Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġarg Name Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . star _ zero . compose _ nav _ gen . Nav Gen ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nav Gen ("$ nav Gen Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ$ methodName ($ arg Name : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġprepare Compilation ( source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . messages ). contains (" Boolean Ġargument Ġdoes Ġnot Ġallow Ġnullable ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Compilation ( source : ĠSource File ): ĠKotlin Compilation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKotlin Compilation (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= ĠlistOf ( dummy Source Navigation , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsymbol Processor Providers Ġ= ĠlistOf ( Nav Gen Processor Provider ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ