package Ġio . project env . intellij plugin . services Ċ Ċ import Ġcom . github . st ef an bir k ner . system lambda . System Lambda . with EnvironmentVariable Ċ import Ġcom . intellij . javascript . nodejs . interpreter . Node Js Interpreter Manager Ċ import Ġcom . intellij . javascript . nodejs . interpreter . local . Node Js Local Interpreter Ċ import Ġcom . intellij . notification . Notification Group Ċ import Ġcom . intellij . notification . Notification Group Manager Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . project Roots . Project J dk Table Ċ import Ġcom . intellij . openapi . project Roots . impl . Project J dk Impl Ċ import Ġcom . intellij . openapi . roots . Order Root Type Ċ import Ġcom . intellij . openapi . roots . Project Root Manager Ċ import Ġcom . intellij . test Framework . He avy Platform TestCase Ċ import Ġcom . intellij . test Framework . replace Service Ċ import Ġio . project env . core . commons . archive . Archive Extractor Factory Ċ import Ġio . project env . core . commons . download . Download Url Subst it utor Factory Ċ import Ġio . project env . core . commons . download . Immutable Download Url Dictionary Ċ import Ġio . project env . core . commons . process . Process Environment Helper . create Extended Path Value Ċ import Ġio . project env . core . commons . process . Process Environment Helper . getPath Variable Name Ċ import Ġio . project env . core . commons . system . CPU Architecture Ċ import Ġio . project env . core . commons . system . Operating System Ċ import Ġio . project env . intellij plugin . services . impl . PROJECT _ ENV _ NOTIFICATION _ GROUP _ NAME Ċ import Ġio . project env . intellij plugin . services . impl . Project Env Cli Resolver ServiceImpl Ċ import Ġio . project env . intellij plugin . services . impl . getProject Env Notification Group Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . apache . commons . io . Filename Utils Ċ import Ġorg . apache . commons . io . IO Utils Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . jetbrains . idea . maven . execution . Maven Runner Settings Ċ import Ġorg . jetbrains . idea . maven . project . Maven Projects Manager Ċ import Ġorg . jetbrains . plugins . gradle . service . project . open . link And Refresh Gradle Project Ċ import Ġorg . jetbrains . plugins . gradle . settings . Gradle Settings Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Argument Matchers . startsWith Ċ import Ġorg . mockito . kotlin . eq Ċ import Ġorg . mockito . kotlin . spy Ċ import Ġorg . mockito . kotlin . verify Ċ import Ġorg . mockito . kotlin . wh enever Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . net . URI Ċ Ċ const Ġval ĠPROJECT _ ENV _ CLI _ VERSION Ġ= Ġ" 3 . 2 . 0 " Ċ Ċ class ĠProject Env Service IT Ġ: ĠHe avy Platform TestCase () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtemp Directory : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnotification Group : ĠNotification Group ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĊĠĠĠĠĠĠĠ Ġtemp Directory Ġ= Ġcreate Temp Directory () ĊĊĠĠĠĠĠĠĠ Ġnotification Group Ġ= Ġspy ( getProject Env Notification Group ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= ĠApplication Manager . getApplication () ĊĠĠĠĠĠĠĠ Ġval Ġnotification Group Manager Ġ= Ġspy ( application . getService ( Notification Group Manager :: class . java )) ĊĠĠĠĠĠĠĠ Ġwhenever ( notification Group Manager . get Notification Group ( PROJECT _ ENV _ NOTIFICATION _ GROUP _ NAME )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Group ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġapplication . replace Service ( Notification Group Manager :: class . java , Ġnotification Group Manager , Ġtest Root Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Refresh Project Env () Ġ{ ĊĠĠĠĠĠĠĠ Ġcopy Resource To Project Root (" invalid - project - env . toml ", Ġ" project - env . toml ") ĊĠĠĠĠĠĠĠ Ġcopy Resource To Project Root (" build . gradle ") ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= Ġproject . service < Project Env Service >() ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġfirst Ġtime ĠProject - Env Ġis Ġref reshed , Ġthe ĠCLI Ġis Ġnot Ġavailable Ġand Ġtherefore Ġare Ġwarning Ġis Ġshown ĊĠĠĠĠĠĠĠ Ġhide Project Env Cli () ĊĠĠĠĠĠĠĠ Ġservice . refresh Project Env () ĊĠĠĠĠĠĠĠ Ġverify ( notification Group !! ). create Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart sWith (" Could Ġnot Ġresolve ĠProject - Env ĠCLI "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( Notification Type . WARNING ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthe Ġsecond Ġtime , Ġthe ĠCLI Ġis Ġavailable Ġand Ġexecuted , Ġbut Ġthe Ġproject - env . toml Ġis Ġinvalid ĊĠĠĠĠĠĠĠ Ġun hide Project Env Cli () ĊĠĠĠĠĠĠĠ Ġval Ġpath Element Ġ= Ġsetup Project Env Cli () ĊĠĠĠĠĠĠĠ Ġwith EnvironmentVariable ( getPath Variable Name (), Ġcreate Extended Path Value ( path Element )). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . refresh Project Env () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Group !! ). create Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart sWith (" Failed Ġto Ġexecute ĠProject - Env ĠCLI "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq ( Notification Type . WARNING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthird Ġtime , Ġthe Ġproject - env . toml Ġis Ġvalid ĊĠĠĠĠĠĠĠ Ġcopy Resource To Project Root (" project - env . toml ") ĊĠĠĠĠĠĠĠ Ġwith EnvironmentVariable ( getPath Variable Name (), Ġcreate Extended Path Value ( path Element )). execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice . refresh Project Env () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Maven Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert J dk Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Node Settings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Gradle Settings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġj dk Ġ= ĠProject Root Manager . getInstance ( project ). project Sdk ĊĠĠĠĠĠĠĠ Ġif Ġ( jdk Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject J dk Table . getInstance (). remove J dk ( jdk ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠFileUtils . force Delete ( temp Directory ) ĊĊĠĠĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Project Env Cli (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdownload Url Ġ= Ġget Project Env Cli Download Url () ĊĠĠĠĠĠĠĠ Ġval Ġtemp Archive File Ġ= Ġget Temp Archive File ( download Url ) ĊĠĠĠĠĠĠĠ Ġdownload Archive ( download Url , Ġtemp Archive File ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Archive Extraction Directory Ġ= Ġget Temp Archive Extraction Directory ( download Url ) ĊĠĠĠĠĠĠĠ Ġextract Archive ( temp Archive File , Ġtemp Archive Extraction Directory ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtemp Archive Extraction Directory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Project Env Cli Download Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdictionary Ġ= ĠImmutable Download Url Dictionary . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Parameters (" VERSION ", ĠPROJECT _ ENV _ CLI _ VERSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Operating System Specific Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" OS ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . MAC OS Ġto Ġ" macos ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . LINUX Ġto Ġ" linux ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . WINDOWS Ġto Ġ" windows " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Operating System Specific Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" FILE _ EXT ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . MAC OS Ġto Ġ" tar . gz ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . LINUX Ġto Ġ" tar . gz ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOperating System . WINDOWS Ġto Ġ" zip " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. put CPU Architecture Specific Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" CPU _ ARCH ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCPU Architecture . X 6 4 Ġto Ġ" amd 6 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDownload Url Subst it utor Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Download Url Variable Subst it utor ( dictionary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" https :// github . com / Project - Env / project - env - core / releases / download / v \ ${ VERSION }/ cli -\ ${ VERSION }- \ ${ OS }- \ ${ CPU _ ARCH }. \ ${ FILE _ EXT }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Temp Archive File ( download Url : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarchive Filename Ġ= ĠFilename Utils . getName ( download Url ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠFile . create TempFile (" junit ", Ġarchive Filename , Ġtemp Directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Temp Archive Extraction Directory ( download Url : ĠString ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarchive Filename Ġ= ĠFilename Utils . getName ( download Url ) ĊĠĠĠĠĠĠĠ Ġval Ġarchive File Extension Ġ= ĠFilename Utils . getExtension ( download Url ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Temp Directory ( archive Filename . remove Suffix (" .$ archive File Extension "), Ġtemp Directory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload Archive ( download Url : ĠString , Ġtarget : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBuffered InputStream ( URI ( download Url ). to URL (). open Stream ()). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( target ). use Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Archive ( archive : ĠFile , Ġtarget : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ ĠArchive Extractor Factory . create Archive Extractor (). extract Archive ( archive , Ġtarget ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Maven Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Tool Path ( Maven Projects Manager . getInstance ( project ). general Settings . maven Home ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert J dk Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġj dk Ġ= ĠProject Root Manager . getInstance ( project ). project Sdk Ġas ĠProject J dk Impl ĊĠĠĠĠĠĠĠ Ġassert Tool Path ( jdk . home Path ) ĊĠĠĠĠĠĠĠ ĠassertThat ( jdk . get Urls ( Order Root Type . CLASSES )). has Size ( 7 7 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( Maven Projects Manager . getInstance ( project ). import ing Settings . jdk For Importer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( Maven Runner Settings . USE _ PROJECT _ JDK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Node Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterpreter Ġ= ĠNode Js Interpreter Manager . getInstance ( project ). interpreter ĊĠĠĠĠĠĠĠ ĠassertThat ( interpreter ). isInstanceOf ( Node Js Local Interpreter :: class . java ) ĊĠĠĠĠĠĠĠ Ġassert Tool Path (( interpreter Ġas ĠNode Js Local Interpreter ). interpreter System Dependent Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Gradle Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġlink And Refresh Gradle Project ( getProject Root (). canonical Path , Ġproject ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlinked Projects Settings Ġ= ĠGradle Settings . getInstance ( project ). linked Projects Settings ĊĠĠĠĠĠĠĠ ĠassertThat ( linked Projects Settings ). has Size ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Settings Ġ= Ġlinked Projects Settings . first () ĊĠĠĠĠĠĠĠ Ġassert Tool Path ( project Settings . gradle Home ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Tool Path ( path : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( normalize Path ( path )). startsWith ( normalize Path ( getProject Root (). canonical Path )) ĊĠĠĠĠĠĠĠ ĠassertThat ( File ( path !! )). exists () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormalize Path ( path : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ?. replace ('\\ ', Ġ'/') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Resource To Project Root ( resource : ĠString , Ġtarget : ĠString ? Ġ= Ġnull ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresulting File Ġ= ĠFile ( getProject Root (), Ġtarget Ġ?: Ġresource ) ĊĠĠĠĠĠĠĠ ĠFileUtils . force Mk dir Parent ( result ing File ) ĊĊĠĠĠĠĠĠĠ Ġjava Class . getResource AsStream ( resource ). use Ġ{ ĠinputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( result ing File ). use Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . copy ( inputStream , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresulting File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Project Env Cli () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . replace Service ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Env Cli Resolver Service :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠProject Env Cli Resolver Service Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresolve Cli (): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnoop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun hide Project Env Cli () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . replace Service ( Project Env Cli Resolver Service :: class . java , ĠProject Env Cli Resolver ServiceImpl (), Ġproject ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Temp Directory ( suffix : ĠString ? Ġ= Ġnull , Ġparent : ĠFile ? Ġ= Ġnull ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemporary Folder Ġ= ĠFile . create TempFile (" junit ", Ġsuffix , Ġparent ) ĊĠĠĠĠĠĠĠ ĠassertThat ( temporary Folder . delete ()). isTrue () ĊĠĠĠĠĠĠĠ ĠFileUtils . force Mk dir ( temporary Folder ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtemporary Folder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Project Root (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( project . basePath !! ) ĊĠĠĠ Ġ} Ċ } Ċ