package Ġcom . Ice C ream Q AQ . Yu . util . class Maker Ċ Ċ import Ġcom . Ice C ream Q AQ . Yu . util .* Ċ Ċ open Ġclass ĠClass Maker Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġvar Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġoverride Ġvar Ġabstract : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġoverride Ġvar Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġoverride Ġvar Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġvar ĠsuperClass : ĠClass < *> Ġ= ĠAny :: class . java , ĊĠĠĠ Ġvar Ġinterface Class : ĠClass < *> ? Ġ= Ġnull Ċ ) Ġ: ĠAnnotation Ab le , ĠAbstract Ab le , ĠStatic Ab le , ĠFinal Ab le , ĠAccess Ab le Ġ{ ĊĊĠĠĠ Ġval Ġfields Ġ= Ġarray ListOf < Field Maker >() ĊĠĠĠ Ġval Ġmethods Ġ= Ġarray ListOf < Method Maker >() ĊĠĠĠ Ġoverride Ġval Ġannotations Ġ= Ġarray ListOf < Annotation Maker >() Ċ Ċ // ĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ""" Ċ // ĠĠĠĠĠĠĠ Ġpackage Ġ${ name . split (". "). let Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Indexed Ġ{ Ġindex , Ġs Ġ-> Ġif Ġ( index Ġ< Ġit . size Ġ- Ġ 1 ) Ġsb . append ( s ). append (".") Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġsb . toString (). sub String By Last ( 1 ) Ċ // ĠĠĠĠĠĠĠ Ġ}}; Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ${ annotations ToString ("\ n ") }${ access . value } Ġclass Ġ${ name . split (". "). last () }{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ${ make Fields String ()} ${ make Methods String ()} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnp Ġ= Ġname . split (".") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( np . size Ġ> Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" package Ġ${ np [ 0 ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġnp . size Ġ- Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( np [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ;\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( annotations ToString ("\ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ access . value } Ġclass Ġ${ np . last () }{\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( make Fields String ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( make Methods String ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" }") ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĊĠĠĠ Ġprivate Ġfun Ġmake Fields String () Ġ= ĊĠĠĠĠĠĠĠ ĠStringBuilder (). apply Ġ{ Ġfields . forEach Ġ{ Ġappend ( it ). append ("\ n \ n ") Ġ} Ġ}. toString () ĊĊĠĠĠ Ġprivate Ġfun Ġmake Methods String () Ġ= ĊĠĠĠĠĠĠĠ ĠStringBuilder (). apply Ġ{ Ġmethods . forEach Ġ{ Ġappend ( it ). append ("\ n \ n ") Ġ} Ġ}. toString () Ċ Ċ // ĠĠĠ Ġ// Ġ æŀĦéĢł åĩ½æķ° éĥ¨åĪĨ Ċ // ĠĠĠ Ġconstructor ( Ċ // ĠĠĠĠĠĠĠ Ġname : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġaccess : ĠString Ġ= Ġ" public ", Ċ // ĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ ĠsuperClass : ĠClass < *> Ċ // ĠĠĠ Ġ) Ġ: Ġthis ( name , Ġaccess , Ġstatic , Ġfinal , ĠsuperClass . name , Ġnull ) Ċ // Ċ // ĠĠĠ Ġconstructor ( Ċ // ĠĠĠĠĠĠĠ Ġname : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġaccess : ĠString Ġ= Ġ" public ", Ċ // ĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġinterface Class : ĠArray < Class <* >> Ċ // ĠĠĠ Ġ) Ġ: Ġthis ( Ċ // ĠĠĠĠĠĠĠ Ġname , Ċ // ĠĠĠĠĠĠĠ Ġaccess , Ċ // ĠĠĠĠĠĠĠ Ġstatic , Ċ // ĠĠĠĠĠĠĠ Ġfinal , Ċ // ĠĠĠĠĠĠĠ ĠAny :: class . java . name , Ċ // ĠĠĠĠĠĠĠ Ġinterface Class . map Ġ{ Ġit . name Ġ}. to Typed Array () Ċ // ĠĠĠ Ġ) Ċ // Ċ // ĠĠĠ Ġconstructor ( Ċ // ĠĠĠĠĠĠĠ Ġname : ĠString , Ċ // ĠĠĠĠĠĠĠ Ġaccess : ĠString Ġ= Ġ" public ", Ċ // ĠĠĠĠĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , Ċ // ĠĠĠĠĠĠĠ ĠsuperClass : ĠClass <* >, Ċ // ĠĠĠĠĠĠĠ Ġinterface Class : ĠArray < Class <* >> Ċ // ĠĠĠ Ġ) Ġ: Ġthis ( Ċ // ĠĠĠĠĠĠĠ Ġname , Ċ // ĠĠĠĠĠĠĠ Ġaccess , Ċ // ĠĠĠĠĠĠĠ Ġstatic , Ċ // ĠĠĠĠĠĠĠ Ġfinal , Ċ // ĠĠĠĠĠĠĠ ĠsuperClass . name , Ċ // ĠĠĠĠĠĠĠ Ġinterface Class . map Ġ{ Ġit . name Ġ}. to Typed Array () Ċ // ĠĠĠ Ġ) Ċ // ĠĠĠ Ġ// Ġ æŀĦéĢł åĩ½æķ° ç»ĵæĿŁ ĊĊ Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠClass Maker . field ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ ĠdefaultValue : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġno inline Ġop : ĠField Maker . () Ġ-> ĠUnit Ċ ) Ġ= Ġfield ( name , Ġaccess , Ġstatic , Ġfinal , ĠT :: class . java , ĠdefaultValue , Ġop ) Ċ Ċ fun ĠClass Maker . field ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġtype : ĠClass < *> Ġ= ĠAny :: class . java , ĊĠĠĠ ĠdefaultValue : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġop : ĠField Maker . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġfield Maker Ġ= ĠField Maker ( this , Ġname , Ġaccess , Ġstatic , Ġfinal , Ġtype , ĠdefaultValue ) ĊĠĠĠ Ġop ( field Maker ) ĊĠĠĠ Ġfields . add ( field Maker ) Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠClass Maker . field ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ ĠdefaultValue : ĠString ? Ġ= Ġnull Ċ ) Ġ= Ġfield ( name , Ġaccess , Ġstatic , Ġfinal , ĠT :: class . java , ĠdefaultValue ) Ċ Ċ fun ĠClass Maker . field ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġtype : ĠClass < *> Ġ= ĠAny :: class . java , ĊĠĠĠ ĠdefaultValue : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġfield Maker Ġ= ĠField Maker ( this , Ġname , Ġaccess , Ġstatic , Ġfinal , Ġtype , ĠdefaultValue ) ĊĠĠĠ Ġfields . add ( field Maker ) Ċ } Ċ Ċ fun ĠClass Maker . method ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġaccess : ĠAccess Ġ= ĠAccess . PUBLIC , ĊĠĠĠ Ġstatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġfinal : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġparameters : ĠArray < Method Parameter >? Ġ= Ġnull , ĊĠĠĠ ĠreturnType : ĠClass < *> Ġ= ĠUnit :: class . java , ĊĠĠĠ Ġop : ĠMethod Maker . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġmethod Maker Ġ= ĠMethod Maker ( name , Ġaccess , Ġstatic , Ġfinal , Ġparameters , ĠreturnType ) ĊĠĠĠ Ġop ( method Maker ) ĊĠĠĠ Ġmethods . add ( method Maker ) Ċ }