package Ġio . phil arios . schema . entities . codegen . types . spec Ċ Ċ import Ġcom . squareup . kotlin po et .* Ċ import Ġio . phil arios . core . Spec Ċ import Ġio . phil arios . schema . Struct Ċ import Ġio . phil arios . schema . entities . codegen . util .* Ċ Ċ internal Ġval ĠStruct . spec Type Spec Ġget () Ġ= Ġspec Type Spec () Ċ Ċ internal Ġfun ĠStruct . spec Type Spec ( super class : ĠClass Name ? Ġ= Ġnull ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfields . isEmpty () Ġ-> Ġobject Spec Type Spec ( super class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdata Class Spec Type Spec ( super class ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun ĠStruct . object Spec Type Spec ( super class : ĠClass Name ?) Ġ= ĊĠĠĠĠĠĠĠ ĠType Spec . object Builder ( spec ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If NotNull ( super class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuperclass ( Parameterized TypeName . get ( it , ĠclassName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ Ċ private Ġfun ĠStruct . data Class Spec Type Spec ( super class : ĠClass Name ?) Ġ= ĊĠĠĠĠĠĠĠ ĠType Spec . class Builder ( spec ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If NotNull ( super class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuperclass ( Parameterized TypeName . get ( it , ĠclassName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Super interface ( Parameterized TypeName . get ( Spec :: class . className , Ġbuilder ClassName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addProperty ( Property Spec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. builder (" body ", Ġbody Lambda TypeName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . OVERRIDE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initializer (" body ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. primary Constructor ( Fun Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( body Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ