/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 2 ĠMat th ias ĠGe is ler Ġ( bit P ogo ) Ġ/ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby ĠApache Ġv 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġtech . ant ib y tes . k mock . processor . utils Ċ Ċ import Ġcom . google . devtools . k sp . processing . K SP Logger Ċ import Ġcom . google . devtools . k sp . symbol . KS Annotation Ċ import Ġcom . google . devtools . k sp . symbol . KS Type Ċ import Ġcom . google . devtools . k sp . symbol . KS Value Argument Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ COMMON _ MULTI _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ COMMON _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ PLATFORM _ MULTI _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ PLATFORM _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ SHARED _ MULTI _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . AN NOT ATION _ SHARED _ NAME Ċ import Ġtech . ant ib y tes . k mock . processor . Processor Contract . Companion . REL AX ATION _ NAME Ċ import Ġtech . ant ib y tes . util . test . fixture . fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . kotlin Fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . list Fixture Ċ import Ġtech . ant ib y tes . util . test . fixture . map Fixture Ċ import Ġtech . ant ib y tes . util . test . ful fil s Ċ import Ġtech . ant ib y tes . util . test . must Be Ċ Ċ class ĠAnnotation Filter Spec Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= Ġkotlin Fixture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` It Ġful fil s ĠAnnotation Filter `() Ġ{ ĊĠĠĠĠĠĠĠ ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . list Fixture < String >(). toSet () ĊĠĠĠĠĠĠĠ Ġ) Ġful fil s ĠProcessor Contract . Annotation Filter :: class ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġfilter Annotation Ġis Ġcalled Ġwith Ġa Ġempty Ġmap Ġit Ġdoes Ġnothing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġempty Map () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . list Fixture < String >(). toSet () ĊĠĠĠĠĠĠĠ Ġ). filter Annotation ( annotations ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġempty Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġfilter Annotation Ġis Ġcalled Ġwith Ġmap , Ġwhich Ġcontains Ġinvalid ĠS ources Sets Ġit Ġfilters Ġthem Ġout Ġand Ġwar ns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . list Fixture < String >(). toSet () ĊĠĠĠĠĠĠĠ Ġ). filter Annotation ( annotations ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġannotations . keys . toList () ĊĠĠĠĠĠĠĠ Ġval Ġsource Sets Ġ= Ġannotations . values . toList () ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġempty Map () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 0 ]} Ġis Ġnot Ġapplicable Ġsince Ġis ĠSource Set Ġ(${ source Sets [ 0 ]}) Ġis Ġnot Ġa Ġknow Ġshared Ġsource .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 1 ]} Ġis Ġnot Ġapplicable Ġsince Ġis ĠSource Set Ġ(${ source Sets [ 1 ]}) Ġis Ġnot Ġa Ġknow Ġshared Ġsource .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 2 ]} Ġis Ġnot Ġapplicable Ġsince Ġis ĠSource Set Ġ(${ source Sets [ 2 ]}) Ġis Ġnot Ġa Ġknow Ġshared Ġsource .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġfilter Annotation Ġis Ġcalled Ġwith Ġmap , Ġwhich Ġshadow Ġbuild - in ĠAn notations Ġit Ġfilters Ġthem Ġout Ġand Ġwar ns `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ PLATFORM _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ PLATFORM _ MULTI _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ SHARED _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ SHARED _ MULTI _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ COMMON _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAN NOT ATION _ COMMON _ MULTI _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREL AX ATION _ NAME Ġto Ġfixture . fixture (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). filter Annotation ( annotations ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġannotations . keys . toList () ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġempty Map () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 0 ]} Ġis Ġnot Ġapplicable Ġsince Ġis Ġshadow s Ġa Ġbuild - in Ġannotation .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 1 ]} Ġis Ġnot Ġapplicable Ġsince Ġis Ġshadow s Ġa Ġbuild - in Ġannotation .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 2 ]} Ġis Ġnot Ġapplicable Ġsince Ġis Ġshadow s Ġa Ġbuild - in Ġannotation .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ("${ keys [ 3 ]} Ġis Ġnot Ġapplicable Ġsince Ġis Ġshadow s Ġa Ġbuild - in Ġannotation .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġfilter Annotation Ġis Ġcalled Ġwith Ġmap , Ġwhich Ġcontains Ġvalid ĠS ources Sets Ġit Ġreturns Ġa Ġmap Ġwith Ġthem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). filter Annotation ( annotations ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġannotations ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġfilter Annotation Ġis Ġcalled Ġwith Ġmap Ġwhich Ġcontains Ġvalid ĠS ources Sets Ġwhile Ġreferencing Ġthe Ġplatform Ġit Ġreturns Ġa Ġmap Ġwith Ġthem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . map Ġ{ Ġvalue Ġ-> Ġ"${ value } Test " Ġ}. toSet () ĊĠĠĠĠĠĠĠ Ġ). filter Annotation ( annotations ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġannotations ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġit Ġtakes Ġless Ġthen Ġ 1 Ġargument `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġit Ġtakes Ġmore Ġthen Ġ 1 Ġargument `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( mock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġits Ġargument Ġis Ġnot Ġa ĠList Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠAny () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġits Ġargument Ġcontains Ġnot Ġa ĠList Ġof ĠK S Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( Any (), ĠAny ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġtrue Ġif Ġits Ġargument Ġcontains Ġan Ġempty ĠList `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf < Any ?> () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Single Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġtrue Ġif Ġits Ġargument Ġcontains Ġa ĠList Ġof ĠK S Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( mock k < KS Type >(), Ġmock k < KS Type >()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Single Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġit Ġtakes Ġless Ġthen Ġ 2 Ġargument `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( mock k ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġit Ġtakes Ġmore Ġthen Ġ 2 Ġargument `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( mock k (), Ġmock k (), Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġits Ġfirst Ġargument Ġis Ġnot Ġa ĠString `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument , Ġmock k ()) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠAny () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġits Ġsecond Ġargument Ġis Ġnot Ġa ĠList Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 1 : ĠK S Value Argument Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 2 : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument 1 , Ġargument 2 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 1 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġfixture . fixture < String >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 2 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠAny () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġfalse Ġif Ġits Ġargument Ġcontains Ġnot Ġa ĠList Ġof ĠK S Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 1 : ĠK S Value Argument Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 2 : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument 1 , Ġargument 2 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 1 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġfixture . fixture < String >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 2 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( Any (), ĠAny ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġtrue Ġif Ġits Ġargument Ġcontains Ġan Ġempty ĠList `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 1 : ĠK S Value Argument Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 2 : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument 1 , Ġargument 2 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 1 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġfixture . fixture < String >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 2 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf < Any ?> () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġis Applicable Multi Source Annotation Ġis Ġcalled Ġwith Ġa ĠK S Annotation Ġit Ġreturns Ġtrue Ġif Ġits Ġargument Ġcontains Ġa ĠList Ġof ĠK S Type `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġannotations : ĠMap < String , ĠString > Ġ= Ġfixture . map Fixture ( size Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠK SP Logger Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġannotation : ĠK S Annotation Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 1 : ĠK S Value Argument Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġargument 2 : ĠK S Value Argument Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . arguments ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( argument 1 , Ġargument 2 ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 1 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġfixture . fixture < String >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument 2 . value ĊĠĠĠĠĠĠĠ Ġ} Ġreturns ĠlistOf ( mock k < KS Type >(), Ġmock k < KS Type >()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠAnnotation Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . values . toSet () ĊĠĠĠĠĠĠĠ Ġ). is Applicable Multi Source Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġactual Ġmust Be Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ