/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠXml Util . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġlic enced Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe Ġlicense Ġwith Ġthe Ġsource Ġdistribution . Ċ Ġ* ĠAlternatively , Ġyou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnl . adapt ivity . xml util . util Ċ Ċ import Ġnl . adapt ivity . xml util .* Ċ import Ġkotlin . reflect . K Class Ċ import Ġjava . lang . Class NotFoundException Ċ import Ġjava . lang . NoSuch Method Exception Ċ Ċ public Ġclass ĠDefault Serialization Provider Ġ: ĠSerialization Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġserializer ( type : ĠK Class < T >): ĠSerialization Provider . Xml Serializer Fun < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Xml Serializable :: class . java . isAssignableFrom ( type . java ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġ// Ġthe Ġsystem Ġisn 't Ġsmart Ġenough Ġthat Ġthis Ġmeans ĠT Ġis Ġa Ġsubtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( Serializable Serializer Ġas ĠSerialization Provider . Xml Serializer Fun < T >) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġde Serializer ( type : ĠK Class < T >): ĠSerialization Provider . Xml Deserializer Fun ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġtype . java . annotations . first OrNull Ġ{ Ġit . java Class . name ==" nl . adapt ivity . xml util . xml serial izable . Xml Deserializer " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġa ?. let Ġ{ ĠDeserial izer Fun Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠDeserial izer Fun Ġ: ĠSerialization Provider . Xml Deserializer Fun Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġinvoke ( input : ĠXml Reader , Ġtype : ĠK Class < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġtype . java . annotations . first Ġ{ Ġit . java Class . name ==" nl . adapt ivity . xml util . xml serial izable . Xml Deserializer " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Class Ġ= Ġa . java Class . getMethod (" value "). invoke ( a ) Ġas ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= Ġfactory Class . get Constructor (). newInstance () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfactory Class . getMethod (" deserialize ", ĠXml Reader :: class . java ). invoke ( factory , Ġinput ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġobject ĠSerializable Serializer Ġ: ĠSerialization Provider . Xml Serializer Fun < Xml Serializable > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( output : ĠXml Writer , Ġvalue : ĠXml Serializable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . serialize ( output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ