package Ġdev . the code war ri or . prism . base . analysis . impl Ċ Ċ import Ġdev . the code war ri or . mirror . Mirror Ċ import Ġdev . the code war ri or . mirror . type . Type Mirror Ċ import Ġdev . the code war ri or . prism . annotation . Ref r act Ċ import Ġdev . the code war ri or . prism . annotation . Ref r act Getter Ċ import Ġdev . the code war ri or . prism . test support . Identity Prism Ċ import Ġdev . the code war ri or . prism . test support . Identity Serializer Ċ import Ġdev . the code war ri or . prism . test support . assertInstanceOf Ċ import Ġdev . the code war ri or . reflect case . Reflect Test Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ Ċ @ Suppress (" Local Variable Name ") Ċ internal Ġclass ĠProperty Scanner Test : ĠReflect Test ( ĊĠĠĠ Ġ" dev . the code war ri or . prism . annotation .* " Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssert s Ġthat Ġa Ġproperty Ġis Ġproperly Ġconfigured . ĠReturns Ġa Ġcallback Ġsuitable Ġfor Ġ[ assert All ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT : ĠObject Property <* >> Ġassert Property ( ĊĠĠĠĠĠĠĠ Ġactual : ĠObject Property <* >, ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġimmutable : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtype : ĠType Mirror ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġserializer : ĠIdentity Serializer ? Ġ= Ġnull ĊĠĠĠ Ġ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert InstanceOf < T >( actual ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( name , Ġactual . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( immutable , Ġactual . is Immutable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( type , Ġactual . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( serializer Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( serializer , Ġactual . serializer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ# ĠBas ics ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` a Ġclass Ġwith Ġno Ġ@ Ref r act Ġannotated Ġfields Ġor Ġmethods Ġshould Ġhave Ġno Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠX Ġby Ġsources . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" X ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġfield ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ĠgetValue () Ġ{ ĠN OP ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġproperties . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fields Ġshould Ġbe Ġscanned Ġto Ġcorrectly - configured ĠField Property Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠX Ġby Ġsources . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" X ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" immutable ") Ġfinal Ġint Ġimmutable Field Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" mutable ") Ġint Ġmutable Field ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get ters Ġand Ġset ters Ġshould Ġbe Ġscanned Ġto Ġcorrectly - configured ĠAccess or Property Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠX Ġby Ġsources . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" X ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act Getter (" immutable ") Ġint Ġget Immutable Field () Ġ{ ĠN OP ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act Getter (" mutable ") Ġint Ġget Mutable Field () Ġ{ ĠN OP ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act Setter (" mutable ") Ġvoid Ġset Mutable Field ( int Ġvalue ) Ġ{ ĠN OP ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` kotlin Ġproperties Ġwith Ġbacking Ġfields Ġshould Ġbe Ġscanned Ġto Ġcorrectly - configured ĠAccess or Property Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" immutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimmutable : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" mutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmutable : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X :: class . java )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` kotlin Ġproperties Ġwithout Ġbacking Ġfields Ġshould Ġbe Ġscanned Ġto Ġcorrectly - configured ĠAccess or Property Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" immutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimmutable : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" mutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmutable : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X :: class . java )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`@ Jvm Field Ġkotlin Ġproperties Ġshould Ġbe Ġscanned Ġto Ġcorrectly - configured ĠField Property Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" immutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimmutable : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" mutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmutable : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X :: class . java )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` direct ly Ġannot ating Ġa Ġkotlin Ġproperty 's Ġbacking Ġfield Ġshould Ġscan Ġit Ġto Ġa Ġcorrectly - configured ĠField Property `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : Ref r act (" immutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimmutable : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : Ref r act (" mutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmutable : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ immutable , Ġmutable ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X :: class . java )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" immutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" mutable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠM irror . types . int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠIdentity Prism [ Mirror . types . int ]. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` all Ġthree Ġproperty Ġtypes Ġshould Ġbe Ġable Ġto Ġco exist Ġwithout Ġconflicts `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠX Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act Getter (" accessor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġaccessor (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : Ref r act (" field ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ref r act (" property ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsources . compile () ĊĠĠĠĠĠĠĠ Ġ// Ġsort Ġby Ġname Ġso Ġthey 're Ġin Ġ[ accessor , Ġfield , Ġproperty ] Ġorder ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= ĠProperty Scanner . scan ( Identity Prism , ĠM irror . reflect Class ( X :: class . java )). sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġproperties . size ) ĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" accessor ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Field Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" field ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Property < Accessor Property < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties [ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" property ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimmutable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġstatic Ġfields / methods Ġshould Ġthrow ĊĊĠĠĠ Ġ// Ġscanned Ġproperties Ġshould Ġbe Ġalphabet ical Ġregardless Ġof Ġthe Ġorigin ating Ġclass Ġor Ġunderlying Ġmember Ġname ĊĊĠĠĠ Ġ// Ġ# ĠEmpty Ġnames Ġ- Ġshould Ġthese Ġbe Ġallowed ? ĊĠĠĠ Ġ// Ġa Ġfield Ġwith Ġan Ġempty Ġname ĊĠĠĠ Ġ// Ġa Ġkotlin Ġproperty Ġwith Ġan Ġempty Ġname ĊĠĠĠ Ġ// Ġa Ġgetter / setter Ġwith Ġan Ġempty Ġname ĊĊĠĠĠ Ġ// Ġ# ĠError Ġcases ĊĠĠĠ Ġ// Ġa Ġsetter Ġwith Ġno Ġgetter ĊĠĠĠ Ġ// Ġduplicate Ġfields Ġ// Ġspecific Ġerror ? ĊĠĠĠ Ġ// Ġduplicate Ġset ters ĊĠĠĠ Ġ// Ġduplicate Ġgetters ĊĠĠĠ Ġ// Ġduplicate Ġproperties ĊĠĠĠ Ġ// Ġduplicate Ġfield + getter / setter , Ġfield + property , Ġgetter / setter + property ĊĠĠĠ Ġ// Ġmis matched Ġgetter / setter Ġtypes ĊĠĠĠ Ġ// Ġwrong Ġsignature Ġfor Ġgetter Ġor Ġsetter Ġ( getter Ġwith Ġparams , Ġsetter Ġwith Ġno Ġparams , Ġsetter Ġwith Ġreturn ) ĊĊĠĠĠ Ġ// Ġ# ĠError Ġreporting ĊĠĠĠ Ġ// Ġa Ġsingle Ġerror ĊĠĠĠ Ġ// Ġmultiple Ġerrors ĊĠĠĠ Ġ// Ġerrors Ġonly Ġduring Ġthe Ġinitial Ġscan ĊĠĠĠ Ġ// Ġerrors Ġonly Ġwhen Ġresolving Ġcandidates ĊĠĠĠ Ġ// Ġerrors Ġduring Ġthe Ġinitial Ġscan Ġ* and * Ġwhen Ġresolving Ġcandidates ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscan () Ġ{ ĊĠĠĠ Ġ} Ċ }