/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . metadata . de serialization Ċ Ċ /** Ċ Ġ* ĠSub classes Ġof Ġthis Ġclass Ġare Ġused Ġto Ġidentify Ġdifferent Ġversions Ġof Ġthe Ġbinary Ġoutput Ġof Ġthe Ġcompiler Ġand Ġtheir Ġcompatibility Ġguarantees . Ċ Ġ* Ġ- ĠMajor Ġversion Ġshould Ġbe Ġincreased Ġonly Ġwhen Ġthe Ġnew Ġbinary Ġformat Ġis Ġneither Ġforward - Ġnor Ġbackward Ġcompatible . Ċ Ġ* ĠĠ ĠThis Ġshouldn 't Ġreally Ġever Ġhappen Ġat Ġall . Ċ Ġ* Ġ- ĠMinor Ġversion Ġshould Ġbe Ġincreased Ġwhen Ġthe Ġnew Ġformat Ġis Ġbackward Ġcompatible , Ċ Ġ* ĠĠ Ġi . e . Ġthe Ġnew Ġcompiler Ġcan Ġprocess Ġold Ġdata , Ġbut Ġthe Ġold Ġcompiler Ġwill Ġnot Ġbe Ġable Ġto Ġprocess Ġnew Ġdata . Ċ Ġ* Ġ- ĠPatch Ġversion Ġcan Ġbe Ġincreased Ġfreely Ġand Ġis Ġonly Ġsupposed Ġto Ġbe Ġused Ġfor Ġdebugging . ĠIncrease Ġthe Ġpatch Ġversion Ġwhen Ġyou Ċ Ġ* ĠĠ Ġmake Ġa Ġchange Ġto Ġbinaries Ġwhich Ġis Ġboth Ġforward - Ġand Ġbackward Ġcompatible . Ċ Ġ*/ Ċ abstract Ġclass ĠBinary Version ( private Ġvar arg Ġval Ġnumbers : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġmajor : ĠInt Ġ= Ġnumbers . get OrNull ( 0 ) Ġ?: ĠUNKNOWN ĊĠĠĠ Ġval Ġminor : ĠInt Ġ= Ġnumbers . get OrNull ( 1 ) Ġ?: ĠUNKNOWN ĊĠĠĠ Ġval Ġpatch : ĠInt Ġ= Ġnumbers . get OrNull ( 2 ) Ġ?: ĠUNKNOWN ĊĠĠĠ Ġval Ġrest : ĠList < Int > Ġ= Ġif Ġ( numbers . size Ġ> Ġ 3 ) Ġnumbers . asList (). sub List ( 3 , Ġnumbers . size ). toList () Ġelse Ġempty List () ĊĊĠĠĠ Ġabstract Ġfun Ġis Compatible (): ĠBoolean ĊĊĠĠĠ Ġfun Ġto Array (): ĠInt Array Ġ= Ġnumbers ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthis Ġversion Ġof Ġsome Ġformat Ġloaded Ġfrom Ġsome Ġbinaries Ġis Ġcompatible ĊĠĠĠĠ Ġ* Ġto Ġthe Ġexpected Ġversion Ġof Ġthat Ġformat Ġin Ġthe Ġcurrent Ġcompiler . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġour Version Ġthe Ġversion Ġof Ġthis Ġformat Ġin Ġthe Ġcurrent Ġcompiler ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġis Compatible To ( our Version : ĠBinary Version ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( major Ġ== Ġ 0 ) Ġour Version . major Ġ== Ġ 0 Ġ&& Ġminor Ġ== Ġour Version . minor ĊĠĠĠĠĠĠĠ Ġelse Ġmajor Ġ== Ġour Version . major Ġ&& Ġminor Ġ<= Ġour Version . minor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis At Least ( version : ĠBinary Version ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġis At Least ( version . major , Ġversion . minor , Ġversion . patch ) ĊĊĠĠĠ Ġfun Ġis At Least ( major : ĠInt , Ġminor : ĠInt , Ġpatch : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . major Ġ> Ġmajor ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . major Ġ< Ġmajor ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . minor Ġ> Ġminor ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . minor Ġ< Ġminor ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . patch Ġ>= Ġpatch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis At Most ( version : ĠBinary Version ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġis At Most ( version . major , Ġversion . minor , Ġversion . patch ) ĊĊĠĠĠ Ġfun Ġis At Most ( major : ĠInt , Ġminor : ĠInt , Ġpatch : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . major Ġ< Ġmajor ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . major Ġ> Ġmajor ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( this . minor Ġ< Ġminor ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( this . minor Ġ> Ġminor ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . patch Ġ<= Ġpatch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversions Ġ= Ġto Array (). take While Ġ{ Ġit Ġ!= ĠUNKNOWN Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( versions . isEmpty ()) Ġ" unknown " Ġelse Ġversions . join ToString (".") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĊĠĠĠĠĠĠĠ Ġother Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . java Ġ== Ġother :: class . java Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmajor Ġ== Ġ( other Ġas ĠBinary Version ). major Ġ&& Ġminor Ġ== Ġother . minor Ġ&& Ġpatch Ġ== Ġother . patch Ġ&& Ġrest Ġ== Ġother . rest ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmajor ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ 3 1 Ġ* Ġresult Ġ+ Ġminor ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ 3 1 Ġ* Ġresult Ġ+ Ġpatch ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ 3 1 Ġ* Ġresult Ġ+ Ġrest . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUNKNOWN Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġparse Version Array ( string : ĠString ): ĠInt Array ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . split (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpart Ġ-> Ġpart . toInt OrNull () Ġ?: Ġreturn Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array (). to IntArray () ĊĠĠĠ Ġ} Ċ } Ċ