package Ġnet . cord a . gradle . jar filter Ċ Ċ import Ġnet . cord a . gradle . jar filter . asm . re code Metadata For Ċ import Ġnet . cord a . gradle . jar filter . asm . to Class Ċ import Ġnet . cord a . gradle . jar filter . matcher . isFunction Ċ import Ġorg . assertj . core . api . Assertions .* Ċ import Ġorg . gradle . api . logging . Logger Ċ import Ġorg . hamcrest . core . Is Collection Containing .* Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Test Ċ import Ġkotlin . reflect . K Function Ċ import Ġkotlin . reflect . full . declared Functions Ċ Ċ class ĠMeta Fix Function Default Parameter Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠStd Out Logging ( Meta Fix Function Default Parameter Test :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhas Mandatory Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġis Function (" has Mandatory Params ", ĠString :: class , ĠLong :: class , ĠInt :: class , ĠString :: class ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhas Optional Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġis Function (" has Optional Params ", ĠString :: class , ĠString :: class ) ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġsource Class : ĠClass < out ĠAny > ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġfixed Class : ĠClass < out ĠAny > ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytecode Ġ= Ġre code Metadata For < With Function Parameters , ĠMetadata Template >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Class Ġ= Ġbytecode . to Class < With Function Parameters , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Class Ġ= Ġbytecode . fix Metadata ( logger , Ġpaths Of ( With Function Parameters :: class )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Class < With Function Parameters , ĠAny >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġfunctions Ġhave Ġdefault Ġparameters `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( source Class . kotlin . declared Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (" source Ġmandatory Ġparameters Ġmissing ", Ġthis , Ġhas Item ( has Mandatory Params )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (" source Ġoptional Ġparameters Ġmissing ", Ġthis , Ġhas Item ( has Optional Params )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Un wanted Ġ= Ġsource Class . kotlin . declared Functions . findOrFail (" has Mandatory Params ") ĊĠĠĠĠĠĠĠ ĠassertThat ( source Un wanted . call ( source Class . newInstance (), ĠBIG _ NUMBER , ĠNUMBER , ĠMESSAGE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" Long : Ġ$ BIG _ NUMBER , ĠInt : Ġ$ NUMBER , ĠString : Ġ$ MESSAGE ") ĊĊĠĠĠĠĠĠĠ ĠassertTrue (" All Ġsource Ġparameters Ġshould Ġbe Ġoptional ", Ġsource Un wanted . has All Optional Parameters ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsource W anted Ġ= Ġsource Class . kotlin . declared Functions . findOrFail (" has Optional Params ") ĊĠĠĠĠĠĠĠ ĠassertThat ( source W anted . call ( source Class . newInstance (), ĠMESSAGE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( MESSAGE ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue (" All Ġsource Ġparameters Ġshould Ġbe Ġoptional ", Ġsource W anted . has All Optional Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġfixed Ġfunctions Ġexist `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( fixed Class . kotlin . declared Functions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (" fixed Ġmandatory Ġparameters Ġmissing ", Ġthis , Ġhas Item ( has Mandatory Params )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat (" fixed Ġoptional Ġparameters Ġmissing ", Ġthis , Ġhas Item ( has Optional Params )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġun wanted Ġdefault Ġparameters Ġare Ġremoved `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfixed Mandatory Ġ= Ġfixed Class . kotlin . declared Functions . findOrFail (" has Mandatory Params ") ĊĠĠĠĠĠĠĠ ĠassertTrue (" All Ġfixed Ġparameters Ġshould Ġbe Ġmandatory ", Ġfixed Mandatory . has All Mandatory Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġwanted Ġdefault Ġparameters Ġare Ġkept `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfixed Optional Ġ= Ġfixed Class . kotlin . declared Functions . findOrFail (" has Optional Params ") ĊĠĠĠĠĠĠĠ ĠassertTrue (" All Ġfixed Ġparameters Ġshould Ġbe Ġoptional ", Ġfixed Optional . has All Optional Parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġabstract Ġclass ĠMetadata Template Ġ{ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġhas Mandatory Params ( long Data : ĠLong Ġ= Ġ 0 , Ġint Data : ĠInt Ġ= Ġ 0 , Ġmessage : ĠString Ġ= ĠDEFAULT _ MESSAGE ): ĠString ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġhas Optional Params ( message : ĠString Ġ= ĠDEFAULT _ MESSAGE ): ĠString ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠIterable < K Function < T >> . findOrFail ( name : ĠString ): ĠK Function < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ?: Ġthrow ĠAssertionError ("$ name Ġmissing ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" UNUSED ") Ċ class ĠWith Function Parameters Ġ{ ĊĠĠĠ Ġfun Ġhas Mandatory Params ( long Data : ĠLong , Ġint Data : ĠInt , Ġmessage : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Long : Ġ$ long Data , ĠInt : Ġ$ int Data , ĠString : Ġ$ message " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Optional Params ( message : ĠString Ġ= ĠDEFAULT _ MESSAGE ): ĠString Ġ= Ġmessage Ċ } Ċ