/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . compiler Runner Ċ Ċ import Ġcom . intellij . util . xml b . Xml Serializer Util Ċ import Ġorg . jetbrains . j ps . api . Global Options Ċ import Ġorg . jetbrains . kotlin . cli . common . ExitCode Ċ import Ġorg . jetbrains . kotlin . cli . common . K OT LIN _ COMPILER _ ENVIRONMENT _ KEEP AL IVE _ PROPERTY Ċ import Ġorg . jetbrains . kotlin . cli . common . arguments . Common Compiler Arguments Ċ import Ġorg . jetbrains . kotlin . cli . common . arguments . K 2 JS Compiler Arguments Ċ import Ġorg . jetbrains . kotlin . cli . common . arguments . K 2 JVM Compiler Arguments Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Location Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Severity Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Severity . ERROR Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Severity . INFO Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Message Collector Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Message Collector Util Ċ import Ġorg . jetbrains . kotlin . daemon . client . Compilation Services Ċ import Ġorg . jetbrains . kotlin . daemon . client . Daemon Report Message Ċ import Ġorg . jetbrains . kotlin . daemon . client . Daemon Reporting Targets Ċ import Ġorg . jetbrains . kotlin . daemon . client . Kotlin Compiler Client Ċ import Ġorg . jetbrains . kotlin . config . Compiler Settings Ċ import Ġorg . jetbrains . kotlin . daemon . common .* Ċ import Ġorg . jetbrains . kotlin . j ps . build . Kotlin Builder Ċ import Ġorg . jetbrains . kotlin . load . kotlin . incremental . components . Incremental Compilation Components Ċ import Ġorg . jetbrains . kotlin . progress . Compilation Canceled Status Ċ import Ġjava . io .* Ċ import Ġjava . lang . reflect . Field Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠKotlin Compiler Runner Ġ{ ĊĠĠĠ Ġprivate Ġval ĠK 2 JVM _ COMPILER Ġ= Ġ" org . jetbrains . kotlin . cli . jvm . K 2 JVM Compiler " ĊĠĠĠ Ġprivate Ġval ĠK 2 JS _ COMPILER Ġ= Ġ" org . jetbrains . kotlin . cli . js . K 2 JS Compiler " ĊĠĠĠ Ġprivate Ġval ĠINTERNAL _ ERROR Ġ= ĠExit Code . INTERNAL _ ERROR . toString () ĊĊĠĠĠ Ġfun Ġrun K 2 Jvm Compiler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Arguments : ĠCommon Compiler Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk 2 jvm Arguments : ĠK 2 JVM Compiler Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Settings : ĠCompiler Settings , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector : ĠMessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment : ĠCompiler Environment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule File : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠOutput Items Collector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġmerge Beans ( common Arguments , Ġk 2 jvm Arguments ) ĊĠĠĠĠĠĠĠ Ġsetup K 2 Jvm Arguments ( module File , Ġarguments ) ĊĊĠĠĠĠĠĠĠ Ġrun Compiler ( K 2 JVM _ COMPILER , Ġarguments , Ġcompiler Settings . additional Arguments , Ġmessage Collector , Ġcollector , Ġenvironment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun K 2 Js Compiler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Arguments : ĠCommon Compiler Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk 2 js Arguments : ĠK 2 JS Compiler Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler Settings : ĠCompiler Settings , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector : ĠMessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment : ĠCompiler Environment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠOutput Items Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Files : ĠCollection < File >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Files : ĠList < String >, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġmerge Beans ( common Arguments , Ġk 2 js Arguments ) ĊĠĠĠĠĠĠĠ Ġsetup K 2 Js Arguments ( outputFile , Ġsource Files , Ġlibrary Files , Ġarguments ) ĊĊĠĠĠĠĠĠĠ Ġrun Compiler ( K 2 JS _ COMPILER , Ġarguments , Ġcompiler Settings . additional Arguments , Ġmessage Collector , Ġcollector , Ġenvironment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Compiler Output ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector : ĠMessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠOutput Items Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream : ĠByteArrayOutputStream , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( String Reader ( stream . toString ())) ĊĠĠĠĠĠĠĠ ĠCompiler Output Parser . parse Compiler Messages From Reader ( message Collector , Ġreader , Ġcollector ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( INTERNAL _ ERROR Ġ== Ġexit Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Internal Compiler Error ( message Collector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreport Internal Compiler Error ( message Collector : ĠMessage Collector ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage Collector . report ( ERROR , Ġ" Compiler Ġterminated Ġwith Ġinternal Ġerror ", ĠCompiler Message Location . NO _ LOCATION ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Compiler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiler ClassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments : ĠCommon Compiler Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Arguments : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector : ĠMessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠOutput Items Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment : ĠCompiler Environment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector . report ( INFO , Ġ" Using Ġkotlin - home Ġ= Ġ" Ġ+ Ġenvironment . kotlin Paths . home Path , ĠCompiler Message Location . NO _ LOCATION ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarguments List Ġ= ĠArgument Utils . convert Arguments ToString List ( arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments List . addAll ( additional Arguments . split (" Ġ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Array Ġ= Ġarguments List . to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! try Compile With Daemon ( compiler ClassName , Ġargs Array , Ġenvironment , Ġmessage Collector , Ġcollector )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġfallback Ġto Ġin - process ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Builder . LOG . info (" Compile Ġin - process ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠPrint Stream ( stream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġproperty Ġshould Ġbe Ġset Ġat Ġleast Ġfor Ġparallel Ġbuilds Ġto Ġavoid Ġparallel Ġbuilding Ġproblems Ġ( r acing Ġbetween Ġdestroy ing Ġand Ġusing Ġenvironment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġunfortunately Ġit Ġcannot Ġbe Ġcurrently Ġset Ġby Ġdefault Ġglobally , Ġbecause Ġit Ġbreaks Ġmany Ġtests ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince Ġthere Ġis Ġno Ġreliable Ġway Ġso Ġfar Ġto Ġdetect Ġrunning Ġunder Ġtests , Ġswitching Ġit Ġon Ġonly Ġfor Ġparallel Ġbuilds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . getProperty ( Global Options . COMPILE _ PAR ALLEL _ OPTION , Ġ" false "). to Boolean ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . setProperty ( K OT LIN _ COMPILER _ ENVIRONMENT _ KEEP AL IVE _ PROPERTY , Ġ" true ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrc Ġ= ĠCompiler Runner Util . invoke Exec Method ( compiler ClassName , Ġargs Array , Ġenvironment , Ġmessage Collector , Ġout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexec () Ġreturns Ġan ĠExit Code Ġobject , Ġclass Ġof Ġwhich Ġis Ġloaded Ġwith Ġa Ġdifferent Ġclass Ġloader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġwe Ġtake Ġit 's Ġcontents Ġthrough Ġreflection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Compiler Output ( message Collector , Ġcollector , Ġstream , Ġget Return Code From Object ( rc )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Collector Util . report Exception ( message Collector , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Internal Compiler Error ( message Collector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠDa emon Connection ( val Ġdaemon : ĠCompile Service ?, Ġval ĠsessionId : ĠInt Ġ= ĠCompile Service . NO _ SESSION ) ĊĊĠĠĠ Ġinternal Ġobject Ġget Daemon Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġ@ Volatile Ġvar Ġconnection : ĠDa emon Connection ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Synchron ized Ġoperator Ġfun Ġinvoke ( environment : ĠCompiler Environment , Ġmessage Collector : ĠMessage Collector ): ĠDa emon Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlib Path Ġ= ĠCompiler Runner Util . get Lib Path ( environment . kotlin Paths , Ġmessage Collector ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompiler Id Ġ= ĠCompiler Id . make Compiler Id ( File ( lib Path , Ġ" kotlin - compiler . jar ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Options Ġ= Ġconfigure Daemon Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon JVM Options Ġ= Ġconfigure Daemon JVM Options ( inherit Memory Limits Ġ= Ġtrue , Ġinherit Additional Properties Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Report Messages Ġ= ĠArrayList < Daemon Report Message >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprofiler Ġ= Ġif Ġ( daemon Options . report Perf ) ĠWall And Thread And Memory Total Profiler ( with GC Ġ= Ġfalse ) Ġelse ĠDummy Profiler () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofiler . with Measure ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġnew Flag File (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflag File Ġ= ĠFile . create TempFile (" kotlin - compiler - j ps - session -", Ġ"- is - running ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag File . delete On Exit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġflag File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Ġ= ĠKotlin Compiler Client . connect To Compile Service ( compiler Id , Ġdaemon JVM Options , Ġdaemon Options , ĠDa emon Reporting Targets ( null , Ġdaemon Report Messages ), Ġtrue , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection Ġ= ĠDa emon Connection ( daemon , Ġdaemon ?. lease Compile Session ( new Flag File (). absolute Path )?. get () Ġ?: ĠCompile Service . NO _ SESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( msg Ġin Ġdaemon Report Messages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector . report ( Compiler Message Severity . INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( msg . category Ġ== ĠDa emon Report Category . EXCEPTION Ġ&& Ġconnection ?. daemon Ġ== Ġnull ) Ġ Ġ" Fall ing Ġ Ġback Ġto Ġcompilation Ġwithout Ġdaemon Ġdue Ġto Ġerror : Ġ" Ġelse Ġ"") Ġ+ Ġmsg . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompiler Message Location . NO _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Total And Thread Perf (" Daemon Ġconnect ", Ġdaemon Options , Ġmessage Collector , Ġprofiler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconnection !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Compile With Daemon ( compiler ClassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs Array : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment : ĠCompiler Environment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector : ĠMessage Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠOutput Items Collector ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Daemon Enabled ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Builder . LOG . debug (" Try Ġto Ġconnect Ġto Ġdaemon ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġget Daemon Connection ( environment , Ġmessage Collector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection . daemon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Builder . LOG . info (" Connected Ġto Ġdaemon ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompiler Out Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaemon Out Ġ= ĠByteArrayOutputStream () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservices Ġ= ĠCompilation Services ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincremental Compilation Components Ġ= Ġenvironment . services . get ( Incremental Compilation Components :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Canceled Status Ġ= Ġenvironment . services . get ( Compilation Canceled Status :: class . java )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Platform Ġ= Ġwhen Ġ( compiler ClassName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK 2 JVM _ COMPILER Ġ-> ĠCompile Service . Target Platform . JVM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK 2 JS _ COMPILER Ġ-> ĠCompile Service . Target Platform . JS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġcompiler Ġtype Ġ$ compiler ClassName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠKotlin Compiler Client . incremental Compile ( connection . daemon , Ġconnection . sessionId , Ġtarget Platform , Ġargs Array , Ġservices , Ġcompiler Out , Ġdaemon Out ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Compiler Output ( message Collector , Ġcollector , Ġcompiler Out , Ġres . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( String Reader ( daemon Out . toString ())). forEach Line Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector . report ( Compiler Message Severity . INFO , Ġit , ĠCompiler Message Location . NO _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Builder . LOG . info (" Daemon Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreport Total And Thread Perf ( message : ĠString , Ġdaemon Options : ĠDa emon Options , Ġmessage Collector : ĠMessage Collector , Ġprofiler : ĠProfiler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( daemon Options . report Perf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠLong . ms () Ġ= ĠTimeUnit . NAN O SECONDS . to Millis ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcounters Ġ= Ġprofiler . getTotal Counters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Collector . report ( INFO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PERF : Ġ$ message Ġ${ counters . time . ms ()} Ġms , Ġthread Ġ${ counters . thread Time . ms () }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompiler Message Location . NO _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Return Code From Object ( rc : ĠAny ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrc Ġ== Ġnull Ġ-> Ġreturn ĠINTERNAL _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExit Code :: class . java . name Ġ== Ġrc . java Class . name Ġ-> Ġreturn Ġrc . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unexpected Ġreturn : Ġ" Ġ+ Ġrc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠCommon Compiler Arguments > Ġmerge Beans ( from : ĠCommon Compiler Arguments , Ġto : ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġrewrite Ġwhen Ġupdated Ġversion Ġof Ġcom . intellij . util . xml b Ġis Ġavailable Ġon ĠTeam City ĊĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= ĠXml Serializer Util . create Copy ( to ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Fields Ġ= Ġcollect Fields To Copy ( from . java Class ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( from Field Ġin Ġfrom Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Field Ġ= Ġcopy . java Class . getField ( from Field . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Field . set ( copy , Ġfrom Field . get ( from )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcopy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Fields To Copy ( clazz : ĠClass < *> ): ĠList < Field > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom Fields Ġ= ĠArrayList < Field >() ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Class : ĠClass < *> ? Ġ= Ġclazz ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( field Ġin Ġcurrent Class . declared Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifiers Ġ= Ġfield . modifiers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Modifier . is Static ( modifiers ) Ġ&& ĠModifier . is Public ( modifiers )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Fields . add ( field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Class Ġ= Ġcurrent Class . super class ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfrom Fields ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup K 2 Jvm Arguments ( module File : ĠFile , Ġsettings : ĠK 2 JVM Compiler Arguments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Ġ= Ġmodule File . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Std lib Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno J dk Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup K 2 Js Arguments ( Ġ_ outputFile : ĠFile , Ġsource Files : ĠCollection < File >, Ġ_ library Files : ĠList < String >, Ġsettings : ĠK 2 JS Compiler Arguments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Std lib Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfree Args Ġ= Ġsource Files . map Ġ{ Ġit . path Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile Ġ= Ġ_ outputFile . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta Info Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Files Ġ= Ġ_ library Files . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ