package Ġcom . to mp ee . ar ct ict ern . compiler Ċ Ċ import Ġcom . google . devtools . k sp . get Annotations ByType Ċ import Ġcom . google . devtools . k sp . get Visibility Ċ import Ġcom . google . devtools . k sp . symbol . KS Class Declaration Ċ import Ġcom . google . devtools . k sp . symbol . Modifier Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . Code Block Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier Ċ import Ġcom . squareup . kotlin po et . Parameter Spec Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġcom . squareup . kotlin po et . k sp . add Origin ating KS File Ċ import Ġcom . squareup . kotlin po et . k sp . to K Modifier Ċ import Ġcom . squareup . kotlin po et . k sp . to TypeName Ċ import Ġcom . to mp ee . ar ct ict ern . compiler . generators . Nullable Object Member Generator Ċ import Ġcom . to mp ee . ar ct ict ern . compiler . generators . Object Member Generator Ċ import Ġcom . to mp ee . ar ct ict ern . compiler . generators . Standard Member Generator Ċ import Ġcom . to mp ee . ar ct ict ern . nest . Ar ct ic T ern Ċ import Ġcom . to mp ee . ar ct ict ern . nest . DEFAULT _ NAME Ċ Ċ internal Ġclass ĠPreference Writer ( private Ġval Ġclass Declaration : ĠK S Class Declaration ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Ar ct ic T ern ] Ġannotation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġar ct ic T ern Ġ= Ġclass Declaration . get Annotations ByType ( Ar ct ic T ern :: class ). first () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClass Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠclassName Ġ= Ġar ct ic T ern . name . let Ġ{ ĊĠĠĠĠĠĠĠ ĠClass Name ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Declaration . packageName . asString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠDEFAULT _ NAME ) Ġ" Ar ct ic T ern ${ class Declaration . simple Name . asString () }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbase Class Parameters Ġ= Ġclass Declaration ĊĠĠĠĠĠĠĠ Ġ. primary Constructor ?. parameters ĊĠĠĠĠĠĠĠ Ġ? . map Indexed Ġ{ Ġindex , Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( param . name ?. asString () Ġ?: Ġ" param $ index ") Ġto Ġparam . type . to TypeName () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĊĠĠĠ Ġprivate Ġval Ġmigr atable Writer Ġ= ĠM igr atable Writer ( ar ct ic T ern , Ġclass Declaration ) ĊĠĠĠ Ġprivate Ġval Ġstandard Member Generator Ġ= ĠStandard Member Generator ( class Declaration ) ĊĠĠĠ Ġprivate Ġval Ġobject Member Generator Ġ= ĠObject Member Generator ( class Declaration ) ĊĠĠĠ Ġprivate Ġval Ġnullable Object Member Generator Ġ= ĠNullable Object Member Generator ( class Declaration ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠValidate Ġthat Ġonly Ġinterface Ġcan Ġbe Ġannotated ĊĠĠĠĠĠĠĠ Ġif Ġ( Modifier . AB STR ACT Ġ! in Ġclass Declaration . modifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProcessing Exception (" Annotated Ġclass Ġis Ġnot Ġan Ġabstract Ġclass ", Ġclass Declaration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate File (): ĠFile Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Spec . builder ( className . packageName , ĠclassName . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( build Class ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe Ġclass . ĠThe Ġhierarchy Ġwill Ġbe ĊĠĠĠĠ Ġ* ĠClass Ġimplements Ġthe Ġpreference Ġfile ĊĠĠĠĠ Ġ* ĠĠ ĠConstructor ĊĠĠĠĠ Ġ* ĠĠ ĠShared Preference ĠProperty ĊĠĠĠĠ Ġ* ĠĠ ĠAll Ġproperties Ġdeclared ĊĠĠĠĠ Ġ* ĠĠ ĠOptional Ġdelete Ġfunctions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Class (): ĠType Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompanion Builder Ġ= ĠType Spec . comp anion Object Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġmigr atable Writer . apply ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠType Spec . class Builder ( className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( listOf NotNull ( class Declaration . get Visibility (). to K Modifier ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. super class ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Declaration . packageName . asString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Declaration . simple Name . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Class Parameters . forEach Ġ{ Ġ( name , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Super class Constructor Parameter ("% L ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Constructor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply SharedPreferences Lazy Property () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply All Properties And Functions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Type ( comp anion Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Origin ating KS File ( class Declaration . containing File !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġthe Ġconstructor Ġand Ġproperties . ĠContains Ġthe Ġcontext Ġas Ġa Ġparameter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠType Spec . Builder . apply Constructor (): ĠType Spec . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimary Constructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( context Field . to Parameter Spec ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Class Parameters . map Ġ{ Ġ( name , Ġtype ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter ( Parameter Spec . builder ( name , Ġtype ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ). addProperty ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Field ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Property Spec Builder ( true , ĠK Modifier . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġthe ĠSharedPreferences Ġproperty Ġas Ġa Ġlazy Ġdelegate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠType Spec . Builder . apply SharedPreferences Lazy Property (): ĠType Spec . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Property ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Spec . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Field . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Field . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Modifier . PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delegate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode Block . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. begin Control Flow (" lazy ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" context . get SharedPreferences (% S , ĠContext . MODE _ PRIVATE )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar ct ic T ern . preference File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. end Control Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġthe Ġproperties Ġand Ġfunctions . ĠIncludes : ĊĠĠĠĠ Ġ* Ġ- ĠPrivate ĠAr ct ic T ern Preference Ġproperty ĊĠĠĠĠ Ġ* Ġ- ĠPublic Ġproperty Ġthat Ġdeleg ates Ġto Ġthe Ġpreference ĊĠĠĠĠ Ġ* Ġ- ĠOptional : ĠFlow Ġproperty ĊĠĠĠĠ Ġ* Ġ- ĠOptional : ĠDelete Ġfunction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠType Spec . Builder . apply All Properties And Functions (): ĠType Spec . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstandard Member Generator . apply All ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( object Member Generator :: apply All ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( nullable Object Member Generator :: apply All ) ĊĠĠĠ Ġ} Ċ } Ċ