package Ġorg . apache . t inker pop . gre mlin . og m . map pers Ċ Ċ import Ġorg . apache . t inker pop . gre mlin . og m . exceptions . In compatible Iterable Ċ import Ġorg . apache . t inker pop . gre mlin . og m . exceptions . In compatible Map Ċ import Ġorg . apache . t inker pop . gre mlin . og m . exceptions . Iterable NotSupported Ċ import Ġorg . apache . t inker pop . gre mlin . og m . reflection . Graph Description Ċ import Ġorg . apache . t inker pop . gre mlin . og m . reflection . Property Description Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . is Subclass Of Ċ Ċ internal Ġclass ĠProperty Deserializer < out ĠT >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgraph Description : ĠGraph Description , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproperty Description : ĠProperty Description < T , Ġ*> Ċ ) Ġ: ĠMapper < Serialized Property ?, ĠAny ?> Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( from : ĠSerialized Property ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( from Ġ== Ġnull Ġ&& Ġproperty Description . default Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperty Description . default . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( property Description . mapper Ġ!= Ġnull Ġ&& Ġfrom Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperty Description . mapper . inverse Map ( from ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( from ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIterable < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Class Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Description . property . returnType . arguments . single (). type ?. classifier Ġas ? ĠK Class < out ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIn compatible Iterable ( property Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Description . k Class . is Subclass Of ( Set :: class ) Ġ-> Ġfrom . map Ġ{ Ġdeserialize Property ( it , Ġto Class ) Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Description . k Class . is Subclass Of ( List :: class ) Ġ-> Ġfrom . map Ġ{ Ġdeserialize Property ( it , Ġto Class ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIterable NotSupported ( property Description . k Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property Description . k Class . is Subclass Of ( Map :: class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Type Parameters Ġ= Ġproperty Description . property . returnType . arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Class Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Type Parameters . first (). type ?. classifier Ġas ? ĠK Class < out ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIn compatible Map ( property Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Class Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Type Parameters . last (). type ?. classifier Ġas ? ĠK Class < out ĠAny > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIn compatible Map ( property Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom . entries . associate Ġ{ Ġdeserialize Property ( it . key , Ġkey Class ) Ġto Ġdeserialize Property ( it . value , Ġvalue Class ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeserialize Property ( from , Ġproperty Description . k Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdeserialize Property ( from , Ġproperty Description . k Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdeserialize Property ( property : ĠSerialized Property ?, Ġdeserialized Class : ĠK Class < out ĠAny >): ĠAny ? Ġ= Ġwhen Ġ( property ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġgraph Description . getObject Property Description ( de serialized Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde serializer Ġ= ĠObject Deserializer ( graph Description , Ġdescription ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde serializer ( property ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġgraph Description . get Scalar Property Mapper ( de serialized Class ). inverse Map ( property ) ĊĠĠĠ Ġ} Ċ } Ċ