/* Ċ Ġ* Ġ Ġ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 Ġcom . sd ibt . k orm . core . reflect Ċ Ċ import Ġjava . lang . reflect .* Ċ Ċ class ĠType Parameter Resolver Ġ Ġ{ ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġfield Ġtype Ġas Ġ[ Type ]. ĠIf Ġit Ġhas Ġtype Ġparameters Ġin Ġthe Ġdeclaration ,< br ></ br > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġthey Ġwill Ġbe Ġresolved Ġto Ġthe Ġactual Ġruntime Ġ[ Type ] s . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve FieldType ( field : ĠField , Ġsrc Type : ĠType ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldType Ġ= Ġfield . generic Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaring Class Ġ= Ġfield . decl aring Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolve Type ( fieldType , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġreturn Ġtype Ġof Ġthe Ġmethod Ġas Ġ[ Type ]. ĠIf Ġit Ġhas Ġtype Ġparameters Ġin Ġthe Ġdeclaration ,< br ></ br > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġthey Ġwill Ġbe Ġresolved Ġto Ġthe Ġactual Ġruntime Ġ[ Type ] s . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve ReturnType ( method : ĠMethod , Ġsrc Type : ĠType ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġmethod . generic ReturnType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaring Class Ġ= Ġmethod . decl aring Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolve Type ( returnType , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġparameter Ġtypes Ġof Ġthe Ġmethod Ġas Ġan Ġarray Ġof Ġ[ Type ] s . ĠIf Ġthey Ġhave Ġtype Ġparameters Ġin Ġthe Ġdeclaration ,< br ></ br > ĊĠĠĠĠĠĠĠĠ Ġ* Ġ* ĠĠĠĠĠĠĠĠ Ġthey Ġwill Ġbe Ġresolved Ġto Ġthe Ġactual Ġruntime Ġ[ Type ] s . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġresolve Param Types ( method : ĠMethod , Ġsrc Type : ĠType ): ĠArray < Type ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Types Ġ= Ġmethod . generic Parameter Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaring Class Ġ= Ġmethod . decl aring Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠarrayOf Null s < Type >( param Types . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġparam Types . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġresolve Type ( param Types [ i ], Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Type ( type : ĠType , Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠType Variable <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolve Type Var ( type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolve Parameterized Type ( type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġis ĠGeneric ArrayType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresolve Generic ArrayType ( type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Generic ArrayType ( generic ArrayType : ĠGeneric ArrayType , Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Type Ġ= Ġgeneric ArrayType . generic ComponentType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresolved ComponentType : ĠType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Type Ġis ĠType Variable <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolved ComponentType Ġ= Ġresolve Type Var ( component Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( component Type Ġis ĠGeneric ArrayType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolved ComponentType Ġ= Ġresolve Generic ArrayType ( component Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( component Type Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolved ComponentType Ġ= Ġresolve Parameterized Type ( component Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolved ComponentType Ġis ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( resolved ComponentType Ġas ĠClass < *> ?, Ġ 0 ). java Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGeneric ArrayType Impl ( resolved ComponentType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Parameterized Type ( parameter ized Type : ĠParameter ized Type , Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠParameter ized Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Type Ġ= Ġparameter ized Type . raw Type Ġas ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Args Ġ= Ġparameter ized Type . actual Type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠarrayOf Null s < Type >( type Args . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtype Args . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Args [ i ] Ġis ĠType Variable <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ i ] Ġ= Ġresolve Type Var ( type Args [ i ] Ġas ĠType Variable <* >, Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Args [ i ] Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ i ] Ġ= Ġresolve Parameterized Type ( type Args [ i ] Ġas ĠParameter ized Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Args [ i ] Ġis ĠW ildcard Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ i ] Ġ= Ġresolve Wildcard Type ( type Args [ i ] Ġas ĠW ildcard Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs [ i ] Ġ= Ġtype Args [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠParameter ized Type Impl ( raw Type , Ġnull , Ġargs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Wildcard Type ( wildcard Type : ĠW ildcard Type , Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlower Bounds Ġ= Ġresolve Wildcard Type Bounds ( wildcard Type . lower Bounds , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupper Bounds Ġ= Ġresolve Wildcard Type Bounds ( wildcard Type . upper Bounds , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠW ildcard Type Impl ( lower Bounds , Ġupper Bounds ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Wildcard Type Bounds ( bounds : ĠArray < Type >, Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠArray < Type ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠarrayOf Null s < Type >( bounds . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġbounds . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bounds [ i ] Ġis ĠType Variable <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġresolve Type Var ( bounds [ i ] Ġas ĠType Variable <* >, Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bounds [ i ] Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġresolve Parameterized Type ( bounds [ i ] Ġas ĠParameter ized Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bounds [ i ] Ġis ĠW ildcard Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġresolve Wildcard Type ( bounds [ i ] Ġas ĠW ildcard Type , Ġsrc Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ i ] Ġ= Ġbounds [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġresolve Type Var ( type Var : ĠType Variable <* >, Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass < *> ): ĠType Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclazz : ĠClass < *> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( src Type Ġis ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġsrc Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( src Type Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġsrc Type . raw Type Ġas ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The Ġ 2 nd Ġarg Ġmust Ġbe ĠClass Ġor ĠParameter ized Type , Ġbut Ġwas : Ġ" Ġ+ Ġsrc Type . java Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz Ġ== Ġdeclaring Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġtype Var . bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bounds . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbounds [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAny :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuperclass Ġ= Ġclazz . generic Super class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġscan Super Types ( type Var , Ġsrc Type , Ġdeclaring Class , Ġclazz , Ġsuperclass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuper Interfaces Ġ= Ġclazz . generic Interfaces ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( super Interface Ġin Ġsuper Interfaces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġscan Super Types ( type Var , Ġsrc Type , Ġdeclaring Class , Ġclazz , Ġsuper Interface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAny :: class . java ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġscan Super Types ( type Var : ĠType Variable <* >, Ġsrc Type : ĠType , Ġdeclaring Class : ĠClass <* >, Ġclazz : ĠClass <* >, Ġsuperclass : ĠType ?): ĠType ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult : ĠType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( super class Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent As Type Ġ= Ġsuperclass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent As Class Ġ= Ġparent As Type . raw Type Ġas ĠClass < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decl aring Class Ġ== Ġparent As Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Args Ġ= Ġparent As Type . actual Type Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared Type Vars Ġ= Ġdeclaring Class . type Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdeclared Type Vars . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declared Type Vars [ i ] Ġ=== Ġtype Var ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Args [ i ] Ġis ĠType Variable <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Params Ġ= Ġclazz . type Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġtype Params . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Params [ j ] Ġ=== Ġtype Args [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( src Type Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġsrc Type . actual Type Arguments [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtype Args [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( decl aring Class . isAssignableFrom ( parent As Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresolve Type Var ( type Var , Ġparent As Type , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( super class Ġis ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decl aring Class . isAssignableFrom ( super class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresolve Type Var ( type Var , Ġsuperclass , Ġdeclaring Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ