package Ġcom . co xa ut ode v . graphql . tools Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . google . common . collect . Bi Map Ċ import Ġcom . google . common . collect . Hash Bi Map Ċ import Ġcom . google . common . collect . Maps Ċ import Ġgraphql . parser . Parser Ċ import Ġgraphql . schema . Data Fetching Environment Ċ import Ġgraphql . schema . GraphQL Scalar Type Ċ import Ġorg . antlr . v 4 . runtime . Recognition Exception Ċ import Ġorg . antlr . v 4 . runtime . misc . Parse Cancellation Exception Ċ import Ġorg . reactiv est ream s . Publisher Ċ import Ġsun . reflect . gener ics . reflect ive Objects . Parameterized Type Impl Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Completion Stage Ċ import Ġjava . util . concurrent . Future Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAndrew ĠPot ter Ċ Ġ*/ Ċ class ĠSchema Parser Builder Ġconstructor ( private Ġval Ġdictionary : ĠSchema Parser Dictionary Ġ= ĠSchema Parser Dictionary ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġschema String Ġ= ĠStringBuilder () ĊĠĠĠ Ġprivate Ġval Ġresolver s Ġ= Ġmutable ListOf < GraphQL Resolver <* >>() ĊĠĠĠ Ġprivate Ġval Ġscal ars Ġ= Ġmutable ListOf < GraphQL Scalar Type >() ĊĠĠĠ Ġprivate Ġvar Ġoptions Ġ= ĠSchema Parser Options . default Options () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd ĠGraphQL Ġschema Ġfiles Ġfrom Ġthe Ġclasspath . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfiles ( var arg Ġfiles : ĠString ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġthis . file ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa ĠGraphQL ĠSchema Ġfile Ġfrom Ġthe Ġclasspath . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfile ( filename : ĠString ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . schema String ( java . io . BufferedReader ( java . io . InputStream Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠAny () Ġ{} . java Class . class Loader . getResource AsStream ( filename ) Ġ?: Ġthrow Ġjava . io . FileNotFoundException (" classpath :$ filename ") ĊĠĠĠĠĠĠĠ Ġ )). read Text ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa ĠGraphQL Ġschema Ġstring Ġdirectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġschema String ( string : ĠString ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġschema String . append ("\ n "). append ( string ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd ĠGraphQL Resolvers Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresolver s ( var arg Ġresolver s : ĠGraphQL Resolver <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . resolvers . addAll ( resolvers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd ĠGraphQL Resolvers Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġresolver s ( resolvers : ĠList < GraphQL Resolver <* >>) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . resolvers . addAll ( resolvers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġscal ars Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscal ars ( var arg Ġscal ars : ĠGraphQL Scalar Type ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . scal ars . addAll ( scal ars ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( name : ĠString , Ġclazz : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( name , Ġclazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( name : ĠString , Ġclazz : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( name , Ġclazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( dictionary : ĠMap < String , ĠClass <* >>) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( clazz : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( clazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( clazz : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( clazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( var arg Ġdictionary : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add (* dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( var arg Ġdictionary : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add (* dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdictionary ( dictionary : ĠCollection < Class <* >>) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . add ( dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġoptions ( options : ĠSchema Parser Options ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . options Ġ= Ġoptions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScan Ġfor Ġclasses Ġwith Ġthe Ġsupplied Ġschema Ġand Ġdictionary . Ġ ĠUsed Ġfor Ġtesting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscan (): ĠSc anned Schema Objects Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParser (). parse Document ( this . schema String . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( p ce : ĠParse Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcause Ġ= Ġp ce . cause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cause Ġ!= Ġnull Ġ&& Ġcause Ġis ĠRecognition Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Schema Error ( p ce , Ġcause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġp ce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdefinitions Ġ= Ġdocument . definitions ĊĠĠĠĠĠĠĠ Ġval Ġcustom Scalars Ġ= Ġscal ars . associate By Ġ{ Ġit . name Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSchema Class Scanner ( dictionary . get Dictionary (), Ġdefinitions , Ġresolver s , Ġcustom Scalars , Ġoptions ). scan For Classes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild Ġthe Ġparser Ġwith Ġthe Ġsupplied Ġschema Ġand Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild () Ġ= ĠSchema Parser ( scan ()) Ċ } Ċ Ċ class ĠInvalid Schema Error ( p ce : ĠParse Cancellation Exception , Ġprivate Ġval Ġrecognition Exception : ĠRecognition Exception ): ĠRuntimeException ( p ce ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmessage : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" Invalid Ġschema Ġprovided Ġ(${ recognition Exception . java Class . name }) Ġat : Ġ${ recognition Exception . off ending Token }" Ċ } Ċ Ċ class ĠSchema Parser Dictionary Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdictionary : ĠBi Map < String , ĠClass <* >> Ġ= ĠHash Bi Map . create () ĊĊĠĠĠ Ġfun Ġget Dictionary (): ĠBi Map < String , ĠClass <* >> Ġ= ĠMaps . unmodifiable Bi Map ( dictionary ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( name : ĠString , Ġclazz : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . put ( name , Ġclazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( name : ĠString , Ġclazz : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . put ( name , Ġclazz . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary , Ġoverriding Ġthe Ġgenerated Ġtype Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( dictionary : ĠMap < String , ĠClass <* >>) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dictionary . put All ( dictionary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( clazz : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( clazz . simple Name , Ġclazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( clazz : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . add ( clazz . java . simple Name , Ġclazz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( var arg Ġdictionary : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġdictionary . forEach Ġ{ Ġthis . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( var arg Ġdictionary : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġdictionary . forEach Ġ{ Ġthis . add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġarbitrary Ġclasses Ġto Ġthe Ġparser 's Ġdictionary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( dictionary : ĠCollection < Class <* >>) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġdictionary . forEach Ġ{ Ġthis . add ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠSchema Parser Options Ġinternal Ġconstructor ( val Ġcontext Class : ĠClass < *> ?, Ġval Ġgeneric Wrappers : ĠList < Generic Wrapper >, Ġval Ġallow Unimplemented Resolvers : ĠBoolean , Ġval ĠobjectMapper Configurer : ĠObjectMapper Configurer , Ġval Ġproxy Handlers : ĠList < Proxy Handler >) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġnew Options () Ġ= ĠBuilder () ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġdefault Options () Ġ= ĠBuilder (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcontext Class : ĠClass < *> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgeneric Wrappers : ĠMutable List < Generic Wrapper > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġuse Default Generic Wrappers Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġallow Unimplemented Resolvers Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠobjectMapper Configurer : ĠObjectMapper Configurer Ġ= ĠObjectMapper Configurer Ġ{ Ġ_, Ġ_ Ġ-> Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproxy Handlers : ĠMutable List < Proxy Handler > Ġ= Ġmutable ListOf ( Spring 4 A op Proxy Handler (), ĠGu ice A op Proxy Handler (), ĠJ av assist Proxy Handler ()) ĊĊĠĠĠĠĠĠĠ Ġfun Ġcontext Class ( context Class : ĠClass <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . context Class Ġ= Ġcontext Class ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcontext Class ( context Class : ĠK Class <* >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . context Class Ġ= Ġcontext Class . java ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġfun Ġgeneric Wrappers ( generic Wrappers : ĠList < Generic Wrapper >) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . generic Wrappers . addAll ( generic Wrappers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgeneric Wrappers ( var arg Ġgeneric Wrappers : ĠGeneric Wrapper ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . generic Wrappers . addAll ( generic Wrappers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġuse Default Generic Wrappers ( use Default Generic Wrappers : ĠBoolean ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . use Default Generic Wrappers Ġ= Ġuse Default Generic Wrappers ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġallow Unimplemented Resolvers ( allow Unimplemented Resolvers : ĠBoolean ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . allow Unimplemented Resolvers Ġ= Ġallow Unimplemented Resolvers ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠobjectMapper Configurer ( object Mapper Configurer : ĠObjectMapper Configurer ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . object Mapper Configurer Ġ= ĠobjectMapper Configurer ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠobjectMapper Configurer ( object Mapper Configurer : Ġ( ObjectMapper , ĠObjectMapper Configurer Context ) Ġ-> ĠUnit ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . object Mapper Configurer ( ObjectMapper Configurer ( object Mapper Configurer )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Proxy Handler ( proxy Handler : ĠProxy Handler ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . proxy Handlers . add ( proxy Handler ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠSchema Parser Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrappers Ġ= Ġif ( use Default Generic Wrappers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Wrappers Ġ+ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneric Wrapper ( Future :: class , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneric Wrapper ( Comp letableFuture :: class , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneric Wrapper ( Completion Stage :: class , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneric Wrapper ( Publisher :: class , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Wrappers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSchema Parser Options ( context Class , Ġwrappers , Ġallow Unimplemented Resolvers , ĠobjectMapper Configurer , Ġproxy Handlers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠGeneric Wrapper ( ĊĠĠĠĠĠĠĠ Ġval Ġtype : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġtransformer : Ġ( Any , ĠData Fetching Environment ) Ġ-> ĠAny ? Ġ= Ġ{ Ġx , Ġ_ Ġ-> Ġx Ġ}, ĊĠĠĠĠĠĠĠ Ġval Ġschema Wrapper : Ġ( Java Type ) Ġ-> ĠJava Type Ġ= Ġ{ Ġx Ġ-> Ġx Ġ} ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconstructor ( type : ĠClass <* >, Ġindex : ĠInt ): Ġthis ( type , Ġindex , Ġ{ Ġx , Ġ_ Ġ-> Ġx Ġ}) ĊĠĠĠĠĠĠĠ Ġconstructor ( type : ĠK Class <* >, Ġindex : ĠInt ): Ġthis ( type . java , Ġindex , Ġ{ Ġx , Ġ_ Ġ-> Ġx Ġ}) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T > Ġwith Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠClass < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T , ĠData Fetching Environment ) Ġ-> ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Wrapper : Ġ( Java Type ) Ġ-> ĠJava Type Ġ= Ġ{ Ġx Ġ-> Ġx Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGeneric Wrapper ( type , Ġindex , Ġtransformer Ġas Ġ( Any , ĠData Fetching Environment ) Ġ-> ĠAny ?, Ġschema Wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġwith Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T , ĠData Fetching Environment ) Ġ-> ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Wrapper : Ġ( Java Type ) Ġ-> ĠJava Type Ġ= Ġ{ Ġx Ġ-> Ġx Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Transformer ( type . java , Ġindex , Ġtransformer , Ġschema Wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T > Ġwith Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠClass < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T ) Ġ-> ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Wrapper : Ġ( Java Type ) Ġ-> ĠJava Type Ġ= Ġ{ Ġx Ġ-> Ġx Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Transformer ( type , Ġindex , Ġ{ Ġx , Ġ_ Ġ-> Ġtransformer . invoke ( x ) Ġ}, Ġschema Wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġwith Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T ) Ġ-> ĠAny ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Wrapper : Ġ( Java Type ) Ġ-> ĠJava Type Ġ= Ġ{ Ġx Ġ-> Ġx Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Transformer ( type . java , Ġindex , Ġtransformer , Ġschema Wrapper ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġ< T > Ġlist Collection With Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠClass < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T ) Ġ-> ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwith Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġinner Type Ġ-> ĠParameter ized Type Impl . make ( List :: class . java , ĠarrayOf ( inner Type ), Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġlist Collection With Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformer : Ġ( T ) Ġ-> ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠGeneric Wrapper Ġwhere ĠT : ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist Collection With Transformer ( type . java , Ġindex , Ġtransformer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠ Ġ} Ċ } Ċ