/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠJetBrains Ġs . r . o . Ċ Ġ* Ġ< p /> Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ< p /> Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ġ< p /> Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ċ Ġ* Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ċ Ġ* Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ġ< p /> Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ġ< p /> Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ* AS ĠIS *, ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO Ċ Ġ* ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , Ċ Ġ* ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . plugins . azure . functions . run Ċ Ċ import Ġcom . intellij . util . execution . Parameters List Util Ċ import Ġcom . jetbrains . rd . util . lifetime . Lifetime Ċ import Ġcom . jetbrains . rd . util . reactive . adv ise Once Ċ import Ġcom . jetbrains . r ider . model .* Ċ import Ġcom . jetbrains . r ider . run . configurations . controls .* Ċ import Ġcom . jetbrains . r ider . run . configurations . controls . start Browser . Browser Settings Ċ import Ġcom . jetbrains . r ider . run . configurations . controls . start Browser . Browser Settings Editor Ċ import Ġcom . jetbrains . r ider . run . configurations . dot Net Exe . DotNet Exe Configuration ViewModel Ċ import Ġcom . jetbrains . r ider . run . configurations . project . DotNet Start Browser Parameters Ċ import Ġjava . io . File Ċ Ċ class ĠAzure Functions Host Configuration ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlifetime : ĠL ifetime , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrunnable Projects Model : ĠRunnable Projects Model , ĊĠĠĠĠĠĠĠ Ġval Ġproject Selector : ĠProject Selector , ĊĠĠĠĠĠĠĠ Ġval Ġtf m Selector : ĠString Selector , ĊĠĠĠĠĠĠĠ Ġprogram Parameters Editor : ĠProgram Parameters Editor , ĊĠĠĠĠĠĠĠ Ġworking Directory Selector : ĠPath Selector , ĊĠĠĠĠĠĠĠ Ġval Ġfunction Names Editor : ĠText Editor , ĊĠĠĠĠĠĠĠ Ġenvironment Variables Editor : ĠEnvironment Variables Editor , ĊĠĠĠĠĠĠĠ Ġuse External Console Editor : ĠFlag Editor , ĊĠĠĠĠĠĠĠ Ġval Ġseparator : ĠView Separator , ĊĠĠĠĠĠĠĠ Ġval Ġurl Editor : ĠText Editor , ĊĠĠĠĠĠĠĠ Ġval Ġdot Net Browser Settings Editor : ĠBrowser Settings Editor Ċ ) Ġ: ĠDot Net Exe Configuration ViewModel ( ĊĠĠĠĠĠĠĠ Ġlifetime , ĊĠĠĠĠĠĠĠ ĠPath Selector ("", Ġnull , Ġlifetime ), ĊĠĠĠĠĠĠĠ Ġprogram Parameters Editor , ĊĠĠĠĠĠĠĠ Ġworking Directory Selector , ĊĠĠĠĠĠĠĠ Ġenvironment Variables Editor , ĊĠĠĠĠĠĠĠ ĠFlag Editor (""), ĊĠĠĠĠĠĠĠ ĠProgram Parameters Editor ("", Ġlifetime ), ĊĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġuse External Console Editor ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontrols : ĠList < Control Base > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf m Selector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory Selector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Names Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Variables Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse External Console Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Browser Settings Editor ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġis Loaded Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġtype Ġ= ĠAzure Functions Host Configuration Type () ĊĊĠĠĠ Ġvar Ġtrack Project Exe Path Ġ= Ġtrue ĊĠĠĠ Ġvar Ġtrack Project Arguments Ġ= Ġtrue ĊĠĠĠ Ġvar Ġtrack Project Working Directory Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġval Ġport Regex Ġ= ĠRegex ("-- port Ġ( \\ d + )", ĠRegex Option . IGNORE _ CASE ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdisable () ĊĊĠĠĠĠĠĠĠ Ġproject Selector . bind To ( run nable Projects Model , Ġlifetime , Ġ{ Ġp Ġ-> Ġtype . is Applicable ( p . kind ) Ġ}, Ġ:: enable , Ġ:: handle Project Selection ) ĊĊĠĠĠĠĠĠĠ Ġtf m Selector . string . adv ise ( lifetime ) Ġ{ ĠhandleChange T fm Selection () Ġ} ĊĠĠĠĠĠĠĠ Ġexe Path Selector . path . adv ise ( lifetime ) Ġ{ Ġre calculate Track Project Output () Ġ} ĊĠĠĠĠĠĠĠ Ġprogram Parameters Editor . parameters String . adv ise ( lifetime ) Ġ{ Ġre calculate Track Project Output () Ġ} ĊĠĠĠĠĠĠĠ Ġworking Directory Selector . path . adv ise ( lifetime ) Ġ{ Ġre calculate Track Project Output () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠhandleChange T fm Selection () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Selector . project . value OrNull ?. project Outputs ?. single OrNull Ġ{ Ġit . tf m Ġ== Ġtf m Selector . string . value OrNull Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Change Exe Path Ġ= Ġtrack Project Exe Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Change Working Directory Ġ= Ġtrack Project Working Directory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Change Exe Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexe Path Selector . path . set ( it . exe Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Change Working Directory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory Selector . path . set ( it . working Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexe Path Selector . defaultValue . set ( it . exe Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġwe Ġhave Ġthe Ġdefaults Ġif Ġneeded ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatched Project Output Ġ= ĠAzure Functions Runnable Project Util . patch Project Output ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... but Ġkeep Ġthe Ġprevious Ġvalue Ġif Ġit 's Ġnot Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( program Parameters Editor . parameters String . value . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( patched Project Output . default Arguments . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor . parameters String . set ( Parameters List Util . join ( patched Project Output . default Arguments )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor . defaultValue . set ( Parameters List Util . join ( patched Project Output . default Arguments )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor . parameters String . set ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor . defaultValue . set ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory Selector . defaultValue . set ( patched Project Output . working Directory ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre calculate Track Project Output () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Project Ġ= Ġproject Selector . project . value OrNull ĊĠĠĠĠĠĠĠ Ġval Ġselected T fm Ġ= Ġtf m Selector . string . value OrNull ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Project Ġ!= Ġnull Ġ&& Ġselected T fm Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Project . project Outputs . single OrNull Ġ{ Ġit . tf m Ġ== Ġselected T fm Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Exe Path Ġ= Ġexe Path Selector . path . value Ġ== Ġit . exe Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Arguments Ġ= Ġ( it . default Arguments . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġprogram Parameters Editor . parameters String . value Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameters List Util . join ( it . default Arguments )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Working Directory Ġ= Ġworking Directory Selector . path . value Ġ== Ġit . working Directory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġport Regex . find ( program Parameters Editor . parameters String . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull Ġ&& Ġresult . groups . count () Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . defaultValue . value Ġ= Ġ" http :// localhost :${ result . group Values [ 1 ]}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . text . value Ġ= Ġ" http :// localhost :${ result . group Values [ 1 ]}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Browser Settings Editor . settings . value Ġ= ĠBrowser Settings ( false , Ġfalse , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Project Selection ( project : ĠRunnable Project ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Loaded ) Ġreturn ĊĠĠĠĠĠĠĠ Ġreload T fm Selector ( project ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Browser Url Ġ= Ġproject . custom Attributes . single OrNull Ġ{ Ġit . key Ġ== ĠKey . Start Browser Url Ġ} ?. value Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġlaunch Browser Ġ= Ġproject . custom Attributes . single OrNull Ġ{ Ġit . key Ġ== ĠKey . Launch Browser Ġ} ?. value ?. to Boolean () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( start Browser Url . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . defaultValue . value Ġ= Ġstart Browser Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . text . value Ġ= Ġstart Browser Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Browser Settings Editor . settings . value Ġ= ĠBrowser Settings ( launch Browser , Ġfalse , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġenvironment Variables Editor . envs . set ( project . environment Variables . map Ġ{ Ġit . key Ġto Ġit . value Ġ}. toMap ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload T fm Selector ( project : ĠRunnable Project ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtf m Selector . string List . clear () ĊĠĠĠĠĠĠĠ Ġproject . project Outputs . map Ġ{ Ġit . tf m Ġ}. sorted (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf m Selector . string List . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( tf m Selector . string List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtf m Selector . string . set ( tf m Selector . string List . first ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠhandleChange T fm Selection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset ( project FilePath : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Exe Path : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Arguments : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Project Working Directory : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject T fm : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexe Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunction Names : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv s : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass Parent En vs : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse External Console : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Un loaded Project : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Start Browser Parameters : ĠDot Net Start Browser Parameters ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġreset Properties ( exe Path : ĠString , Ġprogram Parameters : ĠString , Ġworking Directory : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . reset ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexe Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworking Directory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass Parent En vs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse External Console ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Loaded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . track Project Exe Path Ġ= Ġtrack Project Exe Path ĊĠĠĠĠĠĠĠ Ġthis . track Project Arguments Ġ= Ġtrack Project Arguments ĊĠĠĠĠĠĠĠ Ġthis . track Project Working Directory Ġ= Ġtrack Project Working Directory ĊĊĠĠĠĠĠĠĠ Ġthis . function Names Editor . defaultValue . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġthis . function Names Editor . text . value Ġ= Ġfunction Names ĊĊĠĠĠĠĠĠĠ Ġrunnable Projects Model . projects . adv ise Once ( lifetime ) Ġ{ Ġproject List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . defaultValue . value Ġ= Ġdot Net Start Browser Parameters . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Editor . text . value Ġ= Ġdot Net Start Browser Parameters . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Browser Settings Editor . settings . set ( Browser Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Start Browser Parameters . start After Launch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Start Browser Parameters . with JavaScript Debugger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdot Net Start Browser Parameters . browser )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project FilePath . isEmpty () Ġ|| Ġproject List . none Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . project FilePath Ġ== Ġproject FilePath Ġ&& ĠAzure Functions Host Configuration Type . is Type Applicable ( it . kind ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCase Ġwhen Ġproject Ġdidn 't Ġselected Ġotherwise Ġwe Ġshould Ġgenerate Ġfake Ġproject Ġto Ġavoid Ġdrop Ġuser Ġsettings . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project FilePath . isEmpty () Ġ|| Ġ! is Un loaded Project ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject List . first OrNull Ġ{ Ġtype . is Applicable ( it . kind ) Ġ} ?. let Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selector . project . set ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Project Selection ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfake ProjectName Ġ= ĠFile ( project FilePath ). name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfake Project Ġ= ĠRunnable Project ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfake ProjectName , Ġfake ProjectName , Ġproject FilePath , ĠRunnable Project Kind . Un loaded , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Project Output ( project T fm , Ġexe Path , ĠParameters List Util . parse ( program Parameters ), Ġworking Directory , Ġ"") ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv s . map Ġ{ ĠEnvironment Variable ( it . key , Ġit . value ) Ġ}. toList (), Ġnull , ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selector . project List . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( project List Ġ+ Ġfake Project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selector . project . set ( fake Project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload T fm Selector ( fake Project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Properties ( exe Path , Ġprogram Parameters , Ġworking Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject List . single OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . project FilePath Ġ== Ġproject FilePath Ġ&& ĠAzure Functions Host Configuration Type . is Type Applicable ( it . kind ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Selector . project . set ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload T fm Selector ( project ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject T fm Exists Ġ= Ġproject . project Outputs . any Ġ{ Ġit . tf m Ġ== Ġproject T fm Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected T fm Ġ= Ġif Ġ( project T fm Exists ) Ġproject T fm Ġelse Ġproject . project Outputs . first OrNull ()?. tf m Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtf m Selector . string . set ( selected T fm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Output Ġ= Ġproject . project Outputs . single OrNull Ġ{ Ġit . tf m Ġ== Ġselected T fm Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffective Exe Path Ġ= Ġif Ġ( track Project Exe Path Ġ&& Ġproject Output Ġ!= Ġnull ) Ġproject Output . exe Path Ġelse Ġexe Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffective Program Parameters Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Project Arguments Ġ&& Ġproject Output Ġ!= Ġnull Ġ&& Ġproject Output . default Arguments . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameters List Util . join ( project Output . default Arguments ). replace ("\\ \"", Ġ"\" ") Ġelse Ġprogram Parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Parameters Editor . defaultValue . set ( effective Program Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeffective Working Directory Ġ= Ġif Ġ( track Project Working Directory Ġ&& Ġproject Output Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Output . working Directory Ġelse Ġworking Directory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Properties ( effective Exe Path , Ġeffective Program Parameters , Ġeffective Working Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }