/* Ċ Ġ* Ġ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 . resolve . constants Ċ Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . builtins . Unsigned Types Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Type Parameter Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . find Class Ac ross Module Dependencies Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Simple Type Ċ import Ġorg . jetbrains . kotlin . types . Type Constructor Ċ import Ġjava . util .* Ċ Ċ class ĠInteger ValueType Constructor ( ĊĠĠĠ Ġprivate Ġval Ġvalue : ĠLong , ĊĠĠĠ Ġprivate Ġval Ġmodule : ĠModule Descriptor , ĊĠĠĠ Ġparameters : ĠCompile Time Constant . Parameters Ċ ) Ġ: ĠType Constructor Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsup ert ypes Ġ= ĠArrayList < Kotlin Type >( 4 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġorder Ġof Ġtypes Ġmatters ĊĠĠĠĠĠĠĠ Ġ// Ġ' get Primitive Number Type ' Ġreturns Ġfirst Ġof Ġsup ert ypes Ġthat Ġis Ġa Ġsubtype Ġof Ġexpected Ġtype ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġexpected Ġtype Ġ' Any ' Ġresult Ġtype Ġ' Int ' Ġshould Ġbe Ġreturned ĊĠĠĠĠĠĠĠ Ġval Ġis Unsigned Ġ= Ġparameters . is Unsigned Number Literal ĊĠĠĠĠĠĠĠ Ġval Ġis Con ver table Ġ= Ġparameters . is Con ver table Const Val ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Unsigned Ġ|| Ġis Con ver table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( has Unsigned Types In Module Dependencies ( module )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsigned Ġtypes Ġshould Ġbe Ġon Ġclasspath Ġto Ġcreate Ġan Ġunsigned Ġtype Ġconstructor " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Con ver table Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Signed Super Types () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Unsigned Super Types () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Unsigned Ġ-> Ġadd Unsigned Super Types () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġadd Signed Super Types () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Signed Super Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġbuilt Ins . int Type ) ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġbuilt Ins . byte Type ) ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġbuilt Ins . short Type ) ĊĠĠĠĠĠĠĠ Ġsup ert ypes . add ( built Ins . long Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Unsigned Super Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġunsigned Type ( Kotlin Built Ins . FQ _ NAMES . u Int )) ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġunsigned Type ( Kotlin Built Ins . FQ _ NAMES . u Byte )) ĊĠĠĠĠĠĠĠ Ġcheck Bounds And Add Super Type ( value , Ġunsigned Type ( Kotlin Built Ins . FQ _ NAMES . u Short )) ĊĠĠĠĠĠĠĠ Ġsup ert ypes . add ( unsigned Type ( Kotlin Built Ins . FQ _ NAMES . u Long )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Bounds And Add Super Type ( value : ĠLong , Ġkotlin Type : ĠKotlin Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġin Ġkotlin Type . min Value () .. kotlin Type . max Value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsup ert ypes . add ( kotlin Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunsigned Type ( class Id : ĠClass Id ): ĠSimple Type Ġ= Ġmodule . find Class Ac ross Module Dependencies ( class Id ) !!. default Type ĊĊĠĠĠ Ġoverride Ġfun Ġget Sup ert ypes (): ĠCollection < Kotlin Type > Ġ= Ġsup ert ypes ĊĊĠĠĠ Ġoverride Ġfun Ġget Parameters (): ĠList < Type Parameter Descriptor > Ġ= Ġempty List () ĊĊĠĠĠ Ġoverride Ġfun Ġis Final () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġis Den ot able () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġget Declaration Descriptor () Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠgetValue (): ĠLong Ġ= Ġvalue ĊĊĠĠĠ Ġoverride Ġfun Ġget Built Ins (): ĠKotlin Built Ins Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmodule . built Ins ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Integer ValueType ($ value )" Ċ } Ċ Ċ private Ġfun ĠKotlin Type . min Value (): ĠLong Ġ{ ĊĠĠĠ Ġif Ġ( Unsigned Types . is Unsigned Type ( this )) Ġreturn Ġ 0 ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Byte ( this ) Ġ-> ĠByte . MIN _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Short ( this ) Ġ-> ĠShort . MIN _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Int ( this ) Ġ-> ĠInt . MIN _ VALUE . to Long () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Can 't Ġget Ġmin Ġvalue Ġfor Ġtype : Ġ$ this ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Unsigned Types Ċ private Ġfun ĠKotlin Type . max Value (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Byte ( this ) Ġ-> ĠByte . MAX _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Short ( this ) Ġ-> ĠShort . MAX _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is Int ( this ) Ġ-> ĠInt . MAX _ VALUE . to Long () ĊĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is U Byte ( this ) Ġ-> ĠU Byte . MAX _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is U Short ( this ) Ġ-> ĠU Short . MAX _ VALUE . to Long () ĊĠĠĠĠĠĠĠ ĠKotlin Built Ins . is UInt ( this ) Ġ-> ĠUInt . MAX _ VALUE . to Long () ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Can 't Ġget Ġmax Ġvalue Ġfor Ġtype : Ġ$ this ") ĊĠĠĠ Ġ} Ċ } ĊĊ