package Ġcom . github . g ma zz o . gradle . plugins . generators Ċ Ċ import Ġcom . github . g ma zz o . gradle . plugins . Build Config Field Ċ import Ġcom . squareup . kotlin po et . BOOLEAN Ċ import Ġcom . squareup . kotlin po et . BYTE Ċ import Ġcom . squareup . kotlin po et . CHAR Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . DOUBLE Ċ import Ġcom . squareup . kotlin po et . FLOAT Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . INT Ċ import Ġcom . squareup . kotlin po et . K Modifier Ċ import Ġcom . squareup . kotlin po et . LONG Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . SHORT Ċ 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 Ġorg . apache . commons . lang 3 . Class Utils Ċ import Ġorg . gradle . api . logging . Logging Ċ Ċ data Ġclass ĠBuild Config Kotlin Generator ( ĊĠĠĠ Ġvar Ġtop Level Constants : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġvar Ġinternal Visibility : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠBuild Config Generator Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconst Types Ġ= Ġset Of ( String :: class . as ClassName (), ĠBOOLEAN , ĠBYTE , ĠSH ORT , ĠINT , ĠLONG , ĠCHAR , ĠFLOAT , ĠDOUBLE ) ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogging . getLogger ( java Class ) ĊĊĠĠĠ Ġprivate Ġfun ĠIterable < Build Config Field >. as Properties Spec () Ġ= Ġmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġwhen Ġ( it . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" String " Ġ-> ĠString :: class . as ClassName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrun Catch ing Ġ{ ĠClass Name . best Guess ( it . type ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġ_ Ġ-> ĠClass Utils . getClass ( it . type , Ġfalse ). as TypeName () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn @ map ĠProperty Spec . builder ( it . name , ĠtypeName , Ġk Modifiers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġif Ġ( typeName Ġin Ġconst Types ) Ġadd Modifiers ( K Modifier . CONST ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer ("% L ", Ġit . value . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( spec : ĠBuild Config Generator Spec ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Generating Ġ${ spec . className } Ġfor Ġfields Ġ${ spec . fields }") ĊĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġspec . fields . as Properties Spec () ĊĊĠĠĠĠĠĠĠ ĠFile Spec . builder ( spec . packageName , Ġspec . className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Fields ( fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. writeTo ( spec . output Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFile Spec . Builder . add Fields ( fields : ĠList < Property Spec >): ĠFile Spec . Builder Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Level Constants Ġ-> Ġfields . fold ( this , ĠFile Spec . Builder :: addProperty ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġadd Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType Spec . object Builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( k Modifiers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Properties ( fields ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġk Modifiers ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( internal Visibility ) ĠK Modifier . INTERNAL Ġelse ĠK Modifier . PUBLIC Ċ Ċ } Ċ