package Ġstub bed mock . annotation Ċ Ċ import Ġstub bed mock . filters . types . Stub Filter Ċ import Ġstub bed mock . mock . Stub ber Ċ import Ġjava . lang . reflect . Field Ċ Ċ object ĠStub Annotation Parser Ġ{ ĊĊĠ Ġfun Ġinit Stub bed Mocks ( ĊĠĠĠ Ġinstance : ĠAny , ĊĠĠĠ Ġfilters : ĠList < Stub Filter > Ġ= Ġempty List (), ĊĠĠĠ Ġclass Fields : ĠMap < String , ĠAny > Ġ= Ġempty Map () ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġinstance . java Class . declared Fields ĊĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . getAnnotation ( Stub bed Mock :: class . java ) Ġ!= Ġnull ĊĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Stub bing ( instance , Ġit , Ġclass Fields , Ġfilters ) ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Stub bing ( ĊĠĠĠ Ġobject Instance : ĠAny , ĊĠĠĠ Ġfield : ĠField , ĊĠĠĠ Ġclass Fields : ĠMap < String , ĠAny >, ĊĠĠĠ Ġfilters : ĠList < Stub Filter > ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġfield . is Accessible Ġ= Ġtrue ĊĠĠĠ Ġval Ġstub bed Fields Map Ġ= Ġprocess Annotation Variables ( field ) ĊĠĠĠ Ġval Ġvalue Ġ= ĠStub ber . run ( field . type , Ġclass Fields , Ġstub bed Fields Map , Ġfilters ) ĊĠĠĠ Ġfield . set ( object Instance , Ġvalue ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Annotation Variables ( field : ĠField ): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠ Ġval Ġstub bed Fields Ġ= Ġfield . getAnnotation ( Stub bed Mock :: class . java ). stub ĊĠĠĠ Ġval Ġstub bed Fields Map Ġ= Ġmutable Map Of < String , ĠAny >() ĊĊĠĠĠ Ġstub bed Fields . forEach Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( class Field Ġin Ġfield . type . declared Fields ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( class Field . name Ġ== Ġit . key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstub bed Fields Map [ it . key ] Ġ= Ġget Stub bed FieldValue ( class Field . type , Ġit ) ĊĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġstub bed Fields Map ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Stub bed FieldValue ( fieldType : ĠClass <* >, Ġstub : ĠStub ): ĠAny Ġ= Ġwhen Ġ{ ĊĠĠĠ ĠfieldType Ġ== ĠChar :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Character " Ġ-> Ġstub . char Value ĊĠĠĠ ĠfieldType Ġ== ĠBoolean :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Boolean " Ġ-> Ġstub . boolean Value ĊĠĠĠ ĠfieldType Ġ== ĠInt :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Integer " Ġ-> Ġstub . intValue ĊĠĠĠ ĠfieldType Ġ== ĠFloat :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Float " Ġ-> Ġstub . float Value ĊĠĠĠ ĠfieldType Ġ== ĠLong :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Long " Ġ-> Ġstub . longValue ĊĠĠĠ ĠfieldType Ġ== ĠDouble :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Double " Ġ-> Ġstub . doubleValue ĊĠĠĠ ĠfieldType Ġ== ĠShort :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Short " Ġ-> Ġstub . short Value ĊĠĠĠ ĠfieldType Ġ== ĠByte :: class . java Ġ|| ĠfieldType . toString () Ġ== Ġ" class Ġjava . lang . Byte " Ġ-> Ġstub . byte Value ĊĠĠĠ Ġelse Ġ-> Ġstub . stringValue ĊĠ Ġ} Ċ }