package Ġfr . xg ou chet . el my r . junit 5 . params Ċ Ċ import Ġfr . xg ou chet . el my r . Forge Ċ import Ġfr . xg ou chet . el my r . annotation . Pair F org ery Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . lang . reflect . Wildcard Type Ċ import Ġorg . junit . jupiter . api . extension . Extension Context Ċ import Ġorg . junit . jupiter . api . extension . Parameter Context Ċ Ċ internal Ġobject ĠPair F org ery Param Resolver Ġ: ĠF org ery Resolver Ġ{ ĊĊĠĠĠ Ġ// Ġregion ĠF org ery Resolver ĊĊĠĠĠ Ġ/** Ġ@ inheritdoc Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsupports Parameter ( ĊĠĠĠĠĠĠĠ Ġparameter Context : ĠParameter Context , ĊĠĠĠĠĠĠĠ Ġextension Context : ĠExtension Context ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparameter Context . is Annotated ( Pair F org ery :: class . java ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair :: class . java . isAssignableFrom ( parameter Context . parameter . type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresolve Parameter ( ĊĠĠĠĠĠĠĠ Ġparameter Context : ĠParameter Context , ĊĠĠĠĠĠĠĠ Ġextension Context : ĠExtension Context , ĊĠĠĠĠĠĠĠ Ġfor ge : ĠFor ge ĊĠĠĠ Ġ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġparameter Context . find Annotation ( Pair F org ery :: class . java ). get () ĊĠĠĠĠĠĠĠ Ġval Ġpair Type Ġ= Ġparameter Context . parameter . parameter ized Type ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Pair Parameter ( annotation , Ġpair Type , Ġfor ge ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĊĠĠĠ Ġ// Ġregion ĠInternal ĊĊĠĠĠ Ġinternal Ġfun Ġresolve Pair Parameter ( ĊĠĠĠĠĠĠĠ Ġannotation : ĠPair F org ery , ĊĠĠĠĠĠĠĠ Ġtype : ĠType , ĊĠĠĠĠĠĠĠ Ġfor ge : ĠFor ge ĊĠĠĠ Ġ): ĠPair < Any ?, ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpair Type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġwhile Ġ( pair Type Ġis ĠW ildcard Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair Type Ġ= Ġpair Type . upper Bounds [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck ( pair Type Ġis ĠParameter ized Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Annotation Ġ= Ġannotation . first ĊĠĠĠĠĠĠĠ Ġval Ġfirst Type Ġ= Ġpair Type . actual Type Arguments [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġsecond Annotation Ġ= Ġannotation . second ĊĠĠĠĠĠĠĠ Ġval Ġsecond Type Ġ= Ġpair Type . actual Type Arguments [ 1 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġfor ged First Ġ= ĠAdvanced F org ery Param Resolver . resolve Advanced Parameter ( first Annotation , Ġfirst Type , Ġfor ge ) ĊĠĠĠĠĠĠĠ Ġval Ġfor ged Second Ġ= ĠAdvanced F org ery Param Resolver . resolve Advanced Parameter ( second Annotation , Ġsecond Type , Ġfor ge ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfor ged First Ġto Ġfor ged Second ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region Ċ } Ċ