package Ġcom . by but ter . sis y ph us . protobuf . compiler Ċ Ċ import Ġcom . squareup . kotlin po et . Annotation Spec Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . Code Block Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . Fun Spec Ċ import Ġcom . squareup . kotlin po et . K Modifier Ċ import Ġcom . squareup . kotlin po et . Parameter Spec Ċ import Ġcom . squareup . kotlin po et . Property Spec Ċ import Ġcom . squareup . kotlin po et . TypeName Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġcom . squareup . kotlin po et . build Code Block Ċ import Ġkotlin . reflect . K Class Ċ Ċ fun ĠCode Block . Builder . begin Scope ( ĊĠĠĠ Ġcontrol Flow : ĠString , ĊĠĠĠ Ġvar arg Ġargs : ĠAny ?, ĊĠĠĠ Ġblock : ĠCode Block . Builder . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠCode Block . Builder Ġ{ ĊĠĠĠ Ġbegin Control Flow ( control Flow , Ġ* args ) ĊĠĠĠ Ġblock () ĊĠĠĠ Ġend Control Flow () ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ operator Ġfun ĠType Spec . Builder . plus Assign ( modifier : ĠK Modifier ) Ġ{ ĊĠĠĠ Ġthis . add Modifiers ( modifier ) Ċ } Ċ Ċ operator Ġfun ĠProperty Spec . Builder . plus Assign ( modifier : ĠK Modifier ) Ġ{ ĊĠĠĠ Ġthis . add Modifiers ( modifier ) Ċ } Ċ Ċ fun ĠFun Spec . Builder . annotation ( annotation : ĠClass Name , Ġblock : ĠAnnotation Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġthis . add Annotation ( Annotation Spec . builder ( annotation ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . annotation ( annotation : ĠClass Name , Ġblock : ĠAnnotation Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġthis . add Annotation ( Annotation Spec . builder ( annotation ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠProperty Spec . Builder . annotation ( annotation : ĠClass Name , Ġblock : ĠAnnotation Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġthis . add Annotation ( Annotation Spec . builder ( annotation ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠProperty Spec . Builder . getter ( block : ĠFun Spec . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . getter ( Fun Spec . getter Builder (). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠProperty Spec . Builder . setter ( block : ĠFun Spec . Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . setter ( Fun Spec . setter Builder (). apply ( block ). build ()) Ċ } Ċ Ċ operator Ġfun ĠFun Spec . Builder . plus Assign ( modifier : ĠK Modifier ) Ġ{ ĊĠĠĠ Ġthis . add Modifiers ( modifier ) Ċ } Ċ Ċ fun Ġk File ( packageName : ĠString , Ġname : ĠString , Ġblock : ĠFile Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠFile Spec Ġ{ ĊĠĠĠ Ġreturn ĠFile Spec . builder ( packageName , Ġname ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Class ( name : ĠString , Ġblock : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn ĠType Spec . class Builder ( name ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Enum ( name : ĠString , Ġblock : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn ĠType Spec . enum Builder ( name ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Object ( name : ĠString , Ġblock : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn ĠType Spec . object Builder ( name ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Interface ( name : ĠString , Ġblock : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn ĠType Spec . interface Builder ( name ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Property ( name : ĠString , Ġtype : ĠType Name , Ġblock : ĠProperty Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠProperty Spec Ġ{ ĊĠĠĠ Ġreturn ĠProperty Spec . builder ( name , Ġtype ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Property ( name : ĠString , Ġtype : ĠK Class <* >, Ġblock : ĠProperty Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠProperty Spec Ġ{ ĊĠĠĠ Ġreturn ĠProperty Spec . builder ( name , Ġtype ). apply ( block ). build () Ċ } Ċ Ċ fun Ġk Fun ( name : ĠString , Ġblock : ĠFun Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠFun Spec Ġ{ ĊĠĠĠ Ġreturn ĠFun Spec . builder ( name ). apply ( block ). build () Ċ } Ċ Ċ fun ĠType Spec . Builder . comp anion ( block : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġthis . add Type ( Type Spec . comp anion Object Builder (). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . k Init ( block : ĠCode Block . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġthis . add Initializer Block ( build Code Block ( block )) Ċ } Ċ Ċ infix Ġfun ĠType Spec . Builder . extends ( type : ĠType Name ) Ġ{ ĊĠĠĠ Ġthis . super class ( type ) Ċ } Ċ Ċ infix Ġfun ĠType Spec . Builder . extends ( type : ĠK Class <* >) Ġ{ ĊĠĠĠ Ġthis . super class ( type ) Ċ } Ċ Ċ fun ĠType Spec . Builder . implements ( var arg Ġtypes : ĠType Name ) Ġ{ ĊĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Super interface ( type ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠType Spec . Builder . implements ( var arg Ġtypes : ĠK Class <* >) Ġ{ ĊĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add Super interface ( type ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ infix Ġfun ĠType Spec . Builder . implements ( type : ĠType Name ) Ġ{ ĊĠĠĠ Ġthis . add Super interface ( type ) Ċ } Ċ Ċ infix Ġfun ĠType Spec . Builder . implements ( type : ĠK Class <* >) Ġ{ ĊĠĠĠ Ġthis . add Super interface ( type ) Ċ } Ċ Ċ fun ĠType Spec . Builder . constructor ( block : ĠFun Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġprimary Constructor ( Fun Spec . constructor Builder (). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . property ( name : ĠString , Ġtype : ĠType Name , Ġblock : ĠProperty Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Property ( Property Spec . builder ( name , Ġtype ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . property ( name : ĠString , Ġtype : ĠK Class <* >, Ġblock : ĠProperty Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Property ( Property Spec . builder ( name , Ġtype ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . type ( name : ĠString , Ġblock : ĠType Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Type ( Type Spec . class Builder ( name ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠType Spec . Builder . function ( name : ĠString , Ġblock : ĠFun Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Function ( Fun Spec . builder ( name ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠFun Spec . Builder . parameter ( name : ĠString , Ġtype : ĠK Class <* >, Ġblock : ĠParameter Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Parameter ( Parameter Spec . builder ( name , Ġtype ). apply ( block ). build ()) Ċ } Ċ Ċ fun ĠFun Spec . Builder . parameter ( name : ĠString , Ġtype : ĠType Name , Ġblock : ĠParameter Spec . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġadd Parameter ( Parameter Spec . builder ( name , Ġtype ). apply ( block ). build ()) Ċ } Ċ Ċ data Ġclass ĠWhen Branch Builder ( val Ġbranch : ĠCode Block , Ġval Ġcode Block : ĠCode Block . Builder ) Ċ