package Ġco . nums . intellij . a em . test . junit . extensions Ċ Ċ import Ġorg . junit . jupiter . api . extension .* Ċ import Ġorg . junit . jupiter . api . extension . Extension Context . Namespace . create Ċ import Ġorg . mockito .* Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġjava . lang . reflect . Parameter Ċ Ċ class ĠMockito Extension Ġ: ĠTest Instance Post Processor , ĠParameter Resolver Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġpost Process Test Instance ( test Instance : ĠAny , Ġcontext : ĠExtension Context ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( test Instance ) ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Parameter ( parameter Context : ĠParameter Context , Ġextension Context : ĠExtension Context ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Context . parameter . is Annotation Present ( Mock :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Parameter ( parameter Context : ĠParameter Context , Ġextension Context : ĠExtension Context ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Mock ( parameter Context . parameter , Ġextension Context ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Mock ( parameter : ĠParameter , Ġextension Context : ĠExtension Context ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Type Ġ= Ġparameter . type ĊĠĠĠĠĠĠĠ Ġval Ġmocks Ġ= Ġextension Context . get Store ( create ( Mockito Extension :: class . java , Ġmock Type )) ĊĠĠĠĠĠĠĠ Ġval Ġmock Name Ġ= Ġget Mock Name ( parameter ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( mock Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmocks . get Or Compute If Absent ( mock Name ) Ġ{ Ġmock ( mock Type , Ġmock Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmocks . get Or Compute If Absent ( mock Type . canonical Name ) Ġ{ Ġmock ( mock Type ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mock Name ( parameter : ĠParameter ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexplicit Mock Name Ġ= Ġparameter . getAnnotation ( Mock :: class . java ). name . trim () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! explicit Mock Name . isEmpty () Ġ-> Ġexplicit Mock Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter . is Name Present Ġ-> Ġparameter . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ