/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 Ġ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 . types Ċ Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . config . Language Feature Ċ import Ġorg . jetbrains . kotlin . config . Language Version Settings Ċ import Ġorg . jetbrains . kotlin . resolve . calls . components . Classic Type System Context For CS Ċ import Ġorg . jetbrains . kotlin . types . checker . Kotlin Type Ref iner Ċ Ċ class ĠType Approx imator ( ĊĠĠĠ Ġbuilt Ins : ĠKotlin Built Ins , ĊĠĠĠ Ġlanguage Version Settings : ĠLanguage Version Settings , Ċ ) Ġ: ĠAbstract Type Approx imator ( ĊĠĠĠĠĠĠĠ ĠClass ic Type System Context For CS ( built Ins , ĠKotlin Type Ref iner . Default ), ĊĠĠĠĠĠĠĠ Ġlanguage Version Settings Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġapproximate Declaration Type ( base Type : ĠKotlin Type , Ġlocal : ĠBoolean ): ĠUn wrapped Type Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! language Version Settings . supports Feature ( Language Feature . New Inference )) Ġreturn Ġbase Type . unwrap () ĊĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġif Ġ( local ) ĠType Approx imator Configuration . Local Declaration Ġelse ĠType Approx imator Configuration . Public Declaration ĊĠĠĠĠĠĠĠ Ġval Ġprepared Type Ġ= Ġif Ġ( local ) Ġbase Type . unwrap () Ġelse Ġsubstitute Altern atives In Public Type ( base Type ) ĊĠĠĠĠĠĠĠ Ġreturn Ġapproximate To Super Type ( prepared Type , Ġconfiguration ) Ġ?: Ġprepared Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġnull Ġmeans Ġthat Ġthis Ġinput Ġtype Ġis Ġthe Ġresult , Ġi . e . Ġinput Ġtype Ġnot Ġcontains Ġnot - allowed Ġkind Ġof Ġtypes ĊĠĠĠ Ġ// Ġtype Ġ<: Ġresult Type ĊĠĠĠ Ġfun Ġapproximate To Super Type ( type : ĠUn wrapped Type , Ġconf : ĠType Approx imator Configuration ): ĠUn wrapped Type ? Ġ= ĊĠĠĠĠĠĠĠ Ġsuper . approx imate To Super Type ( type , Ġconf ) Ġas ĠUn wrapped Type ? ĊĊĠĠĠ Ġ// Ġresult Type Ġ<: Ġtype ĊĠĠĠ Ġfun Ġapproximate To SubType ( type : ĠUn wrapped Type , Ġconf : ĠType Approx imator Configuration ): ĠUn wrapped Type ? Ġ= ĊĠĠĠĠĠĠĠ Ġsuper . approx imate To SubType ( type , Ġconf ) Ġas ĠUn wrapped Type ? ĊĊĠĠĠ Ġfun Ġapproximate To ( type : ĠUn wrapped Type , Ġconf : ĠType Approx imator Configuration , Ġto Super Type : ĠBoolean ): ĠUn wrapped Type ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( to Super Type ) Ġapproximate To Super Type ( type , Ġconf ) Ġelse Ġapproximate To SubType ( type , Ġconf ) Ċ } Ċ