// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . kotlin . idea . debugger . sequence . psi Ċ Ċ import Ġcom . intellij . debugger . streams . trace . impl . handler . type . GenericType Ċ import Ġorg . jetbrains . kotlin . idea . core . receiver Type Ċ import Ġorg . jetbrains . kotlin . idea . core . resolve Type Ċ import Ġorg . jetbrains . kotlin . psi . Kt Call Expression Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ Ċ interface ĠCall Type Extractor Ġ{ ĊĠĠĠ Ġfun Ġextract Intermediate Call Types ( call : ĠK t Call Expression ): ĠInter mediate Call Types ĊĠĠĠ Ġfun Ġextract Terminal Call Types ( call : ĠK t Call Expression ): ĠTermin ator Call Types ĊĊĠĠĠ Ġdata Ġclass ĠInter mediate Call Types ( val Ġtype Before : ĠGeneric Type , Ġval Ġtype After : ĠGeneric Type ) ĊĠĠĠ Ġdata Ġclass ĠTermin ator Call Types ( val Ġtype Before : ĠGeneric Type , Ġval Ġresult Type : ĠGeneric Type ) ĊĊĠĠĠ Ġabstract Ġclass ĠBase Ġ: ĠCall Type Extractor Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġextract Intermediate Call Types ( call : ĠK t Call Expression ): ĠInter mediate Call Types Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInter mediate Call Types ( extract Items Type ( call . receiver Type ()), Ġextract Items Type ( call . resolve Type ())) ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġextract Terminal Call Types ( call : ĠK t Call Expression ): ĠTermin ator Call Types Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTermin ator Call Types ( extract Items Type ( call . receiver Type ()), Ġget Result Type ( call . resolve Type ())) ĊĊĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun Ġextract Items Type ( type : ĠKotlin Type ?): ĠGeneric Type ĊĠĠĠĠĠĠĠ Ġprotected Ġabstract Ġfun Ġget Result Type ( type : ĠKotlin Type ): ĠGeneric Type ĊĊĠĠĠ Ġ} Ċ }