/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠO liver ĠB erg Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" ClassName ") Ċ Ċ package Ġmo e . kan on . events . internal Ċ Ċ import Ġmo e . kan on . events . EventBus Ċ import Ġmo e . kan on . events . Sub scribed Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . K Visibility Ċ import Ġkotlin . reflect . full . has Annotation Ċ import Ġkotlin . reflect . full . is Subclass Of Ċ import Ġkotlin . reflect . full . value Parameters Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ import Ġkotlin . reflect . jvm . java Method Ċ import Ġkotlin . reflect . type Of Ċ Ċ class ĠInvalid Listener Function Exception Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġcause : ĠThrowable ? Ġ= Ġnull Ċ ) Ġ: ĠException ( message , Ġcause ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġof ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc : ĠK Function <* >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcause : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ): ĠInvalid Listener Function Exception Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInvalid Listener Function Exception (" Function Ġ<$ func > Ġis Ġnot Ġa Ġvalid Ġlistener Ġfunction ; Ġ$ reason ", Ġcause ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġinline Ġfun Ġrequire Func ( func : ĠK Function <* >, Ġcondition : ĠBoolean , Ġlazy Msg : Ġ() Ġ-> ĠAny ) Ġ{ ĊĠĠĠ Ġif Ġ(! condition ) Ġthrow ĠInvalid Listener Function Exception . of ( func , Ġlazy Msg (). toString ()) Ċ } Ċ Ċ @ Published Api Ċ internal Ġfun Ġ< E Ġ: ĠAny , ĠL Ġ: ĠAny > ĠEvent Bus < E , ĠL >. require Valid Listener ( func : ĠK Function <* >) Ġ{ ĊĠĠĠ Ġrequire Func ( func , Ġfunc . java Method ?. returnType Ġ== ĠVoid . TYPE ) Ġ{ Ġ" return Ġtype Ġis Ġnot ĠUnit / void " Ġ} ĊĠĠĠ Ġrequire Func ( func , Ġfunc . visibility Ġ== ĠK Visibility . PUBLIC Ġ|| Ġfunc . visibility Ġ== ĠK Visibility . INTERNAL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" visibility Ġneeds Ġto Ġbe Ġpublic Ġor Ġinternal " ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequire Func ( func , Ġ! func . is Abstract ) Ġ{ Ġ" is Ġabstract " Ġ} ĊĠĠĠ Ġrequire Func ( func , Ġfunc . value Parameters . size Ġ== Ġ 1 ) Ġ{ Ġ" contains Ġmore Ġor Ġless Ġthan Ġone Ġparameter " Ġ} ĊĠĠĠ Ġ// Ġthis Ġneeds Ġto Ġbe Ġaccessing Ġthe Ġjava Ġ' Method ' Ġinstance Ġbecause Ġthe ĠKotlin Ġfunc Ġinstance Ġhas Ġproblems Ġwith Ġgetting ĊĠĠĠ Ġ// Ġtype Ġinformation Ġregarding Ġlocal Ġobjects Ġsometimes . ĊĠĠĠ Ġrequire Func ( func , Ġfunc . java Method !!. parameters [ 0 ]. type . kotlin . is Subclass Of ( this . event Class )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" event Ġparameter Ġis Ġnot Ġa Ġsub - class Ġof Ġevent Ġtype Ġ<$ event Class >" ĊĠĠĠ Ġ} Ċ }