/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . backend . common . extensions Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . ir . Builtin Symbols Base Ċ import Ġorg . jetbrains . kotlin . config . Language Version Settings Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Type Alias Descriptor Ċ import Ġorg . jetbrains . kotlin . incremental . components . No Lookup Location Ċ import Ġorg . jetbrains . kotlin . ir . Obsolete Descriptor Based API Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Constructor Ċ import Ġorg . jetbrains . kotlin . ir . descriptors . Ir Built Ins Ċ import Ġorg . jetbrains . kotlin . ir . link age . Ir Deserializer Ċ import Ġorg . jetbrains . kotlin . ir . symbols .* Ċ import Ġorg . jetbrains . kotlin . ir . util . Ir Message Logger Ċ import Ġorg . jetbrains . kotlin . ir . util . Reference Symbol Table Ċ import Ġorg . jetbrains . kotlin . ir . util . Type Translator Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . platform . Target Platform Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ Ċ open Ġclass ĠIr Plugin Context Impl Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmodule : ĠModule Descriptor , ĊĠĠĠ Ġ@ Opt In ( Obsolete Descriptor Based API :: class ) ĊĠĠĠ Ġoverride Ġval Ġbinding Context : ĠBinding Context , ĊĠĠĠ Ġoverride Ġval Ġlanguage Version Settings : ĠLanguage Version Settings , ĊĠĠĠ Ġprivate Ġval Ġst : ĠReference Symbol Table , ĊĠĠĠ Ġ@ Opt In ( Obsolete Descriptor Based API :: class ) ĊĠĠĠ Ġoverride Ġval Ġtype Translator : ĠType Translator , ĊĠĠĠ Ġoverride Ġval Ġir Built Ins : ĠIr Built Ins , ĊĠĠĠ Ġval Ġlinker : ĠIr Deserializer , ĊĠĠĠ Ġprivate Ġval Ġdiagnostic Reporter : ĠIr Message Logger , ĊĠĠĠ Ġoverride Ġval Ġsymbols : ĠBuiltin Symbols Base Ġ= ĠBuiltin Symbols Base ( ir Built Ins , Ġir Built Ins . built Ins , Ġst ) Ċ ) Ġ: ĠIr Plugin Context Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġplatform : ĠTarget Platform ? Ġ= Ġmodule . platform ĊĊĠĠĠ Ġ@ Opt In ( Obsolete Descriptor Based API :: class ) ĊĠĠĠ Ġoverride Ġval Ġmodule Descriptor : ĠModule Descriptor Ġ= Ġmodule ĊĠĠĠ Ġ@ Opt In ( Obsolete Descriptor Based API :: class ) ĊĠĠĠ Ġoverride Ġval Ġsymbol Table : ĠReference Symbol Table Ġ= Ġst ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Member Scope ( fq Name : ĠF q Name ): ĠMember Scope ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpkg Ġ= Ġmodule . get Package ( fq Name ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fq Name . is Root Ġ|| Ġpkg . fragments . isNotEmpty ()) Ġreturn Ġpkg . member Scope ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Member Scope Ġ= Ġresolve Member Scope ( fq Name . parent ()) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Member Scope . get Cont ributed Classifier ( fq Name . short Name (), ĠNo Lookup Location . FROM _ BACKEND ) Ġas ? ĠClass Descriptor Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġclass Descriptor . un subst it uted Member Scope ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< S Ġ: ĠIr Symbol > Ġresolve Symbol ( fq Name : ĠF q Name , Ġrefer encer : Ġ( Member Scope ) Ġ-> ĠS ?): ĠS ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmember Scope Ġ= Ġresolve Member Scope ( fq Name ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġsymbol Ġ= Ġrefer encer ( member Scope ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( symbol . is Bound ) Ġreturn Ġsymbol ĊĊĠĠĠĠĠĠĠ Ġlinker . get Declaration ( symbol ) ĊĠĠĠĠĠĠĠ Ġlinker . post Process () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsymbol ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Diagnostic Reporter ( plugin Id : ĠString ): ĠIr Message Logger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIr Message Logger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseverity : ĠIr Message Logger . Severity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation : ĠIr Message Logger . Location ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic Reporter . report ( severity , Ġ"[ Plugin Ġ$ plugin Id ] Ġ$ message ", Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< S Ġ: ĠIr Symbol > Ġresolve Symbol Collection ( fq Name : ĠF q Name , Ġrefer encer : Ġ( Member Scope ) Ġ-> ĠCollection < S >): ĠCollection < S > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmember Scope Ġ= Ġresolve Member Scope ( fq Name ) Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġsymbols Ġ= Ġrefer encer ( member Scope ) ĊĊĠĠĠĠĠĠĠ Ġsymbols . forEach Ġ{ Ġif Ġ(! it . is Bound ) Ġlinker . get Declaration ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlinker . post Process () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsymbols ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreference Class ( fq Name : ĠF q Name ): ĠIr Class Symbol ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert (! fq Name . is Root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Symbol ( fq Name . parent ()) Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Descriptor Ġ= Ġscope . get Cont ributed Classifier ( fq Name . short Name (), ĠNo Lookup Location . FROM _ BACKEND ) Ġas ? ĠClass Descriptor ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Descriptor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst . reference Class ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreference Type Alias ( fq Name : ĠF q Name ): ĠIr Type Alias Symbol ? Ġ{ ĊĠĠĠĠĠĠĠ Ġassert (! fq Name . is Root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Symbol ( fq Name . parent ()) Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Descriptor Ġ= Ġscope . get Cont ributed Classifier ( fq Name . short Name (), ĠNo Lookup Location . FROM _ BACKEND ) Ġas ? ĠType Alias Descriptor ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalias Descriptor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġst . reference Type Alias ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreference Construct ors ( class F qn : ĠF q Name ): ĠCollection < Ir Constructor Symbol > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Symbol Ġ= Ġreference Class ( class F qn ) Ġ?: Ġerror (" Cannot Ġfind Ġclass Ġ$ class F qn ") ĊĠĠĠĠĠĠĠ Ġreturn Ġclass Symbol . owner . declarations . filter Is Instance < Ir Constructor >(). map Ġ{ Ġit . symbol Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreference Functions ( fq Name : ĠF q Name ): ĠCollection < Ir Simple Function Symbol > Ġ{ ĊĠĠĠĠĠĠĠ Ġassert (! fq Name . is Root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Symbol Collection ( fq Name . parent ()) Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptors Ġ= Ġscope . get Cont ributed Functions ( fq Name . short Name (), ĠNo Lookup Location . FROM _ BACKEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors . map Ġ{ Ġst . reference Simple Function ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreference Properties ( fq Name : ĠF q Name ): ĠCollection < Ir Property Symbol > Ġ{ ĊĠĠĠĠĠĠĠ Ġassert (! fq Name . is Root ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolve Symbol Collection ( fq Name . parent ()) Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptors Ġ= Ġscope . get Cont ributed Variables ( fq Name . short Name (), ĠNo Lookup Location . FROM _ BACKEND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors . map Ġ{ Ġst . reference Property ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ