/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠRichard ĠH aus wal d Ġ- Ġhttps :// quantum maid . de /. Ċ Ġ* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġde . quantum maid . reflect maid Ċ Ċ import Ġde . quantum maid . reflect maid . GenericType . Companion . from Reflection Type Ċ import Ġde . quantum maid . reflect maid . Type Variable Name . Companion . type Variable Name Ċ import Ġde . quantum maid . reflect maid . resolved type . ArrayType Ċ import Ġde . quantum maid . reflect maid . resolved type . ClassType Ċ import Ġde . quantum maid . reflect maid . resolved type . ClassType . Companion . from Class With Gener ics Ċ import Ġde . quantum maid . reflect maid . resolved type . ClassType . Companion . from Class Without Gener ics Ċ import Ġde . quantum maid . reflect maid . resolved type . Resolved Type Ċ import Ġde . quantum maid . reflect maid . resolved type . W ild carded Type Ċ import Ġjava . lang . reflect .* Ċ Ċ internal Ġfun Ġresolve Type ( ĊĠĠĠ Ġreflect M aid : ĠReflect M aid , ĊĠĠĠ Ġtype : ĠType , ĊĠĠĠ Ġcontext : ĠClass Type Ċ ): ĠResolved Type Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠClass < *> Ġ-> Ġresolve Class ( reflect M aid , Ġtype ) ĊĠĠĠĠĠĠĠ Ġis ĠType Variable < *> Ġ-> Ġresolve Type Variable ( type , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġis ĠParameter ized Type Ġ-> Ġresolve Parameterized Type ( reflect M aid , Ġtype , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġis ĠGeneric ArrayType Ġ-> Ġresolve Generic ArrayType ( reflect M aid , Ġtype , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġis ĠW ildcard Type Ġ-> Ġresolve Wildcard ( reflect M aid , Ġtype , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupported Jvm Feature In Type Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġ' Type ' Ġimplementation Ġby Ġclass Ġ'${ type . java Class }' Ġon Ġobject Ġ'$ type '" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġresolve Class ( ĊĠĠĠ Ġreflect M aid : ĠReflect M aid , ĊĠĠĠ Ġclazz : ĠClass <* >, Ċ ): ĠResolved Type Ġ{ ĊĠĠĠ Ġval Ġraw Ġ= Ġreflect M aid . raw Class Cache . raw Class For ( clazz ) ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġraw . isArray () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Type Ġ= Ġreflect M aid . resolve ( raw . component Type () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArray Type ( component Type , Ġreflect M aid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġraw . type Parameters (). isNotEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġany Ġ= Ġreflect M aid . resolve ( Any :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Type Parameters Ġ= Ġclazz . type Parameters . associate Ġ{ Ġtype Variable Name ( it ) Ġto Ġany Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Class With Gener ics ( reflect M aid , Ġraw , Ġempty Type Parameters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Class Without Gener ics ( reflect M aid , Ġraw ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġresolve Type Variable ( ĊĠĠĠ Ġtype Variable : ĠType Variable <* >, ĊĠĠĠ Ġfull Type : ĠClass Type Ċ ): ĠResolved Type Ġ{ ĊĠĠĠ Ġval Ġtype Variable Name Ġ= Ġtype Variable Name ( type Variable ) ĊĠĠĠ Ġreturn Ġfull Type . resolve Type Variable ( type Variable Name ) Ċ } Ċ Ċ private Ġfun Ġresolve Parameterized Type ( ĊĠĠĠ Ġreflect M aid : ĠReflect M aid , ĊĠĠĠ Ġparameter ized Type : ĠParameter ized Type , ĊĠĠĠ Ġcontext : ĠClass Type Ċ ): ĠResolved Type Ġ{ ĊĠĠĠ Ġval Ġraw Type Ġ= Ġreflect M aid . raw Class Cache . raw Class For ( parameter ized Type . raw Type Ġas ĠClass <* >) ĊĠĠĠ Ġval Ġtype Variable Names Ġ= Ġraw Type . type Parameters (). map Ġ{ Ġtype Variable Name ( it ) Ġ} ĊĠĠĠ Ġval Ġactual Type Arguments Ġ= Ġparameter ized Type . actual Type Arguments ĊĠĠĠ Ġval Ġtype Parameters : ĠMutable Map < Type Variable Name , ĠResolved Type > Ġ= ĠHashMap ( actual Type Arguments . size ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġactual Type Arguments . indices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Type Argument Ġ= Ġreflect M aid . resolve ( from Reflection Type < Any >( actual Type Arguments [ i ], Ġcontext )) ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtype Variable Names [ i ] ĊĠĠĠĠĠĠĠ Ġtype Parameters [ name ] Ġ= Ġresolved Type Argument ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfrom Class With Gener ics ( reflect M aid , Ġraw Type , Ġtype Parameters ) Ċ } Ċ Ċ private Ġfun Ġresolve Generic ArrayType ( ĊĠĠĠ Ġreflect M aid : ĠReflect M aid , ĊĠĠĠ Ġgeneric ArrayType : ĠGeneric ArrayType , ĊĠĠĠ Ġcontext : ĠClass Type Ċ ): ĠArray Type Ġ{ ĊĠĠĠ Ġval Ġcomponent Type Ġ= Ġgeneric ArrayType . generic ComponentType ĊĠĠĠ Ġval Ġfull ComponentType Ġ= Ġresolve Type ( reflect M aid , Ġcomponent Type , Ġcontext ) ĊĠĠĠ Ġreturn ĠArray Type ( full ComponentType , Ġreflect M aid ) Ċ } Ċ Ċ private Ġfun Ġresolve Wildcard ( ĊĠĠĠ Ġreflect M aid : ĠReflect M aid , ĊĠĠĠ Ġtype : ĠW ildcard Type , ĊĠĠĠ Ġcontext : ĠClass Type Ċ ): ĠResolved Type Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( type . lower Bounds . isEmpty () Ġ&& Ġtype . upper Bounds . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupper Bound Ġ= Ġtype . upper Bounds [ 0 ] ĊĠĠĠĠĠĠĠ Ġresolve Type ( reflect M aid , Ġupper Bound , Ġcontext ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠW ild carded Type () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUnsupported Jvm Feature In Type Exception ( message : ĠString ) Ġ: ĠUnsupportedOperationException ( message )