package Ġpw . bin om . strong Ċ Ċ import Ġpw . bin om . strong . exceptions . Bean Already Defined Exception Ċ import Ġkotlin . reflect . K Class Ċ Ċ internal Ġclass ĠInternal Def iner Ġ: ĠDef iner Ġ{ ĊĠĠĠ Ġprivate Ġval Ġalready Defined Ġ= ĠHashMap < String , ĠThrowable >() ĊĠĠĠ Ġprivate Ġval Ġdefinitions Ġ= ĠArrayList < Definition >() ĊĠĠĠ Ġfun ĠgetLast Definitions (): ĠList < Definition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠArrayList ( definitions ) ĊĠĠĠĠĠĠĠ Ġdefinitions . clear () ĊĠĠĠĠĠĠĠ Ġreturn Ġl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġbean ( ĊĠĠĠĠĠĠĠ Ġclazz : ĠK Class < T >, ĊĠĠĠĠĠĠĠ Ġprimary : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġname : ĠString ?, ĊĠĠĠĠĠĠĠ Ġif NotExist : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġbean : Ġ( Strong ) Ġ-> ĠT ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdef Name Ġ= Ġclazz . gen Default Name () ĊĠĠĠĠĠĠĠ Ġval Ġdef Ex Ġ= Ġalready Defined [ name ] ĊĠĠĠĠĠĠĠ Ġif Ġ( def Ex Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBean Already Defined Exception ( bean Name Ġ= Ġdef Name , Ġcause Ġ= Ġdef Ex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalready Defined [ def Name ] Ġ= ĠBean Already Defined Exception ( bean Name Ġ= Ġdef Name ) ĊĠĠĠĠĠĠĠ Ġdefinitions Ġ+= ĠDefinition ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġclazz . gen Default Name (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġclazz , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ= Ġbean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Ġ= Ġprimary , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }