package Ġcom . github . ro ug sig . f ak ito . processor Ċ Ċ import Ġcom . github . ro ug sig . f ak ito . processor . generator . F ak ito Generator Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġorg . testng . annotations . Test Ċ Ċ internal Ġclass ĠF ak ito Processor Test Ġ: ĠAP Test (" com . github . ro ug sig . f ak ito . processor . testdata ") Ġ{ ĊĠ Ġ@ Test ĊĠ Ġfun Ġ` source Ġwithout Ġmethods Ġshould Ġgenerate Ġimplementation Ġwithout Ġmethods `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" empty . Cat Repository ", Ġ" empty . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ ĠassertThat ( generated File . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġcom . github . ro ug sig . f ak ito . processor . testdata . empty ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġabstract Ġclass ĠCat Repository Fake Generated Ġ: ĠCat Repository ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` internal Ġsource Ġshould Ġgenerate Ġinternal Ġimplementation `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" internal . Cat Repository ", Ġ" internal . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ ĠassertThat ( generated File . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| package Ġcom . github . ro ug sig . f ak ito . processor . testdata .` internal ` ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| internal Ġabstract Ġclass ĠCat Repository Fake Generated Ġ: ĠCat Repository ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` methods Ġwith Ġdefault Ġargs Ġshould Ġgenerate Ġsuccessfully `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" default arg . Cat Repository ", Ġ" default arg . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġimpl Functions Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). fun Specs . filter Not Ġ{ Ġit . name Ġ== Ġ" returns " Ġ} ĊĠĠĠ ĠassertThat ( impl Functions . join ToString ("\ n \ r ")) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġfetch Content ( skip Cache : Ġkotlin . Boolean ): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġthis . method Calls . add ( Method . Fetch Content ( skip Cache )) ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġreturns Impl ?. fetch Content Impl ?. invoke ( skip Cache ) ĊĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` all Ġmethods Ġshould Ġbe Ġdecl ar ated Ġin ĠMethod Ġsealed Ġclass `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" methods . Cat Repository ", Ġ" methods . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġmethod Class Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). type Specs . find Ġ{ Ġit . name Ġ== Ġ" Method " Ġ} ĊĠĠĠ ĠassertThat ( method Class . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġsealed Ġclass ĠMethod Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġdata Ġclass ĠCat ById ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġval Ġcat Id : Ġkotlin . String ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġobject ĠC ats Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġdata Ġclass ĠDelete C ats ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġval Ġcat Ids : Ġkotlin . collections . Set < kotlin . String > ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġdata Ġclass ĠFetch Cat ById ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġpublic Ġval Ġcat Id : Ġkotlin . String ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġobject ĠFetch C ats Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġdata Ġclass ĠUpdate Cat ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpublic Ġval Ġcat Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpublic Ġval ĠnewName : Ġkotlin . Any ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġpublic Ġval Ġnew Home s : Ġkotlin . collections . List < kotlin . String ?> ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ: ĠMethod () ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` all Ġmethods Ġwith Ġparameter Ġshould Ġbe Ġdecl ar ated Ġin ĠReturns Builder Ġclass `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" methods . Cat Repository ", Ġ" methods . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġreturns Builder Class Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). type Specs . find Ġ{ Ġit . name Ġ== Ġ" Returns Builder " Ġ} ĊĠĠĠ ĠassertThat ( returns Builder Class . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġinner Ġclass ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġcat ById Impl : Ġ(( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Any ? )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġcats Impl : Ġ(() Ġ-> Ġkotlin . collections . List < kotlin . Any >) ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġdelete C ats Impl : Ġ(( cat Ids : Ġkotlin . collections . Set < kotlin . String >) Ġ-> Ġkotlin . Unit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġfetch Cat ById Impl : Ġ(( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Unit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġfetch C ats Impl : Ġ(() Ġ-> Ġkotlin . Unit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġprivate Ġvar Ġupdate Cat Impl : Ġ(( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcat Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠnewName : Ġkotlin . Any ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġnew Home s : Ġkotlin . collections . List < kotlin . String ?> ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ-> Ġkotlin . Unit )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġcat ById ( impl : Ġ( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Any ?): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . cat ById Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġcats ( impl : Ġ() Ġ-> Ġkotlin . collections . List < kotlin . Any >): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . cats Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġdelete C ats ( impl : Ġ( cat Ids : Ġkotlin . collections . Set < kotlin . String >) Ġ-> Ġkotlin . Unit ): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . delete C ats Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfetch Cat ById ( impl : Ġ( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Unit ): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . fetch Cat ById Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġfetch C ats ( impl : Ġ() Ġ-> Ġkotlin . Unit ): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . fetch C ats Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġupdate Cat ( impl : Ġ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġcat Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ ĠnewName : Ġkotlin . Any ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġnew Home s : Ġkotlin . collections . List < kotlin . String ?> ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) Ġ-> Ġkotlin . Unit ): ĠReturns Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġthis . update Cat Impl Ġ= Ġimpl ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġpublic Ġfun Ġbuild (): ĠReturns Impl Ġ= ĠReturns Impl ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcat ById Impl , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcats Impl , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġdelete C ats Impl , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfetch Cat ById Impl , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfetch C ats Impl , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġupdate Cat Impl ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` all Ġmethods Ġwith Ġparameter Ġshould Ġbe Ġdecl ar ated Ġin ĠReturns Impl Ġclass `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" methods . Cat Repository ", Ġ" methods . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġreturns Builder Class Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). type Specs . find Ġ{ Ġit . name Ġ== Ġ" Returns Impl " Ġ} ĊĠĠĠ ĠassertThat ( returns Builder Class . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġdata Ġclass ĠReturns Impl ( ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġcat ById Impl : Ġ(( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Any ? )? , ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġcats Impl : Ġ(() Ġ-> Ġkotlin . collections . List < kotlin . Any >) ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġdelete C ats Impl : Ġ(( cat Ids : Ġkotlin . collections . Set < kotlin . String >) Ġ-> Ġkotlin . Unit )? , ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġfetch Cat ById Impl : Ġ(( cat Id : Ġkotlin . String ) Ġ-> Ġkotlin . Unit )? , ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġfetch C ats Impl : Ġ(() Ġ-> Ġkotlin . Unit )? , ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġval Ġupdate Cat Impl : Ġ(( ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġcat Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ ĠnewName : Ġkotlin . Any ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġnew Home s : Ġkotlin . collections . List < kotlin . String ?> ĊĠĠĠĠĠĠĠĠĠ Ġ| ) Ġ-> Ġkotlin . Unit )? ĊĠĠĠĠĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` generated Ġfile Ġshould Ġcontains Ġreturns Ġfunction Ġwith ĠReturns Builder Ġinit Ġparameter `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" methods . Cat Repository ", Ġ" methods . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġreturns Fun Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). fun Specs . find Ġ{ Ġit . name Ġ== Ġ" returns " Ġ} ĊĠĠĠ ĠassertThat ( returns Fun . toString ()) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġfun Ġreturns (` init `: ĠReturns Builder . () Ġ-> Ġkotlin . Unit ): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġval Ġbuilder Ġ= ĠReturns Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġbuilder . init () ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġthis . returns Impl Ġ= Ġbuilder . build () ĠĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` generated Ġfile Ġshould Ġimplement Ġtarget Ġelement Ġfunctions `() Ġ{ ĊĠĠĠ Ġval Ġgenerated Files Ġ= Ġrun Processor (" methods . Cat Repository ", Ġ" methods . Cat Repository Fake ") ĊĊĠĠĠ ĠassertThat ( generated Files . size ). isEqualTo ( 1 ) ĊĠĠĠ Ġval Ġgenerated File Ġ= Ġgenerated Files . first () ĊĠĠĠ Ġval Ġimpl Functions Ġ= Ġ( generated File . members . first () Ġas ĠType Spec ). fun Specs . filter Not Ġ{ Ġit . name Ġ== Ġ" returns " Ġ} ĊĠĠĠ ĠassertThat ( impl Functions . join ToString ("\ n \ r ")) ĊĠĠĠĠĠ Ġ. isEqualTo Ign oring Whitespace ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġcat ById ( cat Id : Ġkotlin . String ): Ġkotlin . Any ? Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . Cat ById ( cat Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġclass Impl Ġ= Ġthis . returns Impl Ġ?: Ġerror (" returns Ġnot Ġfound Ġfor Ġmethod Ġcat ById ( cat Id )") ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġmethod Impl Ġ= Ġclass Impl . cat ById Impl Ġ?: Ġerror (" returns Ġnot Ġfound Ġfor Ġmethod Ġcat ById ( cat Id )") ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġmethod Impl . invoke ( cat Id ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġcats (): Ġkotlin . collections . List < kotlin . Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . C ats ) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġclass Impl Ġ= Ġthis . returns Impl Ġ?: Ġerror (" returns Ġnot Ġfound Ġfor Ġmethod Ġcats () ") ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġmethod Impl Ġ= Ġclass Impl . cats Impl Ġ?: Ġerror (" returns Ġnot Ġfound Ġfor Ġmethod Ġcats () ") ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturn Ġmethod Impl . invoke () ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġdelete C ats ( cat Ids : Ġkotlin . collections . Set < kotlin . String >): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . Delete C ats ( cat Ids )) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturns Impl ?. delete C ats Impl ?. invoke ( cat Ids ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġfetch Cat ById ( cat Id : Ġkotlin . String ): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . Fetch Cat ById ( cat Id )) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturns Impl ?. fetch Cat ById Impl ?. invoke ( cat Id ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġfetch C ats (): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . Fetch C ats ) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturns Impl ?. fetch C ats Impl ?. invoke () ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| public Ġoverride Ġfun Ġupdate Cat ( ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġcat Id : Ġkotlin . String , ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ ĠnewName : Ġkotlin . Any ?, ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġnew Home s : Ġkotlin . collections . List < kotlin . String ?> ĊĠĠĠĠĠĠĠĠĠ Ġ| ): Ġkotlin . Unit Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġthis . method Calls . add ( Method . Update Cat ( cat Id , ĠnewName , Ġnew Home s )) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġreturns Impl ?. update Cat Impl ?. invoke ( cat Id , ĠnewName , Ġnew Home s ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrun Processor ( var arg Ġsources : ĠString ): ĠList < File Spec > Ġ{ ĊĠĠĠ Ġval Ġprocessor Ġ= ĠF ak ito Processor () ĊĠĠĠ Ġval Ġgenerator Wrapper Ġ= ĠGenerator Wrapper ( F ak ito Generator ) ĊĊĠĠĠ Ġprocessor . f ak ito Generator Ġ= Ġgenerator Wrapper ĊĠĠĠ Ġrun Processor ( processor , Ġsources . toList ()) ĊĊĠĠĠ Ġreturn Ġgenerator Wrapper . generated Files ĊĠ Ġ} Ċ } Ċ