package Ġsk yw olf 4 6 . command annotation . kotlin . ab straction Ċ Ċ import Ġsk yw olf 4 6 . command annotation . kotlin . Command Annotation Core Ċ import Ġsk yw olf 4 6 . command annotation . kotlin . data . Arguments Ċ import Ġsk yw olf 4 6 . extra utility . util . Method Invoker Ċ import Ġjava . lang . reflect . Proxy Ċ import Ġkotlin . reflect . jvm . kotlin Function Ċ Ċ abstract Ġclass ĠAbstract Annot able ( val Ġwrapper : ĠMethod Invoker , Ġval Ġpriority : ĠInt Ġ= Ġ 0 ) Ġ: ĠComparable < Abstract Annot able > Ġ{ ĊĠĠĠ Ġval Ġmarked Map Ġ= Ġmutable Map Of < Class <* >, ĠAnnotation >() ĊĠĠĠ Ġval Ġannotation Priority Ġ= Ġmutable ListOf < Annotation >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġwrapper . method . kotlin Function !!. annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtarget Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtarget Cls : ĠClass < *> Ġ= Ġx :: class . java ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Proxy . is Proxy Class ( target Cls )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Cls Ġ= Ġtarget Cls . interfaces [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Command Annotation Core . pre processors [ target Cls Ġas ĠClass < Annotation >] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarked Map [ x :: class . java ] Ġ= Ġx Ġas ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Priority Ġ+= Ġx Ġas ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġannotation Priority . sort With Ġ{ Ġfirst , Ġsecond Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Annotation Core . pre processors [ first :: class . java . find Annotation Class () Ġas ĠClass < Annotation >] !!. priority . compareTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Annotation Core . pre processors [ second :: class . java . find Annotation Class () Ġas ĠClass < Annotation >] !!. priority ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Marked ( target : ĠClass < out ĠAnnotation >) Ġ= Ġmarked Map [ target ] ĊĊĠĠĠ Ġfun Ġrun Marked ( storage : ĠArguments ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġannotation Priority ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Command Annotation Core . pre processors . invoke ( storage , Ġx )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwrapper . call ( storage ._ storage ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠBoolean Ġ&& Ġ! result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠAbstract Annot able ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpriority . compareTo ( other . priority ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠClass < out ĠAnnotation >. find Annotation Class () Ġ: ĠClass < out ĠAnnotation >{ ĊĠĠĠĠĠĠĠ Ġif ( Proxy . is Proxy Class ( this )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . interfaces [ 0 ] Ġas ĠClass < Annotation > ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} Ċ }