package Ġio . phil arios . schema . entities . codegen . types . builder Ċ Ċ import Ġcom . squareup . kotlin po et .* Ċ import Ġio . phil arios . core . Builder Ċ import Ġio . phil arios . core . Dsl Builder Ċ import Ġio . phil arios . schema . Struct Ċ import Ġio . phil arios . schema . Union Ċ import Ġio . phil arios . schema . entities . codegen . util .* Ċ Ċ internal Ġval Ġbuilder Interface Type Specs Ġ= Ġcreate Type Builder Type Spec ( Struct :: builder Interface Type Spec ) Ċ Ċ private Ġfun ĠStruct . builder Interface Type Spec ( parameter Functions : ĠList < Parameter Function >): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn ĠType Spec . interface Builder ( builder ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Super interface ( Parameterized TypeName . get ( Builder :: class . className , Ġspec TypeName , Ġbuilder ClassName )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( Dsl Builder :: class . className ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Functions ( parameter Functions . map Ġ{ Ġit . parameter Fun Spec Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ private Ġval ĠParameter Function . parameter Fun Spec ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Set Parameter Function With Body Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Set Parameter Function With Spec Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Set Parameter Function With Ref Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Set Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Parameter Function With Body Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Parameter Function With Spec Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Parameter Function With Ref Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add All Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put KeyValue Parameter Function With Body Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put KeyValue Parameter Function With Spec Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put KeyValue Parameter Function With Ref Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put KeyValue Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put Pair Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Put All Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put KeyValue Parameter Function With Body Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put KeyValue Parameter Function With Spec Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put KeyValue Parameter Function With Ref Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put KeyValue Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put Pair Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠĠĠĠĠ Ġis ĠParameter Function . Add Put All Parameter Function With Wrapper Ġ-> Ġparameter Fun Spec ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Set Parameter Function With Body . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( fieldType . body Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Set Parameter Function With Spec . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( fieldType Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( fieldType . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( fieldType . spec Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Set Parameter Function With Ref . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( fieldType Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( fieldType . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( fieldType . ref Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Set Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( fieldType Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( fieldType . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( fieldType . wrapper Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Parameter Function With Body . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingular Name Ġ= Ġfield . actual Sing ular Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( singular Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( list Type . body Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Parameter Function With Spec . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingular Name Ġ= Ġfield . actual Sing ular Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( singular Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( list Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( list Type . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( list Type . spec Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Parameter Function With Ref . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingular Name Ġ= Ġfield . actual Sing ular Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( singular Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( list Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( list Type . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( list Type . ref Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingular Name Ġ= Ġfield . actual Sing ular Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( singular Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( list Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( list Type . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( list Type . wrapper Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add All Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġfield . type . typeName ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder ( name , ĠtypeName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put KeyValue Parameter Function With Body . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . body Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put KeyValue Parameter Function With Spec . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( key Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( valueType . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . spec Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put KeyValue Parameter Function With Ref . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( key Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( key Type . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . ref Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put KeyValue Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġvalue ClassName Ġ= Ġvalue Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" value ", Ġvalue ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put Pair Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġvalue ClassName Ġ= Ġvalue Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" pair ", ĠParameter ized TypeName . get ( Pair :: class . className , Ġkey ClassName , Ġvalue ClassName )). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Put All Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġfield . type . typeName ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder ( name , ĠtypeName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put KeyValue Parameter Function With Body . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . body Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put KeyValue Parameter Function With Spec . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( key Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( valueType . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . spec Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put KeyValue Parameter Function With Ref . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run If True ( key Type Ġis ĠUnion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Variable ( Type Variable Name (" T "). with Bounds ( key Type . className )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( valueType . ref Parameter Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put KeyValue Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġvalue ClassName Ġ= Ġvalue Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" key ", Ġkey ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" value ", Ġvalue ClassName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put Pair Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey ClassName Ġ= Ġkey Type . className ĊĠĠĠĠĠĠĠ Ġval Ġvalue ClassName Ġ= Ġvalue Type . className ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder (" pair ", ĠParameter ized TypeName . get ( Pair :: class . className , Ġkey ClassName , Ġvalue ClassName )). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ Ċ private Ġval ĠParameter Function . Add Put All Parameter Function With Wrapper . parameter Fun Spec ĊĠĠĠ Ġget (): ĠFun Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfield . escaped Name ĊĠĠĠĠĠĠĠ Ġval ĠtypeName Ġ= Ġfield . type . typeName ĊĠĠĠĠĠĠĠ Ġreturn ĠFun Spec . builder ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( K Modifier . AB STR ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Parameter ( Parameter Spec . builder ( name , ĠtypeName ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ