package Ġio . alice platform . server . extensions Ċ Ċ import Ġio . alice platform . api . Transformer Ċ import Ġio . alice platform . api . extensions . Extensions Provider Ċ import Ġio . alice platform . api . objects . Object Collection Ċ import Ġio . alice platform . api . objects . Provider Ċ import Ġio . alice platform . server . Default Alice Instance Ċ Ċ class ĠExtension Provider Impl ( ĊĠ Ġoverride Ġval Ġalice : ĠDefault Alice Instance Ċ ) Ġ: ĠExtensions Provider Ġ{ ĊĠ Ġprivate Ġval Ġextensions Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠ Ġget () Ġ= Ġextensions . size ĊĠ Ġoverride Ġval ĠisEmpty : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġextensions . isEmpty () ĊĊĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġcreate ( name : ĠString , Ġtype : ĠClass < T >, Ġvar arg Ġvalues : ĠAny ): ĠProvider < T > Ġ= ĊĠĠĠ Ġalice . objects . of Ġ{ ĊĠĠĠĠĠ Ġtype . get Constructor (* values . map Ġ{ Ġit . java Class Ġ}. to Typed Array ()). newInstance ( values ) ĊĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠ Ġif Present Ġ{ ĊĠĠĠĠĠĠĠ Ġregister ( name , Ġit ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġregister ( name : ĠString , Ġvalue : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( extensions . containsKey ( name )) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" This Ġname Ġhas Ġbeen Ġtaken ! Ġ\"$ name \" ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġextensions [ name ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġnamed ( name : ĠString ): ĠProvider < Any > Ġ= ĊĠĠĠ Ġalice . objects . of Ġ{ Ġextensions [ name ] Ġ?: Ġthrow ĠNullPointerException (" No Ġval ued Ġextension Ġpresent ") Ġ} ĊĊĠ Ġoverride Ġfun Ġ< R Ġ: ĠAny > Ġnamed ( name : ĠString , Ġtype : ĠClass < R >): ĠProvider < R > Ġ= ĊĠĠĠ Ġnamed ( name ). map Ġ{ Ġtype . cast ( it ) Ġ} ĊĊĠ Ġoverride Ġfun Ġ< R Ġ: ĠAny > Ġof Type ( type : ĠClass < R >): ĠProvider < R > Ġ= ĊĠĠĠ Ġalice . objects . of Ġ{ ĊĠĠĠĠĠ Ġextensions . values . first OrNull Ġ{ Ġtype . is Instance ( it ) Ġ} ?. let Ġ{ Ġtype . cast ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNullPointerException (" No Ġval ued Ġextension Ġpresent ") ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< R Ġ: ĠAny > Ġmap ( transformer : ĠTransformer < Any , ĠR >): ĠObject Collection < R > Ġ= ĊĠĠĠ Ġalice . objects . list ( extensions . values . map ( transformer :: transform )) ĊĊĠ Ġoverride Ġfun Ġ< R Ġ: ĠAny > Ġflat Map ( transformer : ĠTransformer < Any , ĠIterable < R >> ): ĠObject Collection < R > Ġ= ĊĠĠĠ Ġalice . objects . list ( extensions . values . flatMap ( transformer :: transform )) ĊĊĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Any > Ġ= ĊĠĠĠ Ġextensions . values . iterator () Ċ } Ċ