package Ġcom . ap ol log raph ql . apollo . cache . normalized . internal Ċ Ċ import Ġcom . ap ol log raph ql . apollo . api . Operation Ċ import Ġcom . ap ol log raph ql . apollo . api . Response Field Ċ import Ġcom . ap ol log raph ql . apollo . api . internal . Resolve Delegate Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . CacheKey Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . CacheKey Resolver . Companion . root Key For Operation Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . Cache Reference Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . Record Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . Record . Companion . builder Ċ import Ġcom . ap ol log raph ql . apollo . cache . normalized . Record Set Ċ import Ġkotlin . jvm . Jvm Field Ċ Ċ abstract Ġclass ĠResponse Normalizer < R > Ġ: ĠResolve Delegate < R > Ġ{ ĊĠ Ġprivate Ġlateinit Ġvar Ġpath Stack : ĠSimple Stack < Mutable List < String >> ĊĠ Ġprivate Ġlateinit Ġvar Ġrecord Stack : ĠSimple Stack < Record > ĊĠ Ġprivate Ġlateinit Ġ Ġvar Ġvalue Stack : ĠSimple Stack < Any ?> ĊĠ Ġprivate Ġlateinit Ġvar Ġpath : ĠMutable List < String > ĊĠ Ġprivate Ġlateinit Ġvar Ġcurrent Record Builder : ĠRecord . Builder ĊĠ Ġprivate Ġvar Ġrecord Set Ġ= ĠRecord Set () ĊĠ Ġprivate Ġvar Ġdependent Keys Ġ= Ġmutable Set Of < String >() ĊĊĠ Ġopen Ġfun Ġrecords (): ĠCollection < Record ?> ? Ġ{ ĊĠĠĠ Ġreturn Ġrecord Set . all Records () ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġdependent Keys (): ĠSet < String > Ġ{ ĊĠĠĠ Ġreturn Ġdependent Keys ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġwill Resolve Root Query ( operation : ĠOperation < *, Ġ*, Ġ* >) Ġ{ ĊĠĠĠ Ġwill Resolve Record ( root Key For Operation ( operation )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġwill Resolve ( field : ĠResponse Field , Ġvariables : ĠOperation . Variables , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠ Ġval Ġkey Ġ= Ġcache Key Builder (). build ( field , Ġvariables ) ĊĠĠĠ Ġpath . add ( key ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve ( field : ĠResponse Field , Ġvariables : ĠOperation . Variables ) Ġ{ ĊĠĠĠ Ġpath . remove At ( path . size Ġ- Ġ 1 ) ĊĠĠĠ Ġval Ġvalue Ġ= Ġvalue Stack . pop () ĊĠĠĠ Ġval Ġcache Key Ġ= Ġcache Key Builder (). build ( field , Ġvariables ) ĊĠĠĠ Ġval Ġdependent Key Ġ= Ġcurrent Record Builder . key Ġ+ Ġ"." Ġ+ Ġcache Key ĊĠĠĠ Ġdependent Keys . add ( dependent Key ) ĊĠĠĠ Ġcurrent Record Builder . addField ( cacheKey , Ġvalue ) ĊĠĠĠ Ġif Ġ( record Stack . isEmpty ) Ġ{ ĊĠĠĠĠĠ Ġrecord Set . merge ( current Record Builder . build ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve Scalar ( value : ĠAny ?) Ġ{ ĊĠĠĠ Ġvalue Stack . push ( value ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġwill Resolve Object ( object Field : ĠResponse Field , Ġobject Source : ĠR ?) Ġ{ ĊĠĠĠ Ġpath Stack . push ( path ) ĊĠĠĠ Ġval Ġcache Key Ġ= Ġobject Source ?. let Ġ{ Ġresolve CacheKey ( object Field , Ġit ) Ġ} Ġ?: ĠCache Key . NO _ KEY ĊĠĠĠ Ġvar Ġcache KeyValue Ġ= Ġcache Key . key () ĊĠĠĠ Ġif Ġ( cacheKey . equals ( CacheKey . NO _ KEY )) Ġ{ ĊĠĠĠĠĠ Ġcache KeyValue Ġ= Ġpath ToString () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġpath Ġ= ĠArrayList () ĊĠĠĠĠĠ Ġpath . add ( cache KeyValue ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġrecord Stack . push ( current Record Builder . build ()) ĊĠĠĠ Ġcurrent Record Builder Ġ= Ġbuilder ( cache KeyValue ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve Object ( object Field : ĠResponse Field , Ġobject Source : ĠR ?) Ġ{ ĊĠĠĠ Ġpath Ġ= Ġpath Stack . pop () ĊĠĠĠ Ġif Ġ( object Source Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġcompleted Record Ġ= Ġcurrent Record Builder . build () ĊĠĠĠĠĠ Ġvalue Stack . push ( Cache Reference ( completed Record . key ())) ĊĠĠĠĠĠ Ġdependent Keys . add ( completed Record . key ()) ĊĠĠĠĠĠ Ġrecord Set . merge ( completed Record ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcurrent Record Builder Ġ= Ġrecord Stack . pop (). to Builder () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve List ( array : ĠList <* >) Ġ{ ĊĠĠĠ Ġval Ġparsed Array Ġ= ĠArrayList < Any ? >( array . size ) ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġval Ġsize Ġ= Ġarray . size ĊĠĠĠ Ġwhile Ġ( i Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠ Ġparsed Array . add ( 0 , Ġvalue Stack . pop ()) ĊĠĠĠĠĠ Ġi ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġvalue Stack . push ( parsed Array ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġwill Resolve Element ( at Index : ĠInt ) Ġ{ ĊĠĠĠ Ġpath . add ( at Index . toString ()) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve Element ( at Index : ĠInt ) Ġ{ ĊĠĠĠ Ġpath . remove At ( path . size Ġ- Ġ 1 ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdid Resolve Null () Ġ{ ĊĠĠĠ Ġvalue Stack . push ( null ) ĊĠ Ġ} ĊĊĠ Ġabstract Ġfun Ġresolve CacheKey ( field : ĠResponse Field , Ġrecord : ĠR ): ĠCache Key ĊĠ Ġabstract Ġfun Ġcache Key Builder (): ĠCache Key Builder ĊĠ Ġfun Ġwill Resolve Record ( cacheKey : ĠCache Key ) Ġ{ ĊĠĠĠ Ġpath Stack Ġ= ĠSimple Stack () ĊĠĠĠ Ġrecord Stack Ġ= ĠSimple Stack () ĊĠĠĠ Ġvalue Stack Ġ= ĠSimple Stack () ĊĠĠĠ Ġdependent Keys Ġ= ĠHashSet () ĊĠĠĠ Ġpath Ġ= ĠArrayList () ĊĠĠĠ Ġcurrent Record Builder Ġ= Ġbuilder ( cacheKey . key ()) ĊĠĠĠ Ġrecord Set Ġ= ĠRecord Set () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpath ToString (): ĠString Ġ{ ĊĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġval Ġsize Ġ= Ġpath . size ĊĠĠĠ Ġwhile Ġ( i Ġ< Ġsize ) Ġ{ ĊĠĠĠĠĠ Ġval Ġpath Piece Ġ= Ġpath [ i ] ĊĠĠĠĠĠ ĠstringBuilder . append ( path Piece ) ĊĠĠĠĠĠ Ġif Ġ( i Ġ< Ġsize Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstringBuilder . append (".") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġi ++ ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval ĠNO _ OP _ NORMAL IZER : ĠResponse Normalizer < *> Ġ= Ġobject Ġ: ĠResponse Normalizer < Any ?> () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġwill Resolve Root Query ( operation : ĠOperation < *, Ġ*, Ġ* >) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġwill Resolve ( field : ĠResponse Field , Ġvariables : ĠOperation . Variables , Ġvalue : ĠAny ?) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve ( field : ĠResponse Field , Ġvariables : ĠOperation . Variables ) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve Scalar ( value : ĠAny ?) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġwill Resolve Object ( object Field : ĠResponse Field , Ġobject Source : ĠAny ?) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve Object ( object Field : ĠResponse Field , Ġobject Source : ĠAny ?) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve List ( array : ĠList <* >) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġwill Resolve Element ( at Index : ĠInt ) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve Element ( at Index : ĠInt ) Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġdid Resolve Null () Ġ{} ĊĠĠĠĠĠ Ġoverride Ġfun Ġrecords (): ĠCollection < Record ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġdependent Keys (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Set () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġresolve CacheKey ( field : ĠResponse Field , Ġrecord : ĠAny ?): ĠCache Key Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCache Key . NO _ KEY ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġcache Key Builder (): ĠCache Key Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠCache Key Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbuild ( field : ĠResponse Field , Ġvariables : ĠOperation . Variables ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCache Key . NO _ KEY . key () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }