/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . squareup . kotlin po et . jvm Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . Parameter Spec Ċ import Ġcom . squareup . kotlin po et . Parameterized TypeName . Companion . parameter ized By Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġcom . squareup . kotlin po et . as ClassName Ċ import Ġcom . squareup . kotlin po et . as TypeName Ċ import Ġcom . squareup . kotlin po et . assert Throws Ċ import Ġjava . io . IOException Ċ import Ġkotlin . test . Test Ċ Ċ class ĠJ vm Annotations Test Ġ{ ĊĊĠ Ġ@ Test Ġfun Ġj vm Field () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Field () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Field ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Field ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Field Constructor Parameter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Field () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Field ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco ( ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Field ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Static Property () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . comp anion Object Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Static () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Static ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Static Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . comp anion Object Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Static () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( String :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Static ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġfun Ġfoo (): ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Static Getter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . comp anion Object Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getter ( Fun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Static () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Static ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġval Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġget () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Static Setter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . comp anion Object Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class . as TypeName ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. mutable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setter ( Fun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Static () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" value ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Static ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġvar Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Static Forbidden On Constructor () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Static () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Static Ġto Ġa Ġconstructor !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġthrows Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throws ( IOException :: class , ĠIllegalArgumentException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġjava . io . IOException ĊĠĠĠĠĠ Ġ| import Ġjava . lang . IllegalArgumentException ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Throws ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Throws ( ĊĠĠĠĠĠ Ġ| Ġ ĠIOException :: class , ĊĠĠĠĠĠ Ġ| Ġ ĠIllegalArgumentException :: class ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġthrows Function Custom Exception () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throws ( ClassName (" com . squareup . tac os ", Ġ" Illegal T aco Exception ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Throws ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Throws ( Illegal T aco Exception :: class ) ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġthrows Primary Constructor () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġjava . io . IOException ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Throws ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ@ Throws ( IOException :: class ) Ġconstructor ( ĊĠĠĠĠĠ Ġ| Ġ Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġthrows Getter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getter ( Fun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġjava . io . IOException ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Throws ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠ Ġ| Ġ Ġget () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġthrows Setter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setter ( Fun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" value ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" print (% S )", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġjava . io . IOException ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Throws ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠ Ġ| Ġ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġprint (" foo ") ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Over loads Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Over loads () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" bar ", ĠInt :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" baz ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. defaultValue ("% S ", Ġ" baz ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . Int ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Over loads ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Jvm Over loads ĊĠĠĠĠĠ Ġ| fun Ġfoo ( bar : ĠInt , Ġbaz : ĠString Ġ= Ġ" baz ") Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Over loads Primary Constructor () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Over loads () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" bar ", ĠInt :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" baz ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. defaultValue ("% S ", Ġ" baz ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . Int ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Over loads ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠ Ġ| Ġ Ġbar : ĠInt , ĊĠĠĠĠĠ Ġ| Ġ Ġbaz : ĠString Ġ= Ġ" baz " ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Over loads On Getter Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Over loads () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Over loads Ġto Ġa Ġgetter !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Over loads On Setter Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Over loads () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Over loads Ġto Ġa Ġsetter !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Name File () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. jvm Name (" T aco Utils ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| @ file : Jvm Name (" T aco Utils ") ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Name ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Name Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Name (" get Foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Name ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Jvm Name (" get Foo ") ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Name Getter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getter ( Fun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Name (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Name ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Name (" foo ") ĊĠĠĠĠĠ Ġ| Ġ Ġget () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Name Setter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class . as TypeName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setter ( Fun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Name (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" value ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Name ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| var Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Name (" foo ") ĊĠĠĠĠĠ Ġ| Ġ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Name Forbidden On Constructor () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Name (" not A Constructor ") ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Name Ġto Ġa Ġconstructor !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Mult if ile Class () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. jvm Mult if ile Class () ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| @ file : Jvm Mult if ile Class ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Mult if ile Class ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards Class () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Suppress W ild cards ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Jvm Suppress W ild cards ĊĠĠĠĠĠ Ġ| class ĠT aco ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards ( suppress Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Suppress W ild cards ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Jvm Suppress W ild cards ( suppress Ġ= Ġfalse ) ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards On Constructor Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Suppress W ild cards Ġto Ġa Ġconstructor !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards On Getter Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Suppress W ild cards Ġto Ġa Ġgetter !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards On Setter Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Jvm Suppress W ild cards Ġto Ġa Ġsetter !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards Property () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Suppress W ild cards ( suppress Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Suppress W ild cards ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Jvm Suppress W ild cards ( suppress Ġ= Ġfalse ) ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Suppress W ild cards Type () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" a ", ĠList :: class . as ClassName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parameter ized By ( Int :: class . as TypeName (). jvm Suppress W ild cards ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . Int ĊĠĠĠĠĠ Ġ| import Ġkotlin . collections . List ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Suppress W ild cards ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| fun Ġfoo ( a : ĠList < @ Jvm Suppress W ild cards ĠInt >) Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Wildcard Type () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" a ", ĠList :: class . as ClassName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parameter ized By ( Int :: class . as TypeName (). jvm Wildcard ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . Int ĊĠĠĠĠĠ Ġ| import Ġkotlin . collections . List ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Wildcard ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| fun Ġfoo ( a : ĠList < @ Jvm Wildcard ĠInt >) Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsynchronized Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. synchronized () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Synchron ized ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Synchron ized ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsynchronized Getter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getter ( Fun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. synchronized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Synchron ized ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Synchron ized ĊĠĠĠĠĠ Ġ| Ġ Ġget () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsynchronized Setter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class . as TypeName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. mutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setter ( Fun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. synchronized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" value ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Synchron ized ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| var Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Synchron ized ĊĠĠĠĠĠ Ġ| Ġ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsynchronized On Constructor Forbidden () Ġ{ ĊĠĠĠ ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠ ĠFun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. synchronized () ĊĠĠĠ Ġ}. has Message That (). isEqualTo (" Can 't Ġapply Ġ@ Synchron ized Ġto Ġa Ġconstructor !") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtransient () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transient () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Transient ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Transient ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġtransient Constructor Parameter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transient () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Transient ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco ( ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Transient ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġvolatile () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. volatile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Volatile ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Volatile ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġvolatile Constructor Parameter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. volatile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Volatile ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco ( ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Volatile ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstrict fp Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. strict fp () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Strict fp ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| @ Strict fp ĊĠĠĠĠĠ Ġ| fun Ġfoo () Ġ{ ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstrict fp Primary Constructor () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . class Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. strict fp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Strict fp ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| class ĠT aco Ġ@ Strict fp Ġconstructor ( ĊĠĠĠĠĠ Ġ| Ġ Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| ) ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstrict fp Getter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getter ( Fun Spec . getter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. strict fp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Strict fp ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Strict fp ĊĠĠĠĠĠ Ġ| Ġ Ġget () Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġstrict fp Setter () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setter ( Fun Spec . setter Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. strict fp () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter (" value ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" print (% S )", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Strict fp ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| val Ġfoo : ĠString ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Strict fp ĊĠĠĠĠĠ Ġ| Ġ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ| ĠĠĠ Ġprint (" foo ") ĊĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Default Property () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . interface Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec . builder (" foo ", ĠString :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Default () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Default ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| interface ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Default ĊĠĠĠĠĠ Ġ| Ġ Ġval Ġfoo : ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġj vm Default Function () Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile Spec . builder (" com . squareup . tac os ", Ġ" T aco ") ĊĠĠĠĠĠĠĠ Ġ. add Type ( Type Spec . interface Builder (" T aco ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addFunction ( Fun Spec . builder (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. jvm Default () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( String :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ% S ", Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ ĠassertThat ( file . toString ()). isEqualTo (""" ĊĠĠĠĠĠ Ġ| package Ġcom . squareup . tac os ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| import Ġkotlin . String ĊĠĠĠĠĠ Ġ| import Ġkotlin . jvm . Jvm Default ĊĠĠĠĠĠ Ġ| ĊĠĠĠĠĠ Ġ| interface ĠT aco Ġ{ ĊĠĠĠĠĠ Ġ| Ġ Ġ@ Jvm Default ĊĠĠĠĠĠ Ġ| Ġ Ġfun Ġfoo (): ĠString Ġ= Ġ" foo " ĊĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠ Ġ} Ċ } Ċ