package Ġcom . github . afe zer ia . kt mapping . example . compile time Ċ Ċ import Ġcom . github . afe zer ia . kt mapping . example .* Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ date Ġ 2 0 2 1 / 8 / 6 Ċ Ġ*/ Ċ class ĠUpdate From Entity Test Ġ{ ĊĠĠĠ Ġfun Ġtemplate ( fn : ĠString ): ĠSource File Ġ= ĠSource File . kotlin ( ĊĠĠĠĠĠĠĠ Ġ" test . kt ", ĊĠĠĠĠĠĠĠ Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import ĠJava A Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Mapper Ċ interface ĠInterface Test Ġ{ Ċ $ fn Ċ } ĊĊ Ċ class ĠA ( val Ġaccount : ĠString , Ġvar Ġname : ĠString , Ġvar Ġpassword : ĠString ) Ġ{ ĊĠĠĠ Ġvar Ġid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġage : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġval Ġaddress : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġcreate ById : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġcreate Date : ĠLocalDateTime ĊĠĠĠ Ġlateinit Ġvar Ġmodify ById : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġmodify Date : ĠLocalDateTime Ċ } Ċ Ċ data Ġclass ĠB ( ĊĠĠĠ Ġval Ġaccount : ĠString , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġpassword : ĠString , ĊĠĠĠ Ġval Ġage : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġaddress : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġvar Ġupdate Date : ĠLocalDateTime , Ċ ) Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġmodify ById : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġmodify Date : ĠLocalDateTime Ċ } ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsimple () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfun Ġabc ( b : ĠB , a : ĠA )" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġa . age Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġb . modify ById ĊĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġb . modify Date ĊĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . UPDATE _ ALL ) ĊĠĠĠ Ġfun Ġabc ( b : ĠB , Ġa : ĠA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġa . age Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġb . modify ById ĊĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġb . modify Date ĊĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . SOURCE _ IS _ NOT _ NULL ) ĊĠĠĠ Ġfun Ġabc ( b : ĠB , Ġa : ĠA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . time . LocalDateTime Ċ import Ġkotlin . String Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify ById : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB :: class . java . getField (" modify ById ") ĊĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify Date : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB :: class . java . getField (" modify Date ") ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġage Tmp Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġif Ġ( age Tmp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . age Ġ= Ġage Tmp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify ById Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify ById . get ( b ) Ġas ĠString ? ĊĠĠĠĠĠĠĠ Ġif Ġ( modify ById Tmp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġmodify ById Tmp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify Date Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify Date . get ( b ) Ġas ĠLocalDateTime ? ĊĠĠĠĠĠĠĠ Ġif Ġ( modify Date Tmp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġmodify Date Tmp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . TARGET _ IS _ NULL ) ĊĠĠĠ Ġ@ Mapping ( source Ġ= Ġ" update Date ", Ġtarget Ġ= Ġ" modify Date ") ĊĠĠĠ Ġfun Ġabc ( b : ĠB , Ġa : ĠA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify ById : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA :: class . java . getField (" modify ById ") ĊĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA :: class . java . getField (" modify Date ") ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġage Tmp Ġ= Ġa . age ĊĠĠĠĠĠĠĠ Ġif Ġ( age Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . age Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify ById Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify ById . get ( a ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modify ById Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġb . modify ById ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify Date Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date . get ( a ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modify Date Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġb . update Date ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . TARGET _ IS _ NULL , Ġmapping Policy Ġ= ĠMapping Policy . FIRST _ NOT _ NULL ) ĊĠĠĠ Ġ@ Mapping ( source Ġ= Ġ" update Date ", Ġtarget Ġ= Ġ" modify Date ") ĊĠĠĠ Ġfun Ġabc ( b : ĠB , Ġa : ĠA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . time . LocalDateTime Ċ import Ġkotlin . String Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify ById : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB :: class . java . getField (" modify ById ") ĊĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify ById : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA :: class . java . getField (" modify ById ") ĊĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify Date : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB :: class . java . getField (" modify Date ") ĊĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA :: class . java . getField (" modify Date ") ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġage Tmp Ġ= Ġa . age ĊĠĠĠĠĠĠĠ Ġif Ġ( age Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . age Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify ById Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify ById . get ( a ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modify ById Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ B _ modify ById . get ( b ) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify Date Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date . get ( a ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modify Date Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġ( com _ github _ afe zer ia _ kt mapping _ B _ modify Date . get ( b ) Ġ?: Ġb . update Date ) Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . TARGET _ IS _ NULL , Ġmapping Policy Ġ= ĠMapping Policy . ONLY _ EX PL IC IT ) ĊĠĠĠ Ġ@ Mapping ( source Ġ= Ġ" update Date ", Ġtarget Ġ= Ġ" modify Date ") ĊĠĠĠ Ġfun Ġabc ( b : ĠB , Ġa : ĠA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import Ġjava . lang . reflect . Field Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date : ĠField Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA :: class . java . getField (" modify Date ") ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġabc ( b : ĠB , Ġa : ĠA ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodify Date Tmp Ġ= Ġcom _ github _ afe zer ia _ kt mapping _ A _ modify Date . get ( a ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modify Date Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġb . update Date ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfig 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Source Ġ= Ġtemplate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ@ Mapper Config ( update Policy Ġ= ĠUpdate Policy . TARGET _ IS _ NULL ) ĊĠĠĠ Ġfun Ġju 1 ( b : ĠB , Ġa : ĠJava A ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġget Java Source (" Java A . java ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= Ġcreate Kotlin Compilation ( kotlin Source , Ġjava Source ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompilation . compile () ĊĊĠĠĠĠĠĠĠ Ġassert ( result . exit Code Ġ== ĠKotlin Compilation . ExitCode . OK ) ĊĊĠĠĠĠĠĠĠ Ġcompilation . print Generated File () ĊĊĠĠĠĠĠĠĠ Ġ@ Language (" kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ""" Ċ package Ġcom . github . afe zer ia . kt mapping Ċ Ċ import ĠJava A Ċ import Ġkotlin . Unit Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ public Ġclass ĠInterface Test Impl Ġ: ĠInterface Test Ġ{ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġju 1 ( b : ĠB , Ġa : ĠJava A ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccount Tmp Ġ= Ġa . account ĊĠĠĠĠĠĠĠ Ġif Ġ( account Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . account Ġ= Ġb . account ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġname Tmp Ġ= Ġa . name ĊĠĠĠĠĠĠĠ Ġif Ġ( name Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . name Ġ= Ġb . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpassword Tmp Ġ= Ġa . password ĊĠĠĠĠĠĠĠ Ġif Ġ( password Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . password Ġ= Ġb . password ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġage Tmp Ġ= Ġa . age ĊĠĠĠĠĠĠĠ Ġif Ġ( age Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . age Ġ= Ġb . age ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaddress Tmp Ġ= Ġa . address ĊĠĠĠĠĠĠĠ Ġif Ġ( address Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . address Ġ= Ġb . address ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify ById Tmp Ġ= Ġa . modify ById ĊĠĠĠĠĠĠĠ Ġif Ġ( modify ById Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify ById Ġ= Ġb . modify ById ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodify Date Tmp Ġ= Ġa . modify Date ĊĠĠĠĠĠĠĠ Ġif Ġ( modify Date Tmp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . modify Date Ġ= Ġb . modify Date ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġcompilation . get GeneratedCode () ĊĠĠĠĠĠĠĠ Ġdiff ( generated Code , Ġstr ) ĊĠĠĠ Ġ} Ċ }