package Ġau . com . red cre w . apis dk creator . test Ċ Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . jupiter . params . provider . Arguments Ċ import Ġorg . junit . jupiter . params . provider . Arguments Provider Ċ import Ġorg . junit . jupiter . params . support . Annotation Consumer Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Stream Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . full . comp anion Object Ċ import Ġkotlin . reflect . full . comp anion Object Instance Ċ import Ġkotlin . reflect . full . functions Ċ Ċ class ĠFunction Source Arguments Provider Ġ: ĠArguments Provider , ĠAnnotation Consumer < Function Source > Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfunction Name : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Arguments ( context : ĠExtension Context ): ĠStream < Arguments >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Companion Object ( Optional . of ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap (:: get Function ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap (:: getValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠIllegalArgumentException (" Failed Ġto Ġload Ġtest Ġarguments ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( function Source : ĠFunction Source ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction Name Ġ= Ġfunction Source . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Companion Object ( context : ĠOptional < Extension Context >): ĠOptional < Pair < K Class <* >, ĠAny ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . flatMap Ġ{ Ġec Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompanion Ġ= Ġec . test Class . map Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . kotlin . comp anion Object ?. let Ġ{ ĠPair ( it , Ġcls . kotlin . comp anion Object Instance ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion . isPresent Ġ-> Ġcompanion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġget Companion Object ( ec . parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġget Function ( data : ĠPair < K Class <* >, ĠAny ?> ): ĠOptional < Pair < K Function < Stream < Arguments >>, ĠAny ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfn Ġ= Ġdata . first . functions . find Ġ{ Ġfn Ġ-> Ġfn . name Ġ== Ġthis . function Name Ġ} Ġas ĠK Function < Stream < Arguments >> ? ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfn ?. let Ġ{ ĠOptional . of ( Pair ( fn , Ġdata . second )) Ġ} Ġ?: ĠOptional . empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetValue ( data : ĠPair < K Function < Stream < Arguments >>, ĠAny ?> ): ĠOptional < Stream < Arguments >> Ġ= ĊĠĠĠĠĠĠĠĠ ĠOptional . of ( data . first . call ( data . second )) Ċ } Ċ