package Ġcom . iv ie league . sk ate čĊč Ċ import Ġjava . io . File č Ċ import Ġjava . io . Print Stream č Ċ import Ġjava . util .* čĊč Ċ fun Ġmain ( var arg Ġargs : ĠString ) Ġ{ čĊĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠ Ġprintln (" Usage : Ġ") čĊĠĠĠĠĠĠĠ Ġprintln (" Run : Ġsk ate Ġ< file > Ġ[ arguments ... ]") čĊĠĠĠĠĠĠĠ Ġprintln (" Edit : Ġsk ate Ġ- edit Ġ< file >") čĊĠĠĠĠĠĠĠ Ġprintln (" Refresh ĠProject : Ġsk ate Ġ- project Ġ< file >") čĊĠĠĠĠĠĠĠ Ġprintln (" Interactive : Ġsk ate Ġ- interactive Ġ< file > Ġ[- y ]") čĊĠĠĠĠĠĠĠ Ġprintln (" Single ĠAction : Ġsk ate Ġ- action Ġ< file > Ġ\" line Of Kotlin () \" ") čĊĠĠĠĠĠĠĠ Ġprintln (" In Ġaddition , Ġyou Ġcan Ġinclude Ġ- v Ġbefore Ġthe Ġfile Ġargument Ġto Ġinclude Ġverbose Ġinformation Ġabout Ġcollecting Ġdependencies .") čĊĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġargs List Ġ= Ġargs . toList () čĊĠĠĠ Ġval Ġflags Ġ= Ġargs . take While Ġ{ Ġit . startsWith ('- ') Ġ}. map Ġ{ Ġit . remove Prefix ("- ") Ġ} čĊĠĠĠ Ġval Ġfile Ġ= Ġargs List . first OrNull Ġ{ Ġ! it . startsWith ('- ') Ġ} ?. let Ġ{ ĠFile ( it ) Ġ} Ġ?: Ġreturn čĊĠĠĠ Ġval Ġverbose Output Ġ= Ġif ( flags . contains (" v ")) ĠSystem . out Ġelse ĠPrint Stream ( Null OutputStream ) čĊčĊĠĠĠ Ġwhen Ġ{ čĊĠĠĠĠĠĠĠ Ġflags . contains (" p ") Ġ|| Ġflags . contains (" project ") Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check If File ShouldBe Created ( file , Ġargs )) Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Res olving Ġdependencies ... Ġ( use Ġ- v Ġfor Ġmore Ġinfo )") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Info Ġ= ĠSk ate . resolve ( file , Ġverbose Output ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠIntelliJ . single Module Project ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= Ġfile Info . sources . distinct (). toList (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries Ġ= Ġfile Info . libraries . distinct (). toList (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Ġ= Ġfile Info . project Folder , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Class Ġ= Ġfile Info . main čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Project Ġref reshed Ġat Ġ$ project ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġflags . contains (" e ") Ġ|| Ġflags . contains (" edit ") Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check If File ShouldBe Created ( file , Ġargs )) Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Res olving Ġdependencies ... Ġ( use Ġ- v Ġfor Ġmore Ġinfo )") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Info Ġ= ĠSk ate . resolve ( file , Ġverbose Output ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠIntelliJ . single Module Project ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ= Ġfile Info . sources . distinct (). toList (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibraries Ġ= Ġfile Info . libraries . distinct (). toList (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfolder Ġ= Ġfile Info . project Folder , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Class Ġ= Ġfile Info . main čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntelliJ . launch ( project ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntelliJ . launch ( project . resolve (" src /${ file . name } ")) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġflags . contains (" i ") Ġ|| Ġflags . contains (" interactive ") Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( true ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Res olving Ġdependencies ... Ġ( use Ġ- v Ġfor Ġmore Ġinfo )") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsk ate Result Ġ= ĠSk ate . get J ars For Kt ( file , Ġverbose Output ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠJVM . run Interactive ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ars Ġ= Ġsk ate Result . j ars , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Imports Ġ= Ġsk ate Result . fileInfo . auto Imports čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! result ) Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġflags . contains (" a ") Ġ|| Ġflags . contains (" action ") Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Res olving Ġdependencies ... Ġ( use Ġ- v Ġfor Ġmore Ġinfo )") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġargs . slice Array ( 1 .. args . last Index ). join ToString ("; Ġ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsk ate Result Ġ= ĠSk ate . get J ars For Kt ( file , Ġverbose Output ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠJVM . run With Line ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ars Ġ= Ġsk ate Result . j ars , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Imports Ġ= Ġsk ate Result . fileInfo . auto Imports , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġaction čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Res olving Ġdependencies ... Ġ( use Ġ- v Ġfor Ġmore Ġinfo )") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsk ate Result Ġ= ĠSk ate . get J ars For Kt ( file , Ġverbose Output ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠJVM . run Main ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ars Ġ= Ġsk ate Result . j ars , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Class Ġ= Ġsk ate Result . fileInfo . file ClassName , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġargs . slice Array ( 1 .. args . last Index ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ private Ġfun Ġcheck If File ShouldBe Created ( file : ĠFile , Ġargs : ĠArray < out ĠString >): ĠBoolean Ġ{ čĊĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( args . contains ("- y ") Ġ|| Ġargs . contains ("- Y ")) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscanner Ġ= ĠScanner ( System .` in `) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" The Ġfile Ġ'$ file ' Ġdoes Ġnot Ġexist . Ġ ĠDo Ġyou Ġwish Ġto Ġcreate Ġit ? Ġ[ y / n ]") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel @ Ġwhile Ġ( true ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( scanner . nextLine ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y ", Ġ" Y ", Ġ" yes ", Ġ" YES " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ label čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" n ", Ġ" N ", Ġ" no ", Ġ" NO " Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Repeat čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġfalse č Ċ } čĊ