package Ġcom . by but ter . sis y ph us . protobuf . compiler . rx java Ċ Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . Group ed Generator Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . Runtime Methods Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . Runtime Types Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . constructor Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . core . state . Api File Generating State Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . core . state . advance Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . extends Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . function Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . k Class Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . parameter Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . plus Assign Ċ import Ġcom . by but ter . sis y ph us . protobuf . compiler . property Ċ import Ġcom . squareup . kotlin po et . K Modifier Ċ import Ġcom . squareup . kotlin po et . Lambda TypeName Ċ import Ġcom . squareup . kotlin po et . Parameterized TypeName . Companion . parameter ized By Ċ import Ġcom . squareup . kotlin po et . UNIT Ċ import Ġcom . squareup . kotlin po et . as ClassName Ċ import Ġcom . squareup . kotlin po et . build Code Block Ċ Ċ class ĠRx Client Generator Ġ: ĠGroup ed Generator < Api File Generating State > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( state : ĠApi File Generating State ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( service Ġin Ġstate . descriptor . services ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . target . add Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk Class ( service . name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Generating State ( state , Ġservice , Ġthis ). advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRx Client Basic Generator Ġ: ĠGroup ed Generator < Client Generating State > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( state : ĠClient Generating State ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . target . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġextends ĠRuntime Types . AB STR ACT _ RE ACTIVE _ ST UB . parameter ized By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . descriptor . className () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" channel ", ĠRuntime Types . CHANNEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" options Intercept ors ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIterable :: class . as ClassName (). parameter ized By ( Runtime Types . CALL _ OPTIONS _ INTER CEPT OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue (" listOf () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" options ", ĠRuntime Types . CALL _ OPTIONS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue ("% T . DEFAULT ", ĠRuntime Types . CALL _ OPTIONS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Super class Constructor Parameter (" channel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Super class Constructor Parameter (" options Intercept ors ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Super class Constructor Parameter (" options ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ+= ĠK Modifier . OVERRIDE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" channel ", ĠRuntime Types . CHANNEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" options Intercept ors ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIterable :: class . as ClassName (). parameter ized By ( Runtime Types . CALL _ OPTIONS _ INTER CEPT OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" options ", ĠRuntime Types . CALL _ OPTIONS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( state . descriptor . className ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" return Ġ% T ( channel , Ġoptions Intercept ors , Ġoptions )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . descriptor . className () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRx Client Method Generator Ġ: ĠGroup ed Generator < Client Generating State > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( state : ĠClient Generating State ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( method Ġin Ġstate . descriptor . methods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Empty : ĠBoolean Ġ= Ġmethod . output Message (). className (). simple Name Ġ== Ġ" Empty " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgenerate Ġclient Ġrpc Ġfunction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . target . function ( method . name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Empty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( Runtime Types . COMP LE TABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . descriptor . server Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( Runtime Types . FLOW ABLE . parameter ized By ( method . output Message (). className ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( Runtime Types . SINGLE . parameter ized By ( method . output Message (). className ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . descriptor . client Streaming ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" input ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Types . FLOW ABLE . parameter ized By ( method . input Message (). className ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter (" input ", Ġmethod . input Message (). className ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturn Statement Post fix Ġ= Ġif Ġ( return Empty ) Ġ". ignore Element ()" Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! method . descriptor . client Streaming Ġ&& Ġ! method . descriptor . server Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġunary Call (${ method . name ()}, Ġinput )$ return Statement Post fix ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . descriptor . client Streaming Ġ&& Ġ! method . descriptor . server Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġclient Streaming (${ method . name ()}, Ġinput )$ return Statement Post fix ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! method . descriptor . client Streaming Ġ&& Ġmethod . descriptor . server Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġserver Streaming (${ method . name ()}, Ġinput )$ return Statement Post fix ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . descriptor . client Streaming Ġ&& Ġmethod . descriptor . server Streaming Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġbidi Streaming (${ method . name ()}, Ġinput )$ return Statement Post fix ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! method . descriptor . client Streaming ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . target . function ( method . name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ+= ĠK Modifier . INLINE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( return Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( Runtime Types . COMP LE TABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturns ( Runtime Types . SINGLE . parameter ized By ( method . output Message (). className ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parameter (" block ", ĠLambda TypeName . get ( method . input Message (). mutable ClassName (), ĠlistOf (), ĠUNIT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġ${ method . name ()} (% T Ġ{ Ġblock () Ġ}) ", Ġmethod . input Message (). className ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgenerate Ġmethod Ġdescriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . target . property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . name (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Types . METHOD _ DESCRIPTOR . parameter ized By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . input Message (). className (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . output Message (). className () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Code Block Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% T . newBuilder <% T , Â· % T >() \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Types . METHOD _ DESCRIPTOR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . input Message (). className (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . output Message (). className () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (". setType ( MethodDescriptor . MethodType .% L )\ n ", Ġ" UNARY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (". set Full MethodName (% S )\ n ", Ġmethod . full Proto Name (). substring ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". setRequest Marshaller (% T .% M ()) \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . input Message (). className (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Methods . MAR SH ALL ER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". set Response Marshaller (% T .% M ()) \ n ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . output Message (). className (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime Methods . MAR SH ALL ER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (". set Schema Descriptor ( this )\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd (". build ()\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ