/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . squareup . mos hi . kotlin . codegen Ċ Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġcom . tsch uch ort . compile testing . SourceFile . Companion . kotlin Ċ import Ġcom . squareup . kotlin po et . metadata . Kotlin Po et Metadata Preview Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ Ċ /** ĠExecute Ġkotlin c Ġto Ġconfirm Ġthat Ġeither Ġfiles Ġare Ġgenerated Ġor Ġerrors Ġare Ġprinted . Ġ*/ Ċ @ Use Experimental ( Kotlin Po et Metadata Preview :: class ) Ċ class ĠJson Class Code gen Processor Test Ġ{ ĊĠ Ġ@ Rule Ġ@ Jvm Field Ġvar Ġtemporary Folder : ĠTemporary Folder Ġ= ĠTemporary Folder () ĊĊĠ Ġ@ Test Ġfun Ġprivate Constructor () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠPrivate Constructor Ġprivate Ġconstructor ( var Ġa : ĠInt , Ġvar Ġb : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġa () Ġ= Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġb () Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( a : ĠInt , Ġb : ĠInt ) Ġ= ĠPrivate Constructor ( a , Ġb ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" constructor Ġis Ġnot Ġinternal Ġor Ġpublic ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġprivate Constructor Parameter () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠPrivate Constructor Parameter ( private Ġvar Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" property Ġa Ġis Ġnot Ġvisible ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġprivate Properties () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠPrivate Properties Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġa : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġb : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" property Ġa Ġis Ġnot Ġvisible ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġinterfaces NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġinterface ĠInterface ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠInterface : Ġmust Ġbe Ġa ĠKotlin Ġclass ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġinterfaces DoNot Error When Generator Not Set () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue , Ġgenerator =" custom Generator ") ĊĠĠĠĠĠĠĠĠĠ Ġinterface ĠInterface ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . OK ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġabstract Classes NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġabstract Ġclass ĠAbstract Class ( val Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠAbstract Class : Ġmust Ġnot Ġbe Ġabstract ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsealed Classes NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠ ĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġsealed Ġclass ĠSe aled Class ( val Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠSe aled Class : Ġmust Ġnot Ġbe Ġsealed ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġinner Classes NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġclass ĠO uter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Ġclass ĠInner Class ( val Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠO uter . Inner Class : Ġmust Ġnot Ġbe Ġan Ġinner Ġclass ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġenum Classes NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġenum Ġclass ĠKotlin Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA , ĠB ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġwith Ġ' generate Adapter Ġ= Ġ\" true \" ' Ġcan 't Ġbe Ġapplied Ġto ĠKotlin Enum : Ġcode Ġgen Ġfor Ġenums Ġis Ġnot Ġsupported Ġor Ġnecessary ") ĊĠ Ġ} ĊĊĠ Ġ// ĠAnnotation Ġprocessors Ġdon 't Ġget Ġcalled Ġfor Ġlocal Ġclasses , Ġso Ġwe Ġdon 't Ġhave Ġthe Ġopportunity Ġto ĊĠ Ġ// Ġprint Ġan Ġerror Ġmessage . ĠInstead Ġlocal Ġclasses Ġwill Ġfail Ġat Ġruntime . ĊĠ Ġ@ Ignore Ġ@ Test Ġfun Ġlocal Classes NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġfun Ġouter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠLocal Class ( val Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠLocal Class : Ġmust Ġnot Ġbe Ġlocal ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġobject Declarations NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġobject ĠObject Declaration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto ĠObject Declaration : Ġmust Ġbe Ġa ĠKotlin Ġclass ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġobject Expressions NotSupported () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġobject Ġ: ĠAny () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : Ġ@ Json Class Ġcan 't Ġbe Ġapplied Ġto Ġexpression \$ annotations (): Ġmust Ġbe Ġa ĠKotlin Ġclass ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġrequired Transient Constructor Parameter Fails () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠRequired Transient Constructor Parameter (@ Transient Ġvar Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : ĠNo Ġdefault Ġvalue Ġfor Ġtransient Ġproperty Ġa ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġnon Property Constructor Parameter () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠNon Property Constructor Parameter ( a : ĠInt , Ġval Ġb : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" error : ĠNo Ġproperty Ġfor Ġrequired Ġconstructor Ġparameter Ġa ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġbad Generated Annotation () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġprepare Compilation ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠFoo ( val Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ )). apply Ġ{ ĊĠĠĠĠĠ Ġk apt Args [ Json Class Code gen Processor . OPTION _ GENERATED ] Ġ= Ġ" javax . annotation . Generated B ler g " ĊĠĠĠ Ġ}. compile () ĊĠĠĠ ĠassertThat ( result . messages ). contains ( ĊĠĠĠĠĠĠĠ Ġ" Invalid Ġoption Ġvalue Ġfor Ġ${ Json Class Code gen Processor . OPTION _ GENERATED }") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġmultiple Errors () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass 1 ( private Ġvar Ġa : ĠInt , Ġprivate Ġvar Ġb : ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass 2 ( private Ġvar Ġc : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" property Ġa Ġis Ġnot Ġvisible ") ĊĠĠĠ ĠassertThat ( result . messages ). contains (" property Ġc Ġis Ġnot Ġvisible ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġextend Platform Type () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . Date ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠExt ends Platform Class ( var Ġa : ĠInt ) Ġ: ĠDate () ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" sup ertype Ġjava . util . Date Ġis Ġnot Ġa ĠKotlin Ġtype ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġextend Java Type () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . kotlin . codegen . Java Super class ĊĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠExt ends Java Type ( var Ġb : ĠInt ) Ġ: ĠJava Super class () ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ) ĊĠĠĠĠĠĠĠ Ġ. contains (" sup ertype Ġcom . squareup . mos hi . kotlin . codegen . Java Super class Ġis Ġnot Ġa ĠKotlin Ġtype ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġnon Field Applicable Qualifier () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Annotation Retention . RUNTIME ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Annotation Target . PROPERTY ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Retention ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Target ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Retention ( RUNTIME ) ĊĠĠĠĠĠĠĠĠĠ Ġ@ Target ( PROPERTY ) ĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠUpper Case ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass With Qualifier (@ UpperCase Ġval Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" Json Qualifier Ġ@ UpperCase Ġmust Ġsupport ĠFIELD Ġtarget ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġnon Runtime Qualifier () Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcompile ( kotlin (" source . kt ", ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Class ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . squareup . mos hi . Json Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Annotation Retention . BINARY ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Annotation Target . FIELD ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Annotation Target . PROPERTY ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Retention ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . annotation . Target ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Retention ( BINARY ) ĊĠĠĠĠĠĠĠĠĠ Ġ@ Target ( PROPERTY , ĠFIELD ) ĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠUpper Case ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass With Qualifier (@ UpperCase Ġval Ġa : ĠInt ) ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ)) ĊĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR ) ĊĠĠĠ ĠassertThat ( result . messages ). contains (" Json Qualifier Ġ@ UpperCase Ġmust Ġhave ĠRUN TIME Ġretention ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprepare Compilation ( var arg Ġsource Files : ĠSource File ): ĠKotlin Compilation Ġ{ ĊĠĠĠ Ġreturn ĠKotlin Compilation () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġworking Dir Ġ= Ġtemporary Folder . root ĊĠĠĠĠĠĠĠĠĠ Ġannotation Processors Ġ= ĠlistOf ( Json Class Code gen Processor ()) ĊĠĠĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġsources Ġ= Ġsource Files . asList () ĊĠĠĠĠĠĠĠĠĠ Ġverbose Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcompile ( var arg Ġsource Files : ĠSource File ): ĠKotlin Compilation . Result Ġ{ ĊĠĠĠ Ġreturn Ġprepare Compilation (* source Files ). compile () ĊĠ Ġ} Ċ Ċ } Ċ