/** Ċ Ġ* Ġ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 . generic Type Ċ import Ġde . quantum maid . reflect maid . GenericType . Companion . wildcard Ċ import Ġde . quantum maid . reflect maid . Reflect M aid . Companion . a Reflect M aid Ċ import Ġde . quantum maid . reflect maid . queries . Query NotFoundException Ċ import Ġde . quantum maid . reflect maid . queries . Query Path . Companion . field Ċ import Ġde . quantum maid . reflect maid . queries . Query Path . Companion . method Ċ import Ġde . quantum maid . reflect maid . queries . Typed Getter Ċ import Ġde . quantum maid . reflect maid . queries . Typed Setter Ċ import Ġde . quantum maid . reflect maid . queries . get Ċ import Ġde . quantum maid . reflect maid . util . with Exception Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Core Matchers . contains String Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠInner ( var Ġinner Field : ĠString , Ġ@ Jvm Field Ġvar Ġinner Public Field : ĠString , Ġprivate Ġval Ġprivate Field : ĠString ) Ġ{ ĊĠĠĠ Ġconstructor ( field : ĠString ) Ġ: Ġthis ( field , Ġfield , Ġfield ) ĊĊĠĠĠ Ġfun Ġinner Method () Ġ= Ġ" foo " ĊĊĠĠĠ Ġfun Ġvoid Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprivate Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmethod With Parameters ( string : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠO uter ( val Ġouter Field : ĠInner ) Ġ{ ĊĠĠĠ Ġfun Ġouter Method () Ġ= Ġouter Field ĊĊĠĠĠ Ġfun Ġover loaded Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġover loaded Method ( string : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠSup ertype Ċ class ĠSub type Ġ: ĠSup ertype Ċ Ċ class ĠClass With Hierarchical ReturnType Ġ{ ĊĠĠĠ Ġfun Ġmethod (): ĠSub type Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠAbstract Type Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġabstract Method () Ċ } Ċ Ċ open Ġclass ĠOpen Class ( val Ġfield : ĠString ) Ġ{ ĊĠĠĠ Ġfun Ġfoo () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠInherit ing Class Ġ: ĠOpen Class (" foo ") Ċ Ċ class ĠQuery Specs Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Public Field Can Be Qu er ied Based On Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" inner Public Field ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Public Field ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠInner (" foo ") ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( inner ), Ġ` is ` (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġsetter Ġ= Ġresult . create Setter () ĊĠĠĠĠĠĠĠ Ġsetter . set ( inner , Ġ" abc ") ĊĠĠĠĠĠĠĠ ĠassertThat ( inner . inner Public Field , Ġ` is ` (" abc ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Kotlin Property Can Be Qu er ied Based On Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" inner Field ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Field ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠInner (" foo ") ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( inner ), Ġ` is ` (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġsetter Ġ= Ġresult . create Setter () ĊĠĠĠĠĠĠĠ Ġsetter . set ( inner , Ġ" abc ") ĊĠĠĠĠĠĠĠ ĠassertThat ( inner . inner Field , Ġ` is ` (" abc ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Field Can Be Qu er ied Based On Name And Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" inner Field ", ĠString :: class )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Field ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠInner (" foo ") ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter : ĠTyped Getter < String > Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( inner ), Ġ` is ` (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġsetter : ĠTyped Setter < String > Ġ= Ġresult . create Setter () ĊĠĠĠĠĠĠĠ Ġsetter . set ( inner , Ġ" abc ") ĊĠĠĠĠĠĠĠ ĠassertThat ( inner . inner Field , Ġ` is ` (" abc ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnested Field Can Be Qu er ied Based On Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" outer Field "). field (" inner Field ")) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Field ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġouter Ġ= ĠO uter ( Inner (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( outer ), Ġ` is ` (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġsetter Ġ= Ġresult . create Setter () ĊĠĠĠĠĠĠĠ Ġsetter . set ( outer , Ġ" abc ") ĊĠĠĠĠĠĠĠ ĠassertThat ( outer . outer Field . inner Field , Ġ` is ` (" abc ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnested Field Can Be Qu er ied Based On Name And Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" outer Field ", ĠInner :: class ). field (" inner Field ", ĠString :: class )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Field ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġouter Ġ= ĠO uter ( Inner (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter : ĠTyped Getter < String > Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( outer ), Ġ` is ` (" foo ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġsetter : ĠTyped Setter < String > Ġ= Ġresult . create Setter () ĊĠĠĠĠĠĠĠ Ġsetter . set ( outer , Ġ" abc ") ĊĠĠĠĠĠĠĠ ĠassertThat ( outer . outer Field . inner Field , Ġ` is ` (" abc ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Method Can Be Qu er ied Based On Name () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" inner Method ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" inner Method ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠInner (" foo ") ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( inner ), Ġ` is ` (" foo ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Method Can Be Qu er ied Based On Name And Void () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" void Method ", ĠNothing :: class )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" void Method ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Method Can Be Qu er ied Based On Name And ReturnType () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" inner Method ", ĠString :: class )) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" inner Method ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= ĠInner (" foo ") ĊĊĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġresult . create Getter () ĊĠĠĠĠĠĠĠ ĠassertThat ( getter . get ( inner ), Ġ` is ` (" foo ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdirect Method Can Be Qu er ied Based On Name And Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" method With Parameters ", ĠlistOf ( generic Type < String >() ))) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" method With Parameters ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnested Method Can Be Qu er ied () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" outer Method "). method (" inner Method ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" inner Method ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnested Mixed Method And Field Can Be Qu er ied () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" outer Field "). method (" inner Method ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" inner Method ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfield Can Be Qu er ied By Reference () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype [ Inner :: inner Field ] ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" inner Field ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmethod Can Be Qu er ied By Reference () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype [ Inner :: inner Method ] ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" inner Method ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreturn TypeOf Method Can Be Specified As Sup ertype () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Class With Hierarchical ReturnType >() ĊĠĠĠĠĠĠĠ Ġtype . query ( method (" method ", ĠSup ertype :: class )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfield NotFound G ives ErrorMessage () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( field (" unknown ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ unknown :* ] Ġin Ġtype Ġde . quantum maid . reflect maid . Outer ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmethod NotFound G ives ErrorMessage () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" unknown ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ unknown (* ): * ] Ġin Ġtype Ġde . quantum maid . reflect maid . Outer ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot Tra verse Method With Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" method With Parameters "). field (" abc ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġcontinue Ġmatching Ġquery Ġ[ abc :* ] Ġfrom Ġ' fun Ġmethod With Parameters ( string : ĠString )' ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot Tra verse Void Method () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" void Method "). field (" abc ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġcontinue Ġmatching Ġquery Ġ[ abc :* ] Ġfrom Ġ' fun Ġvoid Method () '") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreason Can Be Specified () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" void Method "). field (" abc "), Ġ" foo ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" reason : Ġfoo ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġarray Cannot Be Qu er ied () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Array < String >>() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Unsupported OperationException > Ġ{ Ġtype . query ( method (" void Method ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" can Ġonly Ġrun Ġqueries Ġon Ġclasses Ġbut Ġtried Ġto Ġrun Ġquery Ġon Ġjava . lang . String [] ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwild cards Cannot Be Qu er ied () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve ( wildcard ()) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Unsupported OperationException > Ġ{ Ġtype . query ( method (" void Method ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" can Ġonly Ġrun Ġqueries Ġon Ġclasses Ġbut Ġtried Ġto Ġrun Ġquery Ġon Ġ? ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġquery NotFound If Multiple Methods Match () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" over loaded Method ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ over loaded Method (* ): * ] Ġin Ġtype Ġde . quantum maid . reflect maid . Outer ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġabstract Methods Are Ignored () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Abstract Type >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" abstract Method ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ abstract Method (* ): * ] Ġin Ġtype Ġde . quantum maid . reflect maid . Abstract Type ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinherited Method Can Be Found () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inherit ing Class >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" foo ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Method . name , Ġ` is ` (" foo ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinherited Field Can Be Found () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inherit ing Class >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" field ")) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . resolved Field . name , Ġ` is ` (" field ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnon Public Methods Are Ignored () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( method (" private Method ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ private Method (* ): * ] Ġin Ġtype Ġde . quantum maid . reflect maid . Inner ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnon Public Fields Are Ignored () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Query NotFoundException > Ġ{ Ġtype . query ( field (" private Field ")) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġfind Ġquery Ġ[ private Field :* ] Ġin Ġtype Ġde . quantum maid . reflect maid . Inner ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsetter For Final Field Cannot Be Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Outer >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( field (" outer Field ")) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Unsupported OperationException > Ġ{ Ġresult . create Setter () Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġcreate Ġsetter Ġfor Ġfield Ġ' private Ġfinal ĠInner Ġouter Field ' Ġbecause Ġit Ġis Ġfinal ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot Create Getter For Method With Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" method With Parameters ")) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Unsupported OperationException > Ġ{ Ġresult . create Getter () Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" cannot Ġcreate Ġgetter Ġfrom Ġmethod Ġ' fun Ġmethod With Parameters ( string : ĠString )' Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ public Ġfinal Ġvoid Ġde . quantum maid . reflect maid . Inner . method With Parameters ( java . lang . String )] ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcannot Create Setter For Method Without Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflect M aid Ġ= Ġa Reflect M aid () ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġreflect M aid . resolve < Inner >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtype . query ( method (" inner Method ")) ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= Ġwith Exception < Unsupported OperationException > Ġ{ Ġresult . create Setter () Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains String (" unable Ġto Ġcreate Ġsetter Ġfrom Ġmethod Ġ' fun Ġinner Method (): ĠString ' Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ public Ġfinal Ġjava . lang . String Ġde . quantum maid . reflect maid . Inner . inner Method ()] ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ