package Ġio . aes y . y am ll int Ċ Ċ import Ġcom . intellij . execution . ExecutionException Ċ import Ġcom . intellij . execution . configurations . General CommandLine Ċ import Ġcom . intellij . openapi . components . Service Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . time . Duration Ċ Ċ @ Service Ċ class ĠY am ll int Executable Finder ( ĊĠĠĠ Ġproject : ĠProject Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġget Logger () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtimeout Ġ= ĠDuration . of Seconds ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= Ġproject . service < CommandLine Executor >() ĊĊĠĠĠ Ġfun Ġfind (): ĠVirtual File ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠGeneral CommandLine () ĊĠĠĠĠĠĠĠ Ġcommand . charset Ġ= ĠStandard Charsets . UTF _ 8 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( System Info . is Windows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . exe Path Ġ= Ġ" where " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . exe Path Ġ= Ġ" which " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcommand . add Parameter (" y am ll int ") ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute ( command , Ġtimeout ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Failed Ġto Ġfind Ġy am ll int Ġexecutable : ĠFailed Ġto Ġexecute Ġcommand ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstdout Ġ= Ġoutput . stdout . remove Suffix ("\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġstderr Ġ= Ġoutput . stderr . remove Suffix ("\ n ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( output . exit Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Failed Ġto Ġfind Ġy am ll int Ġexecutable : ĠExpected Ġexit Ġcode Ġ 0 , Ġbut Ġgot Ġ${ output . exit Code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Y am ll int Ġerror Ġoutput : Ġ$ stderr ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . debug (" Y am ll int Ġoutput : Ġ$ stdout ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( stdout ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Failed Ġto Ġfind Ġy am ll int Ġexecutable : Ġcommand Ġsucceeded , Ġbut Ġfile Ġdoes Ġnot Ġexist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠV fs Util . find File By Io File ( file , Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ