package Ġcom . mir u ken . callback Ċ Ċ import Ġcom . mir u ken . Ordered Comparator Ċ import Ġcom . mir u ken . Type Reference Ċ import Ġcom . mir u ken . callback . policy . bindings . Member Binding Ċ import Ġcom . mir u ken . runtime . get Meta Annotations Ċ import Ġcom . mir u ken . runtime . normalize Ċ import Ġjava . lang . reflect . Annotated Element Ċ import Ġkotlin . reflect . K Annotated Element Ċ import Ġkotlin . reflect . K Type Ċ Ċ fun ĠHandling . skip Filters ( skip : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Options ( Filter Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip Filters Ġ= Ġskip ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ fun ĠHandling . enable Filters ( enable : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Options ( Filter Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip Filters Ġ= Ġ! enable ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ fun ĠHandling . with Filters ( var arg Ġfilters : ĠFiltering < *, * >) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Options ( Filter Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders Ġ= ĠlistOf ( Filter Instance Provider (* filters )) ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ fun ĠHandling . with Filters ( var arg Ġproviders : ĠFiltering Provider ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Options ( Filter Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . providers Ġ= Ġproviders . toList () ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ fun ĠHandling . with Filters ( var arg Ġspecs : ĠFilter Spec ) Ġ= ĊĠĠĠĠĠĠĠ Ġwith Options ( Filter Options (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . providers Ġ= Ġspecs . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Spec Provider ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) Ċ Ċ fun ĠHandling . get Ordered Filters ( ĊĠĠĠĠĠĠĠ Ġfilter Type : ĠĠĠĠĠ ĠK Type , ĊĠĠĠĠĠĠĠ Ġbinding : ĠĠĠĠĠĠĠĠ ĠMember Binding , ĊĠĠĠĠĠĠĠ Ġcallback : ĠĠĠĠĠĠĠ ĠAny , ĊĠĠĠĠĠĠĠ Ġcallback Type : ĠĠĠ ĠType Reference ?, ĊĠĠĠĠĠĠĠ Ġfilter Providers : ĠSequence < Collection < Filtering Provider >> Ċ ): ĠList < Pair < Filtering < *, * >, ĠFiltering Provider >> ? Ġ{ ĊĠĠĠ Ġval Ġoptions ĠĠ Ġ= Ġget Options ( Filter Options ()) ĊĠĠĠ Ġvar Ġproviders Ġ= Ġfilter Providers . flatten (). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . app lies To ( callback , Ġcallback Type ) Ġ!= Ġfalse ĊĠĠĠ Ġ} Ġ+ Ġ( options ?. providers Ġ?: Ġempty List ()) ĊĊĠĠĠ Ġval Ġhandler Ġ= Ġwhen Ġ( options ?. skip Filters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproviders Ġ= Ġproviders . filter Ġ{ Ġit . required Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . skip Filters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproviders Ġ= Ġproviders . filter Ġ{ Ġit . required Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . skip Filters () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġthis . skip Filters () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġproviders . toList (). flatMap Ġ{ Ġprovider Ġ-> ĊĠĠĠĠĠĠĠ Ġprovider . get Filters ( binding , Ġfilter Type , Ġcallback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Type , Ġhandler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġfilter Ġ-> Ġfilter Ġto Ġprovider Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ}. as Sequence () ĊĠĠĠĠ Ġ. to Sorted Set ( Filter Comparator ) ĊĠĠĠĠ Ġ. toList () Ċ } Ċ Ċ object ĠFilter Comparator Ġ: ĊĠĠĠĠĠĠĠ ĠComparator < Pair < Filtering < *, * >, ĠFiltering Provider >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcompare ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġo 1 : ĠPair < Filtering < *, Ġ* >, ĠFiltering Provider > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġo 2 : ĠPair < Filtering < *, Ġ* >, ĠFiltering Provider >? ĊĠĠĠ Ġ) Ġ= ĠOrdered Comparator . compare ( o 1 ?. first , Ġo 2 ?. first ) Ċ } Ċ Ċ fun ĠK Annotated Element . get Filter Providers () Ġ= ĊĠĠĠĠĠĠĠ Ġ( get Meta Annotations < Use Filter Provider >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . flatMap Ġ{ Ġp Ġ-> Ġp . provide By . toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġp Ġ-> Ġp . object Instance ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠ Ġget Meta Annotations < Use Filter Provider Factory >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . map NotNull Ġ{ Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . create By . object Instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . create Provider ( it . first )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ ĊĠĠĠĠĠĠĠ Ġ( get Meta Annotations < Use Filter >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . map Ġ{ Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Spec Provider ( create Spec ( f )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ). toList () ĊĠĠĠĠĠĠĠĠ Ġ. normalize () ĊĊ Ċ fun ĠAnnot ated Element . get Filter Providers () Ġ= ĊĠĠĠĠĠĠĠ Ġ( get Meta Annotations < Use Filter Provider >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . flatMap Ġ{ Ġp Ġ-> Ġp . provide By . toList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġp Ġ-> Ġp . object Instance ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠ Ġget Meta Annotations < Use Filter Provider Factory >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . map NotNull Ġ{ Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf . create By . object Instance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . create Provider ( it . first )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ ĊĠĠĠĠĠĠĠ Ġ( get Meta Annotations < Use Filter >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . map Ġ{ Ġf Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Spec Provider ( create Spec ( f )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure ( it . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ). toList () ĊĠĠĠĠĠĠĠĠ Ġ. normalize () ĊĊ Ċ private Ġfun Ġcreate Spec ( use Filter : ĠUse Filter ) Ġ= ĠFilter Spec ( ĊĠĠĠĠĠĠĠ Ġuse Filter . filter By , ĊĠĠĠĠĠĠĠ Ġuse Filter . order . take If Ġ{ Ġit Ġ>= 0 Ġ}, ĊĠĠĠĠĠĠĠ Ġuse Filter . required )