@ file : Suppress (" FunctionName ") Ċ /* Ċ * ĠMIT ĠLicense Ċ * Ċ * ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠM ak sym ĠO li iny k . Ċ * Ċ * Ġ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 : Ċ * Ċ * ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ * Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ * Ċ * Ġ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 . Ċ */ Ċ Ċ data Ġclass ĠMajor Minor Patch ( ĊĠĠĠ Ġval Ġmajor : ĠInt , ĊĠĠĠ Ġval Ġminor : ĠInt , ĊĠĠĠ Ġval Ġpatch : ĠInt , Ċ ) Ċ Ċ /** Ċ Ġ* ĠDen otes Ġartifact Ġversion Ġas Ġper Ġ[ sem Ġver ]( https :// semver . org /) Ġspec . Ċ Ġ* ĠCurrently Ġit Ġincludes : Ċ Ġ* Ġ* ĠSnapshot Ġ- Ġ` hash - SNAPSHOT ` Ġor Ġjust Ġ` SNAPSHOT ` Ċ Ġ* Ġ* ĠAlpha Ġ- Ġ` v 1 . 2 . 3 - alpha 4 ` Ċ Ġ* Ġ* ĠRelease Ġcandidate Ġ( m ight Ġbe Ġalpha ĠRC ) Ġ- Ġ` v 1 . 2 . 3 - rc 5 ` Ġor Ġ` v 1 . 2 . 3 - alpha 4 - rc 5 ` Ċ Ġ* Ġ* ĠSt able Ġ- Ġ` v 1 . 2 . 3 ` Ċ Ġ*/ Ċ sealed Ġclass ĠVersion Ċ Ċ data Ġclass ĠSnapshot ( ĊĠĠĠ Ġval Ġcommit : ĠString ?, Ċ ) Ġ: ĠVersion () Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( commit Ġ== Ġnull Ġ|| Ġcommit . length Ġ>= ĠCommit Hash Length ) Ġ{ Ġ" Invalid Ġhash : Ġ$ commit " Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠAlpha ( ĊĠĠĠ Ġval Ġvalue : ĠString , ĊĠĠĠ Ġval Ġmain Version : ĠMajor Minor Patch , ĊĠĠĠ Ġval Ġalpha : ĠInt , Ċ ) Ġ: ĠVersion () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Tag : ĠString , ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠAlpha Regexp . group Values ( raw Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġgroup Ġ-> ĠAlpha ( raw Tag , Ġgroup . to Major Minor Patch (), Ġgroup [ 4 ]. toInt ()) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠRelease Candidate ( ĊĠĠĠ Ġval Ġvalue : ĠString , ĊĠĠĠ Ġval Ġmain Version : ĠMajor Minor Patch , ĊĠĠĠ Ġval Ġalpha : ĠInt ?, ĊĠĠĠ Ġval Ġcandidate : ĠInt , Ċ ) Ġ: ĠVersion () Ġ{ ĊĠĠĠ Ġval Ġis Alpha Rc Ġ= Ġalpha Ġ!= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Tag : ĠString , ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠRelease Candidate Regexp . group Values ( raw Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Candidate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . to Major Minor Patch (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup [ 5 ]. toInt OrNull (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup [ 6 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠSt able ( ĊĠĠĠ Ġval Ġvalue : ĠString , ĊĠĠĠ Ġval Ġmain Version : ĠMajor Minor Patch , Ċ ) Ġ: ĠVersion () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Tag : ĠString , ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠSt able ( raw Tag , ĠSt able Regexp . group Values ( raw Tag ). to Major Minor Patch ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun ĠVersion ( ĊĠĠĠ Ġraw Tag : ĠString ?, ĊĠĠĠ Ġcommit : ĠString ? Ċ ): ĠVersion Ġ= ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġraw Tag . isNull OrEmpty () Ġ-> ĠSnapshot ( commit ) ĊĠĠĠĠĠĠĠ Ġraw Tag . matches ( Alpha Regexp ) Ġ-> ĠAlpha . from Tag ( raw Tag ) ĊĠĠĠĠĠĠĠ Ġraw Tag . matches ( Release Candidate Regexp ) Ġ-> ĠRelease Candidate . from Tag ( raw Tag ) ĊĠĠĠĠĠĠĠ Ġraw Tag . matches ( Stable Regexp ) Ġ-> ĠSt able . from Tag ( raw Tag ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid Ġtag : Ġ$ raw Tag , Ġrelease Ġtag Ġshould Ġbe Ġabsent Ġor Ġmatch Ġany Ġof Ġthe Ġfollowing Ġregular Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" expressions : Ġ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Alpha Regexp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Candidate Regexp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSt able Regexp ). join ToString ( transform Ġ= ĠRegex :: pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ private Ġfun ĠRegex . group Values ( ĊĠĠĠ Ġs : ĠString , Ċ ) Ġ= Ġ( find ( s ) Ġ?: Ġerror (" Couldn 't Ġparse Ġstring Ġ'$ s ' Ġfor Ġregex Ġ'$ pattern ' ")). group Values Ċ Ċ private Ġfun ĠList < String >. to Major Minor Patch () Ġ= ĊĠĠĠ ĠMajor Minor Patch ( this [ 1 ]. toInt (), Ġthis [ 2 ]. toInt (), Ġthis [ 3 ]. toInt ()) Ċ Ċ /** Ċ Ġ* ĠGroups : Ċ Ġ* Ġ* Ġ 1 Ġmajor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 2 Ġminor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 3 Ġpatch , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 4 Ġalpha , Ġ 1 2 3 Ċ Ġ*/ Ċ private Ġval ĠAlpha Regexp Ġ= ĠRegex ("^ v (\\ d +) \\ .( \\ d +) \\ .( \\ d + )- alpha ([ 1 - 9 ]\\ d *) $ ") Ċ Ċ /** Ċ Ġ* ĠGroups : Ċ Ġ* Ġ* Ġ 1 Ġmajor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 2 Ġminor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 3 Ġpatch , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 4 Ġis Ġalpha ? Ġ- alpha 1 2 3 Ċ Ġ* Ġ* Ġ 5 Ġrc Ġnumber , Ġ 1 2 3 Ċ Ġ*/ Ċ private Ġval ĠRelease Candidate Regexp Ġ= ĊĠĠĠ ĠRegex ("^ v (\\ d +) \\ .( \\ d +) \\ .( \\ d )+ (- alpha ([ 1 - 9 ]\\ d * )) ? - rc ([ 1 - 9 ]\\ d *) $ ") Ċ Ċ /** Ċ Ġ* ĠGroups : Ċ Ġ* Ġ* Ġ 1 Ġmajor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 2 Ġminor , Ġ 1 2 3 Ċ Ġ* Ġ* Ġ 3 Ġpatch , Ġ 1 2 3 Ċ Ġ*/ Ċ private Ġval ĠSt able Regexp Ġ= ĠRegex ("^ v (\\ d +) \\ .( \\ d +) \\ .( \\ d + )$ ") Ċ