package Ġtech . k zen . lib . common . reflect Ċ Ċ import Ġtech . k zen . lib . platform . ClassName ĊĊ Ċ // ĠTODO : Ġmake Ġthread safe , Ġsee Ġhttps :// dis cuss . kotlin lang . org / t / replacement - for - synchronized / 1 1 2 4 0 / 3 Ċ class ĠReflection Registry : ĠClass Mirror Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Name Ġ= ĠReflection Registry :: class . simple Name !! ĊĠĠĠĠĠĠĠ Ġval Ġqualified Name Ġ= Ġ" tech . k zen . lib . common . reflect .$ simple Name " ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= ĠClass Name ( qualified Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġglobal Ġ= ĠReflection Registry () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġprivate Ġval Ġregistry Ġ= Ġmutable Map Of < ClassName , ĠClass Reflection >() ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġfun Ġget ( className : ĠClass Name ): ĠClass Reflection ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġregistry [ className ] ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġput ( className : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Argument Names : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Function : Ġ( List < Any ?> ) Ġ-> ĠAny ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġregistry [ ClassName ( className )] Ġ= ĠClass Reflection ( constructor Argument Names , Ġconstructor Function ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġoverride Ġfun Ġcontains ( className : ĠClass Name ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget ( className ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġconstructor Argument Names ( className : ĠClass Name ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget ( className )?. constructor Argument Names ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Not Ġfound : Ġ$ className ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( className : ĠClass Name , Ġconstructor Arguments : ĠList < Any ?> ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget ( className )?. constructor Function ?. invoke ( constructor Arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Not Ġfound : Ġ$ className ") ĊĠĠĠ Ġ} Ċ }