/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġjet brains . build Server . visual Studio Ċ Ċ import Ġjet brains . build Server . Run Build Exception Ċ import Ġjet brains . build Server . agent . runner . ParameterType Ċ import Ġjet brains . build Server . agent . runner . Parameters Service Ċ import Ġjet brains . build Server . dotnet . Dot net Constants . PARAM _ VIS UAL _ ST UDIO _ VERSION Ċ import Ġjet brains . build Server . dotnet . Tool Ċ import Ġjava . io . File Ċ Ċ class ĠVisual Studio Tool Resolver ( private Ġval Ġ_ parameters Service : ĠParameters Service ) ĊĠĠĠ Ġ: ĠTool Resolver Ġ{ ĊĠĠĠ Ġoverride Ġval Ġexecutable File : ĠFile ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Name Ġ= Ġ" VS ${ version }_ Path " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ_ parameters Service . try Get Parameter ( ParameterType . Configuration , Ġparam Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRun Build Exception (" Can 't Ġfind Ġconfiguration Ġparameter Ġ\"$ param Name \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile ( path , ĠV ST ool Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġversion : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Version Ġ?: Ġavailable Versions . sorted By Descending Ġ{ Ġit Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRun Build Exception (" Can 't Ġfind Ġany Ġversion Ġof Ġvisual Ġstudio ") ĊĊĠĠĠ Ġprivate Ġval Ġselected Version : ĠInt ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġ Ġ_ parameters Service . try Get Parameter ( ParameterType . Runner , ĠPARAM _ VIS UAL _ ST UDIO _ VERSION )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTool . try Parse ( it )?. vs Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRun Build Exception (" Can 't Ġparse Ġvisual Ġstudio Ġversion Ġfrom Ġ\"$ PARAM _ VIS UAL _ ST UDIO _ VERSION \" Ġvalue Ġ\"$ it \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( version Ġ!= Ġnull Ġ&& Ġversion Ġ!= ĠTool . VisualStudio Any . version ) Ġversion Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġavailable Versions : ĠSequence < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ parameters Service . getParameter Names ( ParameterType . Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠVS Config Name Pattern . find ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit !!. group Values [ 1 ]. toInt OrNull () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠInt Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVS Config Name Pattern : ĠRegex Ġ= ĠRegex (" VS (\\ d + )_ Path ", Ġoption Ġ= ĠRegex Option . IGNORE _ CASE ) ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV ST ool Name Ġ= Ġ" dev env . com " ĊĠĠĠ Ġ} Ċ }