/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ @ file : Restrict To ( Restrict To . Scope . LIBRARY ) Ċ Ċ package Ġandroidx . lifecycle Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġandroidx . lifecycle . ViewModel Provider . Android ViewModel Factory . Companion . getInstance Ċ import Ġandroidx . lifecycle . ViewModel Provider . New Instance Factory . Companion . instance Ċ import Ġandroidx . lifecycle . view model . Creation Extras Ċ import Ġandroidx . saved state . Saved State Registry Ċ import Ġandroidx . saved state . Saved State Registry Owner Ċ import Ġjava . lang . reflect . Constructor Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ Ċ /** Ċ Ġ* Ġ[ android x . lifecycle . ViewModel Provider . Factory ] Ġthat Ġcan Ġcreate ĠView Models Ġaccessing Ġand Ċ Ġ* Ġcontributing Ġto Ġa Ġsaved Ġstate Ġvia Ġ[ Saved State Handle ] Ġreceived Ġin Ġa Ġconstructor . Ċ Ġ* ĠIf Ġ` default Args ` Ġbundle Ġwas Ġpassed Ġinto Ġthe Ġconstructor , Ġit Ġwill Ġprovide Ġdefault Ċ Ġ* Ġvalues Ġin Ġ` Saved State Handle `. Ċ Ġ* Ċ Ġ* ĠIf ĠViewModel Ġis Ġinstance Ġof Ġ[ android x . lifecycle . Android ViewModel ], Ġit Ġlooks Ġfor Ġa Ċ Ġ* Ġconstructor Ġthat Ġreceives Ġan Ġ[ Application ] Ġand Ġ[ Saved State Handle ] Ġ( in Ġthis Ġorder ), Ċ Ġ* Ġotherwise Ġit Ġlooks Ġfor Ġa Ġconstructor Ġthat Ġreceives Ġ[ Saved State Handle ] Ġonly . Ċ Ġ* Ġ[ android x . lifecycle . Android ViewModel ] Ġis Ġonly Ġsupported Ġif Ġyou Ġpass Ġa Ġnon - null Ċ Ġ* Ġ[ Application ] Ġinstance . Ċ Ġ*/ Ċ class ĠSaved State ViewModel Factory Ġ: ĠViewModel Provider . On Re query Factory , ĠViewModel Provider . Factory Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġapplication : ĠApplication ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġfactory : ĠViewModel Provider . Factory ĊĠĠĠ Ġprivate Ġvar Ġdefault Args : ĠBundle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlifecycle : ĠLifecycle ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsaved State Registry : ĠSaved State Registry ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġthis Ġfactory . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġa Ġfactory Ġis Ġconstructed Ġthis Ġway , Ġa Ġcomponent Ġfor Ġwhich Ġ[ Saved State Handle ] Ġis ĊĠĠĠĠ Ġ* Ġscoped Ġmust Ġhave Ġcalled Ġ[ enable Saved State Handles ]. ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ create Saved State Handle ] Ġdocs Ġfor Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġfactory Ġ= ĠViewModel Provider . Android ViewModel Factory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġ[ Saved State ViewModel Factory ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ android x . lifecycle . ViewModel ] Ġcreated Ġwith Ġthis Ġfactory Ġcan Ġaccess Ġto Ġsaved Ġstate ĊĠĠĠĠ Ġ* Ġscoped Ġto Ġthe Ġgiven Ġ` activity `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġapplication Ġan Ġapplication . Ġ ĠIf Ġnull , Ġ[ Android ViewModel ] Ġinstances Ġwill Ġnot Ġbe ĊĠĠĠĠ Ġ* Ġsupported . ĊĠĠĠĠ Ġ* Ġ@ param Ġowner ĠĠĠĠĠĠ Ġ[ Saved State Registry Owner ] Ġthat Ġwill Ġprovide Ġrestored Ġstate Ġfor Ġcreated ĊĠĠĠĠ Ġ* Ġ[ ViewModels ][ android x . lifecycle . ViewModel ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication ?, ĊĠĠĠĠĠĠĠ Ġowner : ĠSaved State Registry Owner ĊĠĠĠ Ġ) Ġ: Ġthis ( application , Ġowner , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġ[ Saved State ViewModel Factory ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ[ android x . lifecycle . ViewModel ] Ġcreated Ġwith Ġthis Ġfactory Ġcan Ġaccess Ġto Ġsaved Ġstate ĊĠĠĠĠ Ġ* Ġscoped Ġto Ġthe Ġgiven Ġ` activity `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġapplication Ġan Ġapplication . ĠIf Ġnull , Ġ[ Android ViewModel ] Ġinstances Ġwill Ġnot Ġbe ĊĠĠĠĠ Ġ* Ġsupported . ĊĠĠĠĠ Ġ* Ġ@ param Ġowner ĠĠĠĠĠĠ Ġ[ Saved State Registry Owner ] Ġthat Ġwill Ġprovide Ġrestored Ġstate Ġfor Ġcreated ĊĠĠĠĠ Ġ* Ġ[ ViewModels ][ android x . lifecycle . ViewModel ] ĊĠĠĠĠ Ġ* Ġ@ param Ġdefault Args Ġvalues Ġfrom Ġthis Ġ` Bundle ` Ġwill Ġbe Ġused Ġas Ġdefaults Ġby Ġ[ Saved State Handle ] ĊĠĠĠĠ Ġ* Ġif Ġthere Ġis Ġno Ġpreviously Ġsaved Ġstate Ġor Ġpreviously Ġsaved Ġstate Ġmis ses Ġa Ġvalue Ġby Ġsuch Ġkey . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Lambda Last ") ĊĠĠĠ Ġconstructor ( application : ĠApplication ?, Ġowner : ĠSaved State Registry Owner , Ġdefault Args : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsaved State Registry Ġ= Ġowner . saved State Registry ĊĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġowner . lifecycle ĊĠĠĠĠĠĠĠ Ġthis . default Args Ġ= Ġdefault Args ĊĠĠĠĠĠĠĠ Ġthis . application Ġ= Ġapplication ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġif Ġ( application Ġ!= Ġnull ) ĠgetInstance ( application ) Ġelse Ġinstance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġthe Ġprovided Ġextras Ġdo Ġnot Ġprovide Ġa ĊĠĠĠĠ Ġ* Ġ[ ViewModel Provider . New Instance Factory . VIEW _ MODEL _ KEY ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >, Ġextras : ĠCreation Extras ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġextras [ ViewModel Provider . New Instance Factory . VIEW _ MODEL _ KEY ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" VIEW _ MODEL _ KEY Ġmust Ġalways Ġbe Ġprovided Ġby ĠViewModel Provider " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġlegacy Ġconstructor Ġwas Ġcalled ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate ( key , Ġmodel Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġextras [ ViewModel Provider . Android ViewModel Factory . APPLICATION _ KEY ] ĊĠĠĠĠĠĠĠ Ġval Ġis Android ViewModel Ġ= ĠAndroid ViewModel :: class . java . isAssignableFrom ( model Class ) ĊĠĠĠĠĠĠĠ Ġval Ġconstructor : ĠConstructor < T >? Ġ= Ġif Ġ( is Android ViewModel Ġ&& Ġapplication Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Matching Constructor ( model Class , ĠAND ROID _ VIEW MODEL _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Matching Constructor ( model Class , ĠVIEW MODEL _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġdoesn 't Ġneed ĠSaved State Handle ĊĠĠĠĠĠĠĠ Ġif Ġ( constructor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfactory . create ( model Class , Ġextras ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠviewModel : ĠT Ġ= Ġif Ġ( is Android ViewModel Ġ&& Ġapplication Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Instance ( model Class , Ġconstructor , Ġapplication , Ġextras . create Saved State Handle ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Instance ( model Class , Ġconstructor , Ġextras . create Saved State Handle ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġinstance Ġof Ġthe Ġgiven Ġ` Class `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġa Ġkey Ġassociated Ġwith Ġthe Ġrequested ĠViewModel ĊĠĠĠĠ Ġ* Ġ@ param Ġmodel Class Ġa Ġ` Class ` Ġwhose Ġinstance Ġis Ġrequested ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġnewly Ġcreated ĠViewModel ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠUnsupportedOperationException Ġif Ġthe Ġthere Ġis Ġno Ġlifecycle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( key : ĠString , Ġmodel Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġempty Ġconstructor Ġwas Ġcalled . ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Saved State ViewModel Factory Ġconstructed Ġwith Ġempty Ġconstructor Ġsupports Ġonly Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" calls Ġto Ġcreate ( model Class : ĠClass < T >, Ġextras : ĠCreation Extras )." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġis Android ViewModel Ġ= ĠAndroid ViewModel :: class . java . isAssignableFrom ( model Class ) ĊĠĠĠĠĠĠĠ Ġval Ġconstructor : ĠConstructor < T >? Ġ= Ġif Ġ( is Android ViewModel Ġ&& Ġapplication Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Matching Constructor ( model Class , ĠAND ROID _ VIEW MODEL _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Matching Constructor ( model Class , ĠVIEW MODEL _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġdoesn 't Ġneed ĠSaved State Handle ĊĠĠĠĠĠĠĠ Ġif Ġ( constructor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfactory . create ( model Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġ= ĠLegacy Saved State Handle Controller . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State Registry , Ġlifecycle , Ġkey , Ġdefault Args ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠviewModel : ĠT Ġ= Ġif Ġ( is Android ViewModel Ġ&& Ġapplication Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Instance ( model Class , Ġconstructor , Ġapplication !! , Ġcontroller . handle ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Instance ( model Class , Ġconstructor , Ġcontroller . handle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . setTag If Absent ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAbstract Saved State ViewModel Factory . TAG _ SA VED _ STATE _ HANDLE _ CONTROLLER , Ġcontroller ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthe Ġgiven Ġmodel Class Ġdoes Ġnot Ġhave Ġa Ġclassname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel > Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠViewModel Provider Ġcalls Ġcorrect Ġcreate Ġthat Ġsupport Ġsame Ġmodel Class Ġwith Ġdifferent Ġkeys ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġa Ġdeveloper Ġmanually Ġcalls Ġthis Ġmethod , Ġthere Ġis Ġno Ġ" key " Ġin Ġpicture , Ġso Ġfactory ĊĠĠĠĠĠĠĠ Ġ// Ġsimply Ġuses Ġclassname Ġinternally Ġas Ġas Ġkey . ĊĠĠĠĠĠĠĠ Ġval Ġcanonical Name Ġ= Ġmodel Class . canonical Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Local Ġand Ġanonymous Ġclasses Ġcan Ġnot Ġbe ĠView Models ") ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate ( canonical Name , Ġmodel Class ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ hide ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) ĊĠĠĠ Ġoverride Ġfun Ġon Re query ( viewModel : ĠViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġneeded Ġonly Ġfor Ġlegacy Ġpath ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLegacy Saved State Handle Controller . attach Handle IfNeeded ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State Registry , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġ< T Ġ: ĠViewModel ?> Ġnew Instance ( ĊĠĠĠ Ġmodel Class : ĠClass < T >, ĊĠĠĠ Ġconstructor : ĠConstructor < T >, ĊĠĠĠ Ġvar arg Ġparams : ĠAny Ċ ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor . newInstance (* params ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Failed Ġto Ġaccess Ġ$ model Class ", Ġe ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInstanti ation Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" A Ġ$ model Class Ġcannot Ġbe Ġinstantiated .", Ġe ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" An Ġexception Ġhappened Ġin Ġconstructor Ġof Ġ$ model Class ", Ġe . cause ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠAND ROID _ VIEW MODEL _ SIGNATURE Ġ= ĠlistOf < Class < *> >( ĊĠĠĠ ĠApplication :: class . java , ĊĠĠĠ ĠSaved State Handle :: class . java Ċ ) Ċ private Ġval ĠVIEW MODEL _ SIGNATURE Ġ= ĠlistOf < Class < *> >( Saved State Handle :: class . java ) Ċ Ċ // Ġit Ġis Ġdone Ġinstead Ġof Ġget Constructor (), Ġbecause Ġget Constructor () Ġthrows Ġan Ġexception Ċ // Ġif Ġthere Ġis Ġno Ġsuch Ġconstructor , Ġwhich Ġis Ġexpensive Ċ internal Ġfun Ġ< T > Ġfind Matching Constructor ( ĊĠĠĠ Ġmodel Class : ĠClass < T >, ĊĠĠĠ Ġsignature : ĠList < Class <* >> Ċ ): ĠConstructor < T >? Ġ{ ĊĠĠĠ Ġfor Ġ( constructor Ġin Ġmodel Class . construct ors ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Types Ġ= Ġconstructor . parameter Types . toList () ĊĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ== Ġparameter Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconstructor Ġas ĠConstructor < T > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( signature . size Ġ== Ġparameter Types . size Ġ&& Ġparameter Types . contains All ( signature )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Class Ġ${ model Class . simple Name } Ġmust Ġhave Ġparameters Ġin Ġthe Ġproper Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" order : Ġ$ signature " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ