@ file : Suppress (" as fd ") Ċ Ċ package Ġcom . air bnb . e po xy Ċ Ċ import Ġcom . squareup . kotlin po et . Annotation Spec Ċ 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 . K Modifier Ċ import Ġcom . squareup . kotlin po et . Lambda TypeName Ċ import Ġcom . squareup . kotlin po et . Parameterized TypeName Ċ import Ġcom . squareup . kotlin po et . Type Variable Name Ċ import Ġjava . io . File Ċ import Ġjavax . annotation . processing . Processing Environment Ċ import Ġjavax . lang . model . element . Modifier Ċ Ċ private Ġconst Ġval ĠK OT LIN _ EXTENSION _ FILE _ NAME Ġ= Ġ" E po xy Model Kotlin Extensions " Ċ Ċ internal Ġclass ĠKotlin Model Builder Extension Writer ( ĊĠĠĠ Ġprivate Ġval Ġprocessing Env : ĠProcessing Environment Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġgenerate Extensions For Models ( generated Models : ĠList < Generated Model Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk apt Generated DirPath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocessing Env . options [ E po xy Processor . K AP T _ K OT LIN _ GENERATED _ OPTION _ NAME ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (" k apt Kotlin ", Ġ" k apt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNeed Ġto Ġchange Ġthe Ġpath Ġbecause Ġof Ġhttps :// yout rack . jetbrains . com / issue / KT - 1 9 0 9 7 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġoption Ġdoes Ġnot Ġexist Ġthis Ġis Ġnot Ġbeing Ġprocessed Ġby Ġk apt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġdon 't Ġneed Ġto Ġgenerate Ġkotlin Ġextensions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgenerated Models ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . should Generate Model Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . generated ClassName . packageName () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( packageName , Ġmodels ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Extension File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . writeTo ( File ( k apt Generated DirPath )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Extension File ( ĊĠĠĠĠĠĠĠ ĠpackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġmodels : ĠList < Generated Model Info > ĊĠĠĠ Ġ): ĠFile Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Builder Ġ= ĠFile Spec . builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK OT LIN _ EXTENSION _ FILE _ NAME ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmodels ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . construct ors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( build Extensions For Model ( it , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . construct ors . map Ġ{ Ġconstructor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Extensions For Model ( it , Ġconstructor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġfile Builder . addFunction ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġsuppress ĠDeprec ation Ġwarnings Ġfor Ġthis Ġclass Ġin Ġcase Ġany Ġof Ġthe Ġmodels Ġused Ġare Ġdeprecated . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġprevents Ġthe Ġgenerated Ġfile Ġfrom Ġcausing Ġerrors Ġfor Ġusing Ġdeprecated Ġclasses . ĊĠĠĠĠĠĠĠ Ġfile Builder . add Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnnotation Spec . builder ( Suppress :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Member ("% S ", Ġ" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfile Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Extensions For Model ( ĊĠĠĠĠĠĠĠ Ġmodel : ĠGenerated Model Info , ĊĠĠĠĠĠĠĠ Ġconstructor : ĠGenerated Model Info . Constructor Info ? ĊĠĠĠ Ġ): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconstructor IsNot Public Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Ġ!= Ġnull Ġ&& ĠModifier . PUBLIC Ġ! in Ġconstructor . modifiers ĊĊĠĠĠĠĠĠĠ Ġ// ĠKotlin Ġcannot Ġdirectly Ġreference Ġa Ġclass Ġwith Ġa Ġ$ Ġin Ġthe Ġname . ĠIt Ġmust Ġbe Ġwrapped Ġin Ġticks Ġ( `` ) ĊĠĠĠĠĠĠĠ Ġval Ġuse Ticks Around ModelName Ġ= Ġmodel . generated Name . simple Name (). contains ("$ ") ĊĠĠĠĠĠĠĠ Ġval Ġtick Ġ= Ġif Ġ( use Ticks Around ModelName ) Ġ"` " Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġinitializer Lambda Ġ= ĠLambda TypeName . get ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġget Builder Interface TypeName ( model ). to K Po et (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnType Ġ= ĠClass Name . best Guess (" kotlin . Unit ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠFun Spec . builder ( get MethodName ( model )). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver ( ClassNames . E PO XY _ CONTROLLER . to K Po et ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġconstructor ?. params Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameters ( params . to K Params ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" model Initializer ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer Lambda ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Class Ġ= Ġmodel . parameter ized Generated Name . to K Po et () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( model Class Ġis ĠParameter ized TypeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġexpect Ġthe Ġtype Ġarguments Ġto Ġbe Ġof Ġtype ĠType Variable Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġwe Ġcan 't Ġget Ġbounds Ġinformation Ġoff Ġof Ġit Ġand Ġcan 't Ġdo Ġmuch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Type Variable Name >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( it . isNotEmpty ()) Ġadd Type Variables ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Modifiers ( K Modifier . INLINE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constructor IsNot Public ) Ġadd Modifiers ( K Modifier . INTERNAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Control Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ tick % T $ tick (${ params . join ToString (", Ġ") Ġ{ Ġit . name Ġ}} ). apply Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" model Initializer () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Control Flow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (". addTo ( this )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget MethodName ( model : ĠGenerated Model Info ) Ġ= Ġmodel . generated ClassName ĊĠĠĠĠĠĠĠ Ġ. simple Name () ĊĠĠĠĠĠĠĠ Ġ. lower Case First Letter () ĊĠĠĠĠĠĠĠ Ġ. remove Suffix ( Generated Model Info . GENERATED _ MODEL _ SUFFIX ) ĊĠĠĠĠĠĠĠ Ġ. remove Suffix ( Data Binding Model Info . BINDING _ SUFFIX ) ĊĠĠĠĠĠĠĠ Ġ. remove Suffix ( Generated Model Info . GENERATED _ CLASS _ NAME _ SUFFIX ) ĊĠĠĠĠĠĠĠ Ġ. replace ("$ ", Ġ"") ĊĠĠĠĠĠĠĠ Ġ. remove Suffix (" E po xy ") Ċ } Ċ