// ĠIG NORE _ BACKEND _ FI R : ĠJVM _ IR Ċ // ĠTARGET _ BACKEND : ĠJVM Ċ // ĠJVM _ TARGET : Ġ 1 . 8 Ċ // ĠWITH _ REF LECT Ċ Ċ import Ġkotlin . reflect . K Mutable Property 1 Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ import Ġkotlin . test . assertEquals Ċ Ċ inline Ġclass ĠS ( val Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠS ): ĠS Ġ= ĠS ( this . value Ġ+ Ġother . value ) Ċ } Ċ Ċ object ĠC Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġvar Ġp : ĠS Ġ= ĠS ("") ĊĊĠĠĠ Ġfun Ġbound Ref () Ġ= Ġthis :: p . apply Ġ{ Ġis Accessible Ġ= Ġtrue Ġ} Ċ } Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ Ġval Ġun bound Ref Ġ= ĠC :: class . members . single Ġ{ Ġit . name Ġ== Ġ" p " Ġ} Ġas ĠK Mutable Property 1 < C , ĠS > ĊĠĠĠ Ġun bound Ref . is Accessible Ġ= Ġtrue ĊĠĠĠ ĠassertEquals ( Unit , Ġun bound Ref . setter . call ( C , ĠS (" ab "))) ĊĠĠĠ ĠassertEquals ( S (" ab "), Ġun bound Ref . call ( C )) ĊĠĠĠ ĠassertEquals ( S (" ab "), Ġun bound Ref . getter . call ( C )) ĊĊĠĠĠ Ġval Ġbound Ref Ġ= ĠC . bound Ref () ĊĠĠĠ ĠassertEquals ( Unit , Ġbound Ref . setter . call ( S (" cd "))) ĊĠĠĠ ĠassertEquals ( S (" cd "), Ġbound Ref . call ()) ĊĠĠĠ ĠassertEquals ( S (" cd "), Ġbound Ref . getter . call ()) ĊĊĠĠĠ Ġreturn Ġ" OK " Ċ } Ċ