package Ġme . ser ce . artifact gen Ċ Ċ import Ġcom . intellij . execution . process . Base OS Process Handler Ċ import Ġcom . intellij . execution . process . Process Adapter Ċ import Ġcom . intellij . execution . process . Process Event Ċ import Ġcom . intellij . execution . process . Process Output Types Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġorg . jetbrains . j ps . builders . artifacts . Artifact Build Task Provider Ċ import Ġorg . jetbrains . j ps . incremental . Build Task Ċ import Ġorg . jetbrains . j ps . incremental . Compile Context Ċ import Ġorg . jetbrains . j ps . incremental . Project Build Exception Ċ import Ġorg . jetbrains . j ps . incremental . Stop Build Exception Ċ import Ġorg . jetbrains . j ps . incremental . messages . Build Message Ċ import Ġorg . jetbrains . j ps . incremental . messages . Compiler Message Ċ import Ġorg . jetbrains . j ps . model . artifact . J ps Artifact Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean ĊĊ Ċ class ĠAG Artifact Build Task Provider Ġ: ĠArtifact Build Task Provider () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Artifact Build Tasks ( artifact : ĠJ ps Artifact , Ġbuild Phase : ĠArtifact Build Phase ): ĠList < Build Task > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( build Phase Ġ== ĠArtifact Build Phase . PRE _ PROCESS ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġext : ĠModule Artifact Ext ? Ġ= Ġartifact . container . getChild ( AG PRE PROCESS ING _ ROLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ext Ġ!= Ġnull Ġ&& Ġext . cmd . isNotEmpty () Ġ&& Ġext . name . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( Ag Build Task ( ext )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAg Build Task ( val Ġext : ĠModule Artifact Ext ) Ġ: ĠBuild Task () Ġ{ ĊĠĠĠ Ġval ĠBU IL DER _ NAME Ġ= Ġ" artifact gen " ĊĠĠĠ Ġval ĠLOG Ġ= ĠLogger . getInstance ( Ag Build Task :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġbuild ( context : ĠCompile Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Line Ġ= ĠlistOf (" bash ", Ġ"- c ", Ġext . cmd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠProcess Builder ( command Line ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Line String Ġ= ĠString Util . join ( command Line , Ġ" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( LOG . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" Starting Ġartifact gen Ġtarget :" Ġ+ Ġcommand Line String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠBase OS Process Handler ( process , Ġcommand Line String , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Errors Ġ= ĠAtomic Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . add Process Listener ( object Ġ: ĠProcess Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstd Err Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstd Out Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Text Available ( event : ĠProcess Event , Ġoutput Type : ĠKey <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( output Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Output Types . STD ERR Ġ-> Ġstd Err . append ( event . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Output Types . STDOUT Ġ-> Ġstd Out . append ( event . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprocess Terminated ( event : ĠProcess Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= Ġevent . exit Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exit Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . process Message ( Compiler Message ( BUILDER _ NAME , ĠBuild Message . Kind . ERROR , Ġstd Out . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . process Message ( Compiler Message ( BUILDER _ NAME , ĠBuild Message . Kind . ERROR , Ġstd Err . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . process Message ( Compiler Message ( BUILDER _ NAME , ĠBuild Message . Kind . ERROR , Ġ" Cannot Ġrun Ġ'${ ext . cmd }' ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Errors . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . start Notify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Errors . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠStop Build Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProject Build Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ