package Ġcom . g ros ner . k po et Ċ Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġjava . lang . reflect . Type Ċ import Ġjavax . lang . model . element . Modifier Ċ import Ġkotlin . reflect . K Class Ċ Ċ fun ĠType Spec . Builder . extends ( typeName : ĠType Name ) Ġ= Ġsuperclass ( typeName ) !! Ċ Ċ fun ĠType Spec . Builder . extends ( type : ĠType ) Ġ= Ġsuperclass ( type ) !! Ċ Ċ fun ĠType Spec . Builder . implements ( var arg ĠtypeName : ĠType Name ) Ġ= Ġadd Super interfaces ( typeName . toList ()) !! Ċ Ċ fun ĠType Spec . Builder . implements ( var arg Ġtype : ĠType ) Ġ= Ġapply Ġ{ Ġtype . forEach Ġ{ Ġadd Super interface ( it ) Ġ} Ġ} Ċ Ċ fun ĠType Spec . Builder . modifiers ( var arg Ġmodifier : ĠModifier ) Ġ= Ġadd Modifiers (* modifier ) !! Ċ Ċ fun ĠType Spec . Builder . modifiers ( var arg Ġmodifiers : ĠList < Modifier >) ĊĠĠĠĠĠĠĠ Ġ= Ġapply Ġ{ Ġmodifiers . forEach Ġ{ Ġadd Modifiers (* it . to Typed Array ()) Ġ} Ġ} Ċ Ċ infix Ġfun ĠType Spec . Builder . annotation ( type : ĠK Class <* >) Ġ= Ġadd Annotation ( type . java ) !! Ċ Ċ infix Ġfun ĠType Spec . Builder . annotation ( type : ĠClass Name ) Ġ= Ġadd Annotation ( type ) !! Ċ Ċ inline Ġfun ĠType Spec . Builder . annotation ( className : ĠClass Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction : ĠAnnotation Spec . Builder . () Ġ-> ĠAnnotation Spec . Builder ) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Annotation ( Annotation Spec . builder ( className ). function (). build ()) !! Ċ Ċ inline Ġfun ĠType Spec . Builder . annotation ( className : ĠK Class <* >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction : ĠAnnotation Spec . Builder . () Ġ-> ĠAnnotation Spec . Builder ) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Annotation ( Annotation Spec . builder ( className . java ). function (). build ()) !! Ċ Ċ inline Ġfun Ġ` class `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . class Builder ( className ). type Spec Func (). build () !! Ċ Ċ inline Ġfun Ġ` interface `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . interface Builder ( className ). type Spec Func (). build () !! Ċ Ċ inline Ġfun Ġ` abstract Ġclass `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . class Builder ( className ). type Spec Func (). modifiers ( abstract ). build () !! Ċ Ċ inline Ġfun Ġ` public Ġabstract Ġclass `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . class Builder ( className ). type Spec Func (). modifiers ( public , Ġabstract ). build () !! Ċ Ċ inline Ġfun Ġ` public Ġclass `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . class Builder ( className ). type Spec Func (). modifiers ( public ). build () !! Ċ Ċ inline Ġfun Ġ` public Ġfinal Ġclass `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= Ġtype Spec Func ( Type Spec . class Builder ( className )). modifiers ( public , Ġfinal ). build () !! Ċ Ċ inline Ġfun Ġ` final Ġclass `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . class Builder ( className ). type Spec Func (). modifiers ( final ). build () !! Ċ Ċ inline Ġfun Ġ` enum `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . enum Builder ( className ). type Spec Func (). build () !! Ċ Ċ inline Ġfun Ġ` public Ġenum `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= ĠType Spec . enum Builder ( className ). type Spec Func (). modifiers ( public ). build () !! Ċ Ċ inline Ġfun Ġ` anonymous Ġclass `( type Arguments Format : ĠString , Ġvar arg Ġargs : ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= Ġtype Spec Func ( Type Spec . anonymous Class Builder ( type Arguments Format , Ġ* args )). build () !! Ċ Ċ inline Ġfun Ġ`@ interface `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= Ġtype Spec Func ( Type Spec . annotation Builder ( className )). build () !! Ċ Ċ inline Ġfun Ġ` public Ġ@ interface `( className : ĠString , Ġtype Spec Func : ĠType Method ) ĊĠĠĠĠĠĠĠ Ġ= Ġtype Spec Func ( Type Spec . annotation Builder ( className )). modifiers ( public ). build () !! Ċ Ċ fun ĠType Spec . Builder . constructor ( var arg Ġparameters : ĠParameter Spec . Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Spec Function : ĠMethod Method Ġ= Ġ{ Ġthis Ġ}) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Method ( method Spec Function ( Method Spec . constructor Builder ()). add Parameters ( parameters . map Ġ{ Ġit . build () Ġ} ĊĠĠĠĠĠĠĠ Ġ. to Mutable List ()). build ()) !! Ċ Ċ fun ĠType Spec . Builder . abstract ( return Class : ĠClass Name , Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġparameters : ĠParameter Spec . Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Spec Function : ĠMethod Method Ġ= Ġ{ Ġthis Ġ}) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Method ( method Spec Function ( Method Spec . method Builder ( name )) ĊĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠ Ġ. add Parameters ( parameters . map Ġ{ Ġit . build () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ. returns ( return Class ) ĊĠĠĠĠĠĠĠ Ġ. build ()) !! Ċ Ċ fun ĠType Spec . Builder . abstract ( returnType : ĠK Class <* >, Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġparameters : ĠParameter Spec . Builder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Spec Function : ĠMethod Method Ġ= Ġ{ Ġthis Ġ}) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Method ( method Spec Function ( Method Spec . method Builder ( name )) ĊĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠ Ġ. add Parameters ( parameters . map Ġ{ Ġit . build () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ. returns ( returnType ) ĊĠĠĠĠĠĠĠ Ġ. build ()) !! Ċ Ċ fun ĠType Spec . Builder . case ( name : ĠString ) Ġ= Ġadd Enum Constant ( name ) !! Ċ Ċ fun ĠType Spec . Builder . case ( name : ĠString , Ġfunction : ĠType Method ) Ġ= Ġadd Enum Constant ( name , Ġfunction (). build ()) !! Ċ Ċ fun ĠType Spec . Builder . case ( name : ĠString , Ġparameter : ĠString , Ġvar arg Ġargs : ĠAny ?, Ġfunction : ĠType Method Ġ= Ġ{ Ġthis Ġ}) ĊĠĠĠĠĠĠĠ Ġ= Ġadd Enum Constant ( name , ĠType Spec . anonymous Class Builder ( parameter , Ġ* args ). function (). build ()) !! Ċ Ċ fun ĠType Spec . Builder . javadoc ( doc : ĠString , Ġvar arg Ġargs : ĠAny ?) Ġ= Ġadd Javadoc ( doc , Ġargs ) Ċ Ċ fun ĠType Spec . Builder . javadoc ( code Block : ĠCode Block ) Ġ= Ġadd Javadoc ( code Block ) ĊĊĊ