package Ġcom . wal d . main ject . inject . extension . impl Ċ Ċ import Ġcom . wal d . main ject . inject . extension . Constructor Resolver Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . full . primary Constructor ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġvk os ol ap ov Ċ Ġ* Ġ@ since Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Prior it ized Constructor Resolver Ġ: ĠConstructor Resolver Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġresolve ( owner Class : ĠK Class < T >, Ġproposed Construct ors : ĠList < K Function < T >> ): ĠK Function < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpriorit ized Construct ors Ġ= Ġproposed Construct ors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġis Prior it ized ( owner Class , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriorit ized Construct ors . size Ġ== Ġ 1 Ġ-> Ġreturn Ġpriorit ized Construct ors . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriorit ized Construct ors . size Ġ> Ġ 1 Ġ-> Ġerror (" Multiple Ġpriorit ized Ġconstructors Ġfor Ġthe Ġ${ owner Class . simple Name } Ġclass ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprimary Constructor Ġ= Ġowner Class . primary Constructor ?. take If Ġ{ Ġit Ġin Ġproposed Construct ors Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( primary Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprimary Constructor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġno ArgsConstructor Ġ= Ġowner Class . construct ors . filter Ġ{ Ġtrue Ġ}. first OrNull Ġ{ Ġit Ġin Ġproposed Construct ors Ġ} ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( no ArgsConstructor ) Ġ{ Ġ" No Ġconstructors Ġfound Ġfor Ġthe Ġ" Ġ+ Ġowner Class . simple Name Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġno ArgsConstructor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġ< T Ġ: ĠAny > Ġis Prior it ized ( owner Class : ĠK Class < T >, Ġconstructor : ĠK Function < T >): ĠBoolean Ċ }