/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠB rian ĠNorm an Ċ Ġ* Ċ Ġ* Ġ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 Ġco . touch lab . expose Ċ Ċ // import Ġco . touch lab . expose . Expose Component Registrar Ċ // import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ // import Ġcom . tsch uch ort . compile testing . SourceFile Ċ // import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ // import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠIr Plugin Early Return Test Ġ{ Ċ Ċ // Ġ Ġprivate Ġval Ġearly Return Ġ= ĠSource File . kotlin ( Ċ // ĠĠĠ Ġ" Early Return . kt ", Ġ""" Ċ // import Ġco . touch lab . expose . Expose Ċ // Ċ //@ Expose Ċ // fun Ġearly Return ( input : ĠString ): ĠString Ġ{ Ċ // ĠĠĠ Ġif Ġ( input Ġ== Ġ" EAR LY _ RETURN _ 1 ") Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ" Early Ġreturn Ġ- Ġ 1 " Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġif Ġ( input Ġ== Ġ" EAR LY _ RETURN _ 2 ") Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ" Early Ġreturn Ġ- Ġ 2 " Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġreturn Ġ" Normal Ġreturn " Ċ //} Ċ // """ Ċ // Ġ Ġ) Ċ // Ċ // Ġ Ġprivate Ġval Ġearly Exit Ġ= ĠSource File . kotlin ( Ċ // ĠĠĠ Ġ" Early Exit . kt ", Ġ""" Ċ // import Ġco . touch lab . expose . Expose Ċ // Ċ //@ Expose Ċ // fun Ġearly Exit ( input : ĠString ) Ġ{ Ċ // ĠĠĠ Ġif Ġ( input Ġ== Ġ" EAR LY _ RETURN _ 1 ") Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġif Ġ( input Ġ== Ġ" EAR LY _ RETURN _ 2 ") Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠ Ġ} Ċ //} Ċ // """ Ċ // Ġ Ġ) Ċ // Ċ // Ġ Ġ@ Test Ċ // Ġ Ġfun Ġ` IR Ġplugin Ġenabled Ġ- Ġwith Ġearly Ġreturn `() Ġ{ Ċ // ĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source File Ġ= Ġearly Return , ĠEx pose Component Registrar ( true )) Ċ // ĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code ) Ċ // Ċ // ĠĠĠ Ġassert Function ( result . java Code (" Early Return Kt "), Ġ" public Ġstatic Ġfinal ĠString Ġearly Return ", Ċ // ĠĠĠĠĠ Ġ""" Ċ // ĠĠĠĠĠ Ġpublic Ġstatic Ġfinal ĠString Ġearly Return (@ NotNull Ġfinal ĠString Ġinput ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ ĠIntr insics . checkNotNull Parameter ( input , Ġ" input "); Ċ // ĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ¢ Ġearly Return ( input =" Ġ+ Ġinput Ġ+ Ġ') ')); Ċ // ĠĠĠĠĠĠĠĠĠ Ġfinal ĠTime Mark Ġmark Now Ġ= ĠTime Source . Mon otonic . INSTANCE . mark Now (); Ċ // ĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Intr insics . are Equal ( input , Ġ" EAR LY _ RETURN _ 1 ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Return Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ"] Ġ= Ġ" Ġ+ Ġ" Early Ġreturn Ġ- Ġ 1 ")); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Early Ġreturn Ġ- Ġ 1 "; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Intr insics . are Equal ( input , Ġ" EAR LY _ RETURN _ 2 ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Return Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ"] Ġ= Ġ" Ġ+ Ġ" Early Ġreturn Ġ- Ġ 2 ")); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Early Ġreturn Ġ- Ġ 2 "; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Return Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ"] Ġ= Ġ" Ġ+ Ġ" Normal Ġreturn ")); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Normal Ġreturn "; Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( Throwable Ġt ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Return Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ"] Ġ= Ġ" Ġ+ Ġt )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ; Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ""" . trim Indent ()) Ċ // Ġ Ġ} Ċ // Ċ // Ġ Ġ@ Test Ċ // Ġ Ġfun Ġ` IR Ġplugin Ġenabled Ġ- Ġwith Ġearly Ġexit `() Ġ{ Ċ // ĠĠĠ Ġval Ġresult Ġ= Ġcompile ( source File Ġ= Ġearly Exit , ĠEx pose Component Registrar ( true )) Ċ // ĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code ) Ċ // Ċ // ĠĠĠ Ġassert Function ( result . java Code (" Early Exit Kt "), Ġ" public Ġstatic Ġfinal Ġvoid Ġearly Exit ", Ċ // ĠĠĠĠĠ Ġ""" Ċ // ĠĠĠĠĠ Ġpublic Ġstatic Ġfinal Ġvoid Ġearly Exit (@ NotNull Ġfinal ĠString Ġinput ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ ĠIntr insics . checkNotNull Parameter ( input , Ġ" input "); Ċ // ĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ¢ Ġearly Exit ( input =" Ġ+ Ġinput Ġ+ Ġ') ')); Ċ // ĠĠĠĠĠĠĠĠĠ Ġfinal ĠTime Mark Ġmark Now Ġ= ĠTime Source . Mon otonic . INSTANCE . mark Now (); Ċ // ĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Intr insics . are Equal ( input , Ġ" EAR LY _ RETURN _ 1 ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Exit Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ'] ')); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Intr insics . are Equal ( input , Ġ" EAR LY _ RETURN _ 2 ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Exit Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ'] ')); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Exit Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ'] ')); Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( Throwable Ġt ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (( Object )(" â ĩ ł Ġearly Exit Ġ[" Ġ+ Ġ( Object ) Duration . toString - impl ( mark Now . elapsed Now - U wy O 8 pc ()) Ġ+ Ġ"] Ġ= Ġ" Ġ+ Ġt )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġt ; Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠ Ġ""" . trim Indent ()) Ċ // Ġ Ġ} Ċ } Ċ