/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 Ġorg . jetbrains . kotlin . config Ċ Ċ import Ġorg . jetbrains . kotlin . config . Language Version . K OT LIN _ 1 _ 1 Ċ import Ġorg . jetbrains . kotlin . utils . Description Aware Ċ Ċ enum Ġclass ĠLanguage Feature ( val Ġsince Version : ĠLanguage Version ?) Ġ{ ĊĠĠĠ Ġ// ĠNote : Ġnames Ġof Ġthese Ġentries Ġare Ġalso Ġused Ġin Ġdiagnostic Ġtests Ġand Ġin Ġuser - visible Ġmessages Ġ( see Ġpresent able Text Ġbelow ) ĊĠĠĠ ĠType Aliases ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠBound Callable References ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠLocal Deleg ated Properties ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠTop Level Se aled Inheritance ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠCor outines ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠAdditional Built Ins Members ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠData Class Inheritance ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠInline Properties ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠDest ruct uring Lambda Parameters ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠSingle Un ders core For ParameterName ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠD sl Markers Support ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠUnd ers cores In Numeric L iterals ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠDiv ision By Zero In Constant Expressions ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠInline Const Vals ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠOperator Rem ( K OT LIN _ 1 _ 1 ), ĊĠĠĠ ĠOperator Provide Delegate ( K OT LIN _ 1 _ 1 ), ĊĊĠĠĠ Ġ// ĠExperimental Ġfeatures ĊĠĠĠ ĠMulti Platform Projects ( null ), ĊĠĠĠ ĠMulti Platform DoNot Check Impl ( null ), ĊĊĠĠĠ ĠW arn On Cor outines ( null ), ĊĠĠĠ ĠError On Cor outines ( null ) ĊĠĠĠ Ġ; ĊĊĠĠĠ Ġval Ġpresent able Text : ĠString ĊĠĠĠĠĠĠĠ Ġ// ĠE . g . Ġ" Dest ruct uring Lambda Parameters " Ġ-> Ġ[" Dest ruct uring ", Ġ" Lambda ", Ġ" Parameters "] Ġ-> Ġ" destruct uring Ġlambda Ġparameters " ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġname . split (" (? <! ^ )( ? =[ A - Z ]) ". to Regex ()). join ToString ( separator Ġ= Ġ" Ġ", Ġtransform Ġ= ĠString :: toLowerCase ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom String ( str : ĠString ) Ġ= Ġvalues (). find Ġ{ Ġit . name Ġ== Ġstr Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠLanguage Version ( val Ġversion String : ĠString ) Ġ: ĠDescription Aware Ġ{ ĊĠĠĠ ĠK OT LIN _ 1 _ 0 (" 1 . 0 "), ĊĠĠĠ ĠK OT LIN _ 1 _ 1 (" 1 . 1 "); ĊĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġversion String ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġversion String ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Version String ( str : ĠString ?) Ġ= Ġvalues (). find Ġ{ Ġit . version String Ġ== Ġstr Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Full Version String ( str : ĠString ) Ġ= Ġstr . split (".", Ġ"- "). let Ġ{ Ġif Ġ( it . size Ġ>= Ġ 2 ) Ġfrom Version String ("${ it [ 0 ] }.${ it [ 1 ]} ") Ġelse Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠL ATE ST Ġ= Ġvalues (). last () ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠLanguage Version Settings Ġ{ ĊĠĠĠ Ġfun Ġsupports Feature ( feature : ĠLanguage Feature ): ĠBoolean ĊĊĠĠĠ Ġval Ġlanguage Version : ĠLanguage Version ĊĠĠĠ Ġval ĠapiVersion : ĠApi Version Ċ } Ċ Ċ class ĠLanguage Version Settings Impl Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlanguage Version : ĠLanguage Version , ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠapiVersion : ĠApi Version , ĊĠĠĠĠĠĠĠ Ġadditional Features : ĠCollection < Language Feature > Ġ= Ġempty Set () Ċ ) Ġ: ĠLanguage Version Settings Ġ{ ĊĠĠĠ Ġprivate Ġval Ġadditional Features Ġ= Ġadditional Features . toSet () ĊĊĠĠĠ Ġoverride Ġfun Ġsupports Feature ( feature : ĠLanguage Feature ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsince Ġ= Ġfeature . since Version ĊĠĠĠĠĠĠĠ Ġreturn Ġ( since Ġ!= Ġnull Ġ&& Ġlanguage Version Ġ>= Ġsince ) Ġ|| Ġfeature Ġin Ġadditional Features ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend (" Language Ġ= Ġ$ language Version , ĠAPI Ġ= Ġ$ apiVersion ") ĊĠĠĠĠĠĠĠ Ġadditional Features . forEach Ġ{ Ġfeature Ġ-> Ġappend (" Ġ+ $ feature ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT Ġ= ĠLanguage Version Settings Impl ( Language Version . LATE ST , ĠApi Version . LATE ST ) ĊĠĠĠ Ġ} Ċ } Ċ