package Ġcc . pop k orn . compiler . utils Ċ Ċ import Ġcc . pop k orn . PROVIDER _ SUFFIX Ċ import Ġcc . pop k orn . RESOL VER _ SUFFIX Ċ import Ġcc . pop k orn . core . Scope Ċ import Ġcc . pop k orn . normalize QualifiedName Ċ Ċ /** Ċ Ġ* ĠClass Ġto Ġcreate Ġa Ġjava Ġclass Ġby Ġcode Ċ Ġ* Ċ Ġ* Ġ@ author ĠP au ĠCor b ella Ċ Ġ* Ġ@ since Ġ 1 . 2 . 0 Ċ Ġ*/ Ċ class ĠJava Class ( private Ġval Ġtype : ĠString Ġ= Ġ" class ", Ġprivate Ġval Ġname : ĠString Ġ= Ġ" Test ${ System . nano Time () }") Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpack Ġ= Ġ" com . test " ĊĠĠĠ Ġprivate Ġval Ġimports Ġ= Ġarray ListOf (" cc . pop k orn . core .* ", Ġ" cc . pop k orn . annotations .* ") ĊĠĠĠ Ġprivate Ġval Ġannotations Ġ= Ġarray ListOf < String >() ĊĠĠĠ Ġprivate Ġval Ġmodifiers Ġ= Ġarray ListOf < String >() ĊĠĠĠ Ġprivate Ġvar Ġextends : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġimplements Ġ= Ġarray ListOf < String >() ĊĠĠĠ Ġprivate Ġval Ġmethods Ġ= Ġarray ListOf < Java Method >() ĊĊĠĠĠ Ġfun Ġqualified Name () Ġ= Ġ"$ pack .$ name " ĊĊĠĠĠ Ġfun Ġget Generated File (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type Ġ== Ġ" class " Ġ&& Ġannotations . any Ġ{ Ġit . startsWith ("@ Injectable (" ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ qualified Name ()} _$ PROVIDER _ SUFFIX " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" class " Ġ&& Ġannotations . any Ġ{ Ġit . startsWith ("@ Injectable Provider (" ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmethods . map NotNull Ġ{ Ġit . get ReturnType () Ġ}. first OrNull ()?. let Ġ{ Ġ"${ normalize QualifiedName ( it )} _$ PROVIDER _ SUFFIX " Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== Ġ" interface ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ qualified Name ()} _$ RESOL VER _ SUFFIX " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġimport ( import : ĠString ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . imports . add ( import ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject able ( scope : ĠScope ? Ġ= Ġnull , Ġalias : ĠString ? Ġ= Ġnull ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam 1 Ġ= Ġscope ?. let Ġ{ Ġ" scope Ġ= ĠScope .${ it . name }" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparam 2 Ġ= Ġalias ?. let Ġ{ Ġ" alias Ġ= Ġ\"$ it \"" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠarrayOf ( param 1 , Ġparam 2 ). filter NotNull () ĊĠĠĠĠĠĠĠ Ġthis . annotations . add ("@ Injectable (${ params . join ToString () }) ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject able Provider ( scope : ĠScope ? Ġ= Ġnull , Ġalias : ĠString ? Ġ= Ġnull ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparam 1 Ġ= Ġscope ?. let Ġ{ Ġ" scope Ġ= ĠScope .${ it . name }" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparam 2 Ġ= Ġalias ?. let Ġ{ Ġ" alias Ġ= Ġ\"$ it \"" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠarrayOf ( param 1 , Ġparam 2 ). filter NotNull () ĊĠĠĠĠĠĠĠ Ġthis . annotations . add ("@ Injectable Provider (${ params . join ToString () }) ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfor Environments ( var arg Ġenv : ĠString ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġenv . join ToString Ġ{ Ġ"\" $ it \"" Ġ} ĊĠĠĠĠĠĠĠ Ġthis . annotations . add ("@ For Environments ({ $ params }) ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmodifiers ( var arg Ġmodifiers : ĠString ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . modifiers . addAll ( modifiers ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextends ( clazz : ĠString ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . extends Ġ= Ġclazz ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġimplements ( var arg Ġinterfaces : ĠString ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . implements . addAll ( interfaces ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstructor ( environments : ĠList < String > ?, Ġvar arg Ġparams : ĠJava Param ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjava Method Ġ= ĠJava Method ( name ) ĊĠĠĠĠĠĠĠ Ġjava Method . is Constructor () ĊĠĠĠĠĠĠĠ Ġjava Method . modifiers (" public ") ĊĠĠĠĠĠĠĠ Ġif Ġ( environments Ġ!= Ġnull ) Ġjava Method . for Environments (* environments . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġparams . forEach Ġ{ Ġjava Method . param ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġthis . methods . add ( java Method ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmethod ( method : ĠJava Method ): ĠJava Class Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . methods . add ( method ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġconstruct (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrun Imports Ġ= Ġimports . join ToString ("\ n ") Ġ{ Ġ" import Ġ$ it ;" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrun Annotation Ġ= Ġannotations . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġrun Modifiers Ġ= Ġmodifiers . join ToString (" Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġrun Ext ends Ġ= Ġextends ?. let Ġ{ Ġ" extends Ġ$ it " Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġrun Implements Ġ= Ġimplements . take If Ġ{ Ġit . isNotEmpty () Ġ} ?. let Ġ{ Ġ" implements Ġ${ it . join ToString () }" Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġrun Methods Ġ= Ġmethods . join ToString ("\ n \ n ") Ġ{ Ġit . construct () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ" package Ġ$ pack ;\ n $ run Imports \ n \ n $ run Annotation \ n $ run Modifiers Ġ$ type Ġ$ name Ġ$ run Ext ends Ġ$ run Implements {\ n $ run Methods \ n }" ĊĠĠĠ Ġ} Ċ Ċ }