package Ġeu . dream code . kotlin shell . inject čĊč Ċ import Ġkotlin . reflect . K Class č Ċ import Ġkotlin . reflect . K Function čĊč Ċ internal Ġclass ĠInjection Resolver ( čĊĠĠĠ Ġval Ġtype Registry : ĠType Registry č Ċ ) Ġ{ čĊĠĠĠ Ġinternal Ġfun Ġ< T Ġ: ĠAny > Ġfind Res olvable Constructor ( clazz : ĠK Class < T >): ĠK Function < T >? Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġthis . find E asi est Constructor ( clazz ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/* internal Ġfun Ġ< T Ġ: ĠAny > Ġcreate Instance ( clazz : ĠK Class < T >): ĠT Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġthis . find E asi est Constructor ( clazz ) čĊĠĠĠ Ġ}*/ čĊčĊĠĠĠ Ġ/* čĊĠĠĠĠ Ġ* ĠSimply Ġchoose Ġthe Ġconstructor Ġwith Ġthe Ġleast Ġparameters . ĠThis Ġcan Ġlead Ġto Ġproblems Ġlater Ġsince Ġit Ġis Ġa Ġvery Ġprimitive čĊĠĠĠĠ Ġ* Ġway Ġof Ġdefining Ġ" easy ". ĠThere Ġcan Ġbe Ġcases Ġwhere Ġwe Ġhave Ġall Ġthe Ġbe ans Ġrequired Ġfor Ġa Ġ 2 - arg - constructor Ġwhile Ġnot čĊĠĠĠĠ Ġ* Ġhaving Ġthe Ġright Ġbean Ġfor Ġa Ġ 1 - arg - constructor Ġso Ġresolution Ġwill Ġfail Ġup Ġthe Ġchain , Ġbut Ġthat 's Ġto Ġbe Ġfixed Ġat Ġa Ġlater čĊĠĠĠĠ Ġ* Ġpoint . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > Ġfind E asi est Constructor ( clazz : ĠK Class < T >) Ġ= čĊĠĠĠĠĠĠĠ Ġclazz . construct ors . min By Ġ{ Ġit . parameters . size Ġ} !! č Ċ } čĊčĊ čĊčĊčĊ