/* Ċ Ġ* Ġ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 . constraint System Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . kotlin . descriptors . Function Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Type Parameter Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotations Ċ import Ġorg . jetbrains . kotlin . psi . Kt Function Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor To Source Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Type Resolver Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Compile Time Constant Ċ import Ġorg . jetbrains . kotlin . resolve . constants . Integer ValueType Constructor Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . module Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Lex ical Scope Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ import Ġorg . jetbrains . kotlin . test . Dummy Tr aces Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Factory Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠConstraint System TestData ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠBinding Context , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtype Resolver : ĠType Resolver Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfunction Foo : ĠFunction Descriptor ĊĠĠĠ Ġprivate Ġval Ġscope To Resolve Type Parameters : ĠLex ical Scope ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġcontext . get Slice Contents ( Binding Context . FUNCTION ) ĊĠĠĠĠĠĠĠ Ġfunction Foo Ġ= Ġfind Function ByName ( functions . values , Ġ" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= ĠDescriptor To Source Utils . descriptor To Declaration ( function Foo ) Ġas ĠK t Function ĊĠĠĠĠĠĠĠ Ġval Ġfoo Body Ġ= Ġfunction . body Expression ĊĠĠĠĠĠĠĠ Ġscope To Resolve Type Parameters Ġ= Ġcontext . get ( Binding Context . LEX ICAL _ SCOPE , Ġfoo Body ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Function ByName ( functions : ĠCollection < Function Descriptor >, Ġname : ĠString ): ĠFunction Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfunctions . first OrNull Ġ{ Ġit . name . asString () Ġ== Ġname Ġ} Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Function Ġ${ name } Ġis Ġnot Ġdeclared ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Parameter Descriptor ( name : ĠString ): ĠType Parameter Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfunction Foo . type Parameters . first OrNull Ġ{ Ġit . name . asString () Ġ== Ġname Ġ} Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Unsupported Ġtype Ġparameter Ġname : Ġ$ name . ĠYou Ġmay Ġadd Ġit Ġto Ġconstraint System / declarations . kt ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetType ( name : ĠString ): ĠKotlin Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠINTEGER _ VALUE _ TYPE _ PATTERN . matcher ( name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġmatcher . group ( 1 ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= ĠCompile Time Constant . Parameters ( false , Ġfalse , Ġfalse , Ġfalse , Ġfalse , Ġfalse , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKotlin Type Factory . simple Type With Non T rivial Member Scope ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAn notations . EMPTY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger ValueType Constructor ( number . to Long (), Ġfunction Foo . module , Ġparameters ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMember Scope . Empty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtype Resolver . resolve Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope To Resolve Type Parameters , ĠK t Psi Factory ( project ). create Type ( name ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Tr aces . D UMMY _ TRACE , Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠINTEGER _ VALUE _ TYPE _ PATTERN Ġ= ĠPattern . compile (""" Integer ValueType \ (( \ d *) \) """) Ċ