/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 - 2 0 1 9 ĠThe Ġlg ou 2 w Ġ< lg ou 2 w @ hotmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġ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 . lg ou 2 w . ld k . reflect Ċ Ċ import Ġcom . lg ou 2 w . ld k . common . Bi Function Ċ import Ġcom . lg ou 2 w . ld k . common . Callable Ċ import Ġcom . lg ou 2 w . ld k . common . Function Ċ import Ġcom . lg ou 2 w . ld k . common . Predicate Ċ import Ġcom . lg ou 2 w . ld k . common . let If NotNull Ċ import Ġjava . lang . reflect . Accessible Object Ċ import Ġjava . lang . reflect . Member Ċ import Ġjava . util . regex . Pattern Ċ Ċ /** Ċ Ġ* Ġ## ĠF uzzy Reflect Matcher Ġ( æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ ) Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ F uzzy Reflect ] Ċ Ġ* Ġ@ see Ġ[ F uzzy Reflect Constructor Matcher ] Ċ Ġ* Ġ@ see Ġ[ F uzzy Reflect Method Matcher ] Ċ Ġ* Ġ@ see Ġ[ F uzzy Reflect Field Matcher ] Ċ Ġ* Ġ@ author Ġlg ou 2 w Ċ Ġ*/ Ċ abstract Ġclass ĠF uzzy Reflect Matcher < T >( ĊĠĠĠĠĠĠĠ Ġreflect : ĠF uzzy Reflect , ĊĠĠĠĠĠĠĠ Ġinitialize : ĠCollection < T >? Ġ= Ġnull Ċ ) Ġwhere ĠT Ġ: ĠAccess ible Object , ĠT Ġ: ĠMember Ġ{ ĊĊĠĠĠ Ġprotected Ġvar Ġvalues Ġ: ĠMutable List < T > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initialize Ġ!= Ġnull ) ĠArrayList ( initialize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠArrayList () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMatch Ġreflection Ġvalues ĠâĢ ĭ âĢĭ from Ġa Ġgiven Ġ[ predicate ] Ġcondition . ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ è° ĵ è¯į æĿ¡ä»¶ Ġ[ predicate ] Ġä¸Ń åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpredicate ĠCondition ĊĠĠĠĠ Ġ* Ġ@ param Ġpredicate Ġ æĿ¡ä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġwith ( predicate : ĠPredicate < T >): ĠF uzzy Reflect Matcher < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( values . isEmpty ()) Ġ// Ġif Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġvalues Ġ= Ġvalues . as Sequence (). filter ( predicate ). to Mutable List () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠInitialize Ġthe Ġgiven Ġvalue Ġfirst , Ġthen Ġmatch Ġthe Ġreflection Ġvalue Ġfrom Ġthe Ġgiven Ġ[ predicate ] Ġcondition . ĊĠĠĠĠ Ġ* Ġ* Ġ é¦ĸåħĪ åĪĿå§ĭåĮĸ ç»Ļ å®ļ åĢ¼ , Ġ çĦ¶åĲİ ä»İ ç»Ļ å®ļçļĦ è° ĵ è¯į æĿ¡ä»¶ Ġ[ predicate ] Ġä¸Ń åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinitialize ĠInitialize Ġvalue ĊĠĠĠĠ Ġ* Ġ@ param Ġinitialize ĠåĪĿå§ĭåĮĸ åĢ¼ ĊĠĠĠĠ Ġ* Ġ@ param Ġpredicate ĠCondition ĊĠĠĠĠ Ġ* Ġ@ param Ġpredicate Ġ æĿ¡ä»¶ ĊĠĠĠĠ Ġ* Ġ@ since ĠL DK Ġ 0 . 1 . 7 - rc 3 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġ< U > Ġwith ( initialize : ĠCallable < U >, Ġpredicate : ĠBi Function < T , ĠU , ĠBoolean >): ĠF uzzy Reflect Matcher < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( values . isEmpty ()) Ġ// Ġif Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġinitialize Value Ġ= Ġinitialize () ĊĠĠĠĠĠĠĠ Ġvalues Ġ= Ġvalues . as Sequence (). filter Ġ{ Ġpredicate ( it , Ġinitialize Value ) Ġ}. to Mutable List () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMatch Ġreflection Ġvalues ĠâĢ ĭ âĢĭ from Ġa Ġgiven Ġ[ vis ibilities ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ åı¯ è§ģ æĢ§ Ġ[ vis ibilities ] Ġä¸Ń åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġvis ibilities ĠVis ibilities ĊĠĠĠĠ Ġ* Ġ@ param Ġvis ibilities Ġåı¯ è§ģ æĢ§ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġwith Vis ibilities ( var arg Ġvis ibilities : ĠVisibility ): ĠF uzzy Reflect Matcher < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġwith Ġ{ Ġaccessible Ġ-> Ġvis ibilities . all Ġ{ Ġit . is Matches ( accessible ) Ġ} Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMatch Ġreflection Ġvalues ĠâĢ ĭ âĢĭ from Ġthe Ġgiven Ġname Ġrule Ġ[ regex ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ åĲįç§° è§ĦåĪĻ Ġ[ regex ] Ġä¸Ń åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġregex ĠName Ġregex ĊĠĠĠĠ Ġ* Ġ@ param Ġregex Ġ åĲįç§° è§ĦåĪĻ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġwith Name ( regex : ĠString ): ĠF uzzy Reflect Matcher < T > Ġ= Ġwith ( object Ġ: ĠPredicate < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ( regex ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( it : ĠT ): ĠBoolean Ġ= Ġpattern . matcher ( it . name ). matches () ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMatch Ġreflection Ġvalues ĠâĢ ĭ âĢĭ from Ġthe Ġgiven Ġ[ annotation ] Ġclass . ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ æ³¨è§£ ç±» Ġ[ annotation ] Ġ åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġannotation ĠAnnotation Ġclass ĊĠĠĠĠ Ġ* Ġ@ param Ġannotation Ġ æ³¨è§£ ç±» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġ< A Ġ: ĠAnnotation > Ġwith Annotation ( annotation : ĠClass < A >): ĠF uzzy Reflect Matcher < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġwith Ġ{ Ġit . getAnnotation ( annotation ) Ġ!= Ġnull Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMat ches Ġthe Ġreflection Ġvalue Ġfrom Ġthe Ġgiven Ġ[ annotation ] Ġclass Ġand Ġwith Ġthe Ġspecified Ġpredicate Ġcondition Ġ[ block ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ æ³¨è§£ ç±» Ġ[ annotation ] Ġ å¹¶ ä»¥ æĮĩå®ļ è° ĵ è¯į æĿ¡ä»¶ Ġ[ block ] Ġ åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġannotation ĠAnnotation Ġclass ĊĠĠĠĠ Ġ* Ġ@ param Ġannotation Ġ æ³¨è§£ ç±» ĊĠĠĠĠ Ġ* Ġ@ param Ġblock ĠCondition ĊĠĠĠĠ Ġ* Ġ@ param Ġblock Ġ æĿ¡ä»¶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġ< A Ġ: ĠAnnotation > Ġwith Annotation If ( annotation : ĠClass < A >, Ġblock : ĠPredicate < A >): ĠF uzzy Reflect Matcher < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġwith Ġ{ Ġit . getAnnotation ( annotation ). let If NotNull ( block ) Ġ== Ġtrue Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMatch Ġreflection Ġvalues ĠâĢ ĭ âĢĭ from Ġa Ġgiven Ġtype Ġ[ clazz ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ ç±»åŀĭ åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz ĠClass ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz Ġ ç±» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġwith Type ( clazz : ĠClass < *> ): ĠF uzzy Reflect Matcher < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMat ches Ġthe Ġreflection Ġvalue Ġfrom Ġthe Ġgiven Ġparameter Ġtype Ġ[ parameters ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ åıĤæķ° ç±»åŀĭ Ġ[ parameters ] Ġ åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġparameters ĠParameter ĊĠĠĠĠ Ġ* Ġ@ param Ġparameters ĠåıĤæķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġwith Params ( var arg Ġparameters : ĠClass < *> ): ĠF uzzy Reflect Matcher < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠMat ches Ġthe Ġreflection Ġvalue Ġfrom Ġthe Ġgiven Ġparameter Ġ[ count ]. ĊĠĠĠĠ Ġ* Ġ* Ġä»İ ç»Ļ å®ļçļĦ åıĤæķ° æķ°éĩı Ġ[ count ] Ġ åĮ¹éħį åıį å°Ħ åĢ¼ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcount ĠParameter Ġcount ĊĠĠĠĠ Ġ* Ġ@ param Ġcount ĠåıĤæķ° æķ°éĩı ĊĠĠĠĠ Ġ* Ġ@ since ĠL DK Ġ 0 . 1 . 8 - rc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġwith Params Count ( count : ĠInt ): ĠF uzzy Reflect Matcher < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠResult Ġconverter . ĊĠĠĠĠ Ġ* Ġ* Ġ ç»ĵæŀľ è½¬ åıĺ åĻ¨ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġval Ġresult Transform : ĠFunction < T , ĠT > Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( reflect . is Force Access Ġ&& Ġ! it . is Accessible ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġresult Ġset Ġof Ġthis Ġfuzzy Ġreflect Ġmatcher . ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç»ĵæŀľ éĽĨåĲĪ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġresults (): ĠList < T > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġvalues . map ( result Transform ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġfirst Ġvalid Ġresult Ġof Ġthis Ġfuzzy Ġreflection Ġmatcher . ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç¬¬ä¸Ģä¸ª æľīæķĪ ç»ĵæŀľ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException ĠIf Ġthe Ġmatch Ġresult Ġis Ġempty . ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException Ġå¦Ĥæŀľ åĮ¹éħį ç»ĵæŀľ ä¸ºç©º . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( NoSuch ElementException :: class ) ĊĠĠĠ Ġopen Ġfun Ġresult (): ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġresults (). first () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġfirst Ġvalid Ġresult Ġof Ġthis Ġfuzzy Ġreflection Ġmatcher Ġor Ġ` null `. ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç¬¬ä¸Ģä¸ª æľīæķĪ ç»ĵæŀľ æĪĸ Ġ` null `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġresult OrNull (): ĠT ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġresults (). first OrNull () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġresult Ġaccessor Ġcollection Ġof Ġthis Ġfuzzy Ġreflection Ġmatcher . ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç»ĵæŀľ è®¿éĹ® åĻ¨ éĽĨåĲĪ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġresult Accessors (): ĠList < Accessor < T >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġfirst Ġvalid Ġresult Ġaccessor Ġfor Ġthis Ġfuzzy Ġreflection Ġmatcher . ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç¬¬ä¸Ģä¸ª æľīæķĪ ç»ĵæŀľ è®¿éĹ® åĻ¨ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException ĠIf Ġthe Ġmatch Ġresult Ġis Ġempty . ĊĠĠĠĠ Ġ* Ġ@ throws ĠNoSuch ElementException Ġå¦Ĥæŀľ åĮ¹éħį ç»ĵæŀľ ä¸ºç©º . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġresult Accessor (): ĠAccess or < T > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ* ĠGet Ġthe Ġfirst Ġvalid Ġresult Ġaccessor Ġfor Ġthis Ġfuzzy Ġreflection Ġmatcher Ġor Ġ` null `. ĊĠĠĠĠ Ġ* Ġ* Ġèİ·åıĸ æŃ¤ æ¨¡ ç³ Ĭ åıį å°Ħ åĮ¹éħį åĻ¨ çļĦ ç¬¬ä¸Ģä¸ª æľīæķĪ ç»ĵæŀľ è®¿éĹ® åĻ¨ æĪĸ Ġ` null `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġresult Accessor OrNull (): ĠAccess or < T >? Ċ } Ċ