/* Ċ Ġ* Ġ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 . jvm Ċ Ċ import Ġorg . jetbrains . kotlin . resolve . calls . results . Type Specific ity Comparator Ċ import Ġorg . jetbrains . kotlin . types . model . Kotlin Type Marker Ċ import Ġorg . jetbrains . kotlin . types . model . Type System Inference Extension Context Delegate Ċ Ċ class ĠJ vm Type Specific ity Comparator ( val Ġcontext : ĠType System Inference Extension Context Delegate ) Ġ: ĠType Specific ity Comparator Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġis Def initely Less Specific ( specific : ĠKotlin Type Marker , Ġgeneral : ĠKotlin Type Marker ): ĠBoolean Ġ= Ġwith ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple General Ġ= Ġgeneral . as Simple Type () ĊĠĠĠĠĠĠĠ Ġif Ġ(! specific . is Flex ible () Ġ|| Ġsimple General Ġ== Ġnull ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// Ġgeneral Ġis Ġin flex ible ĊĠĠĠĠĠĠĠ Ġval Ġflexibility Ġ= Ġspecific . as Flex ible Type () !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠFor Ġprimitive Ġtypes Ġwe Ġhave Ġto Ġtake Ġcare Ġof Ġthe Ġcase Ġwhen Ġthere Ġare Ġtwo Ġover loaded Ġmethods Ġlike ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġfoo ( int ) Ġand Ġfoo ( Integer ) ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġwe Ġdo Ġnot Ġdis crimin ate Ġone Ġof Ġthem , Ġany Ġcall Ġto Ġfoo ( kotlin . Int ) Ġwill Ġresult Ġin Ġoverload Ġresolution Ġamb iguity ĊĠĠĠĠĠĠĠ Ġ// Ġso , Ġfor Ġsuch Ġcases , Ġwe Ġdis crimin ate ĠInteger Ġin Ġfavour Ġof Ġint ĊĠĠĠĠĠĠĠ Ġif Ġ(! simple General . is Primitive Type () Ġ|| Ġ! flex ibility . lower Bound (). is Primitive Type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠInt ? Ġ>< ĠInt ! ĊĠĠĠĠĠĠĠ Ġif Ġ( simple General . is Marked Nullable ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠInt ! Ġless Specific ĠInt ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }