package Ġer go Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation . ExitCode Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġhead out . oss . er go . processors . Task Processor Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . jetbrains . kotlin x . serialization . compiler . extensions . Serialization Component Registrar Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsh iv an sh s 9 Ġon Ġ 2 1 / 0 5 / 2 0 . Ċ Ġ*/ Ċ class ĠKotlin Task Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstatic No Arg () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" no Arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġno Arg (): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Arg () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" no Arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġno Arg (): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġone Arg () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" one Arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsquare ( num : ĠInt ) Ġ= Ġnum Ġ* Ġnum ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsuspend No Arg () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . listeners . Job Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlinx . coroutines . delay ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" suspend No Arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġlong Process (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" hello Ġworld " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsuspend One Arg () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . listeners . Job Callback ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" suspend One Arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġlong Process ( num : ĠInt ) Ġ= Ġnum Ġ* Ġnum ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Arg With Non Serializable Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" no Arg With Non Serializable Result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġno Arg With Non Serializable Result (): ĠResult Ġ= ĠResult ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠResult ( val Ġnumber : ĠInt ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result , Ġexit Code Ġ= ĠExit Code . COMPI L ATION _ ERROR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Arg With Serializable Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlinx . serialization . Serializable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" no Arg With Serializable Result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġno Arg With Serializable Result (): ĠResult Ġ= ĠResult ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Serializable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠResult ( val Ġnumber : ĠInt ) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Arg With Unit Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" no Arg With Unit Result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġno Arg With Unit Result (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" do ing Ġsome Ġwork ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDefault ĠValue Ġis Ġnot Ġyet Ġsupported Ġin Ġkotlin po et Ġso Ġthe ĊĠĠĠ Ġ// Ġgenerated Ġrequest Ġdata Ġclass Ġis Ġactually Ġinvalid ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġone Arg With DefaultValue () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġexample . tasks ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhead out . oss . er go . annotations . Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExample Task Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Task ( taskId =" one Arg With DefaultValue ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġone Arg With DefaultValue ( num : ĠInt Ġ= Ġ 1 3 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" do ing Ġsome Ġwork Ġx Ġ$\ num ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source ) ĊĠĠĠĠĠĠĠ Ġassert Result ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Result ( result : ĠKotlin Compilation . Result , Ġexit Code : ĠExit Code Ġ= ĠExit Code . OK ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . sources Generated By Annotation Processor . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . canonical Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . read Text ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( result . exit Code ). isEqualTo ( exit Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompile (@ Language (" kotlin ") Ġsource : ĠString ) Ġ= ĠKotlin Compilation (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsources Ġ= ĠlistOf ( SourceFile . kotlin ( EXAMPLE _ K OT LIN _ FILE , Ġsource )) ĊĠĠĠĠĠĠĠ Ġannotation Processors Ġ= ĠlistOf ( Task Processor ()) ĊĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcompiler Plugins Ġ= ĠlistOf ( Serialization Component Registrar ()) ĊĠĠĠĠĠĠĠ Ġmessage OutputStream Ġ= ĠSystem . out ĊĠĠĠ Ġ}. compile () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX AMPLE _ K OT LIN _ FILE Ġ= Ġ" Example Task . kt " ĊĠĠĠ Ġ} Ċ }