package Ġio . pol ymorphic p anda . k spec . console Ċ Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġio . pol ymorphic p anda . k spec . console . reporter . Console Reporter Ċ import Ġio . pol ymorphic p anda . k spec . launcher . K Spec Launcher Ċ import Ġio . pol ymorphic p anda . k spec . launcher . Launch Configuration Ċ import Ġj opts imple . Option Exception Ċ import Ġj opts imple . Option Parser Ċ import Ġj opts imple . Option Set Ċ import Ġorg . jetbrains . kotlin . cli . common . CLI Configuration Keys Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Print ing Message Collector Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Environment Config Files Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Kotlin Core Environment Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Kotlin To JVM Byte code Compiler Ċ import Ġorg . jetbrains . kotlin . cli . jvm . config . JVM Configuration Keys Ċ import Ġorg . jetbrains . kotlin . cli . jvm . config . add Jvm Classpath Roots Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . config . add Kotlin Source Root Ċ import Ġorg . jetbrains . kotlin . utils . Kotlin Paths Ċ import Ġorg . jetbrains . kotlin . utils . Path Util Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ class ĠConsole Runner ( val Ġlauncher : ĠK Spec Launcher ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLoggerFactory . getLogger (" io . pol ymorphic p anda . k spec . console . info ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġreporter Ġ= ĠConsole Reporter () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlauncher . add Reporter ( reporter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġparser Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOption Parser (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" h ", Ġ" help "), Ġ" Print s Ġthis Ġmessage .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" v ", Ġ" version "), Ġ" Print s Ġversion Ġinfo .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" s ", Ġ" specs "), Ġ" Single Ġspec Ġ(. kt ) Ġor Ġa Ġdirectory Ġconta ing Ġspec Ġfiles .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. required Unless (" help ", Ġ" version ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Required Arg () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" classpath ", Ġ" cp "), Ġ" Contains Ġthe Ġclasses Ġrequired Ġto Ġrun Ġthe Ġspecs .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Required Arg () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Values Separ ated By ( CLAS SPATH _ SEPARATOR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" f ", Ġ" filter "), Ġ" Filter Ġout Ġspecific Ġspec Ġclasses .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Required Arg () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccepts All ( listOf (" q ", Ġ" query "), Ġ" Specify Ġxpath - like Ġquery .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Required Arg () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠOption Set . get OrDefault ( option : ĠString , Ġdefault : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( has ( option )) Ġvalue Of ( option ) Ġas ĠT Ġelse Ġdefault ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT > ĠOption Set . get ( option : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Of ( option ) Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun ( var arg Ġargs : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoption Set Ġ= Ġparser . parse (* args ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option Set . has (" help ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Help Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( option Set . has (" version ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint VersionInfo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= Ġoption Set . get OrDefault (" filter ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġoption Set . get OrDefault (" query ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= ĠPaths . get ( option Set . get < String >(" specs ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcp Ġ= Ġoption Set . values Of (" cp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠString Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPaths . get ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠLaunch Configuration ( compile Spec ( target , Ġcp ), Ġcp , Ġfilter , Ġquery ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlauncher . launch ( configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠOption Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠCL AS SPATH _ SEPARATOR Ġ= ĠFile . path Separator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint VersionInfo () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . trace (" K Spec Ġv ${ Version . K SPEC _ VERSION } Ġ( Kotlin Ġv ${ Version . K OT LIN _ VERSION }) ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Help Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġparser . print Help On ( buffer ) ĊĠĠĠĠĠĠĠ Ġlogger . trace ( buffer . toString ( Charsets . UTF _ 8 . name ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompile Spec ( source : ĠPath , Ġclasspath : ĠList < Path >): ĠPath Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Dir Ġ= ĠFiles . create Temp Directory (" k spec - ") ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Disposable Ġ= ĠDis poser . new Disposable () ĊĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠCompiler Configuration () ĊĊĠĠĠĠĠĠĠ Ġval Ġmessage Collector Ġ= ĠPrint ing Message Collector . PLAIN _ TEXT _ TO _ SYSTEM _ ERR ĊĊĠĠĠĠĠĠĠ Ġconfiguration . add Kotlin Source Root ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġconfiguration . put ( JVM Configuration Keys . MODULE _ NAME , Ġout Dir . fileName . toString ()) ĊĠĠĠĠĠĠĠ Ġconfiguration . put ( CLI Configuration Keys . MESSAGE _ COLLECT OR _ KEY , Ġmessage Collector ) ĊĠĠĠĠĠĠĠ Ġconfiguration . add Jvm Classpath Roots ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetClass Path ( Path Util . get Kotlin Paths For Compiler (), Ġclasspath ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġenvironment Ġ= ĠKotlin Core Environment . create For Production ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Disposable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment Config Files . JVM _ CONFIG _ FILES ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠKotlin To JVM Byte code Compiler . compile B unch Of Sources ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Dir . to File (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġout Dir ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetClass Path ( paths : ĠKotlin Paths , Ġclasspath : ĠList < Path >): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġarray ListOf < File >() ĊĠĠĠĠĠĠĠ Ġresult . addAll ( Path Util . get J dk Classes Roots ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġcl Ġ= Ġjava Class . class Loader Ġas ĠURL ClassLoader ĊĊĠĠĠĠĠĠĠ Ġresult . addAll ( classpath . map Ġ{ Ġit . to File () Ġ}) ĊĠĠĠĠĠĠĠ Ġresult . addAll ( cl . ur Ls . map Ġ{ ĠPaths . get ( it . to URI ()). to File () Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ