// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . u ast . kotlin . psi Ċ Ċ import Ġcom . intellij . openapi . components . Service Manager Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . light .* Ċ import Ġorg . jetbrains . kotlin . as Java . elements . Kotlin Light Type Parameter List Builder Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . safe As Ċ import Ġorg . jetbrains . u ast . U ast ErrorType Ċ import Ġorg . jetbrains . u ast . kotlin . Base Kotlin U ast Resolve Provider Service Ċ import Ġorg . jetbrains . u ast . kotlin . lz Ċ Ċ class ĠU ast Fake Light Method ( ĊĠĠĠ Ġoriginal : ĠK t Function , ĊĠĠĠ Ġcontaining Class : ĠPsi Class , Ċ ) Ġ: ĠU ast Fake Light Method Base < Kt Function >( original , Ġcontaining Class ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ type Parameter List Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠ ĠKotlin Light Type Parameter List Builder ( this ). also Ġ{ Ġparam List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġp ) Ġin Ġoriginal . type Parameters . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam List . add Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠLight Type Parameter Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . name Ġ?: Ġ"__ no _ name __", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmy Ext ends List Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . get Ext ends List (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . extends Bound ?. let Ġ{ Ġextends Bound Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Resolve Provider Service . resolve To Type ( extends Bound , Ġthis @ U ast Fake Light Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . safe As < Psi ClassType >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġadd Reference ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Ext ends List (): ĠLight Reference List Builder Ġ= Ġmy Ext ends List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType Parameter List (): ĠPsi Type Parameter List Ġ= Ġ_ type Parameter List ĊĊĠĠĠ Ġprivate Ġval Ġ_ parameter List : ĠPsi Parameter List Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠLight Parameter List Builder ( original . manager , Ġoriginal . language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetParent (): ĠPsi Element Ġ= Ġthis @ U ast Fake Light Method ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Containing File (): ĠPsi File Ġ= Ġparent . containing File ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter List Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal . receiver Type Reference ?. let Ġ{ Ġreceiver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU ast Kotlin Psi Parameter Base ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ $ this \$ ${ original . name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Resolve Provider Service . resolve To Type ( receiver , Ġthis @ U ast Fake Light Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠU ast ErrorType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġp ) Ġin Ġoriginal . value Parameters . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU ast Kotlin Psi Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . name Ġ?: Ġ" p $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . type Reference ?. let Ġ{ Ġtype Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Resolve Provider Service . resolve To Type ( type Reference , Ġthis @ U ast Fake Light Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠU ast ErrorType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . is Var Arg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . defaultValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Parameter List (): ĠPsi Parameter List Ġ= Ġ_ parameter List Ċ } Ċ Ċ class ĠU ast Fake Light Primary Constructor ( ĊĠĠĠ Ġoriginal : ĠK t Class Or Object , ĊĠĠĠ Ġlight Class : ĠPsi Class , Ċ ) Ġ: ĠU ast Fake Light Method Base < Kt Class Or Object >( original , Ġlight Class ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġis Constructor (): ĠBoolean Ġ= Ġtrue Ċ } Ċ Ċ abstract Ġclass ĠU ast Fake Light Method Base < T : ĠK t Declaration >( ĊĠĠĠ Ġval Ġoriginal : ĠT , ĊĠĠĠ Ġcontaining Class : ĠPsi Class , Ċ ) Ġ: ĠLight Method Builder ( ĊĠĠĠ Ġoriginal . manager , ĊĠĠĠ Ġoriginal . language , ĊĠĠĠ Ġoriginal . name Ġ?: Ġ"< no Ġname Ġprovided >", ĊĠĠĠ ĠLight Parameter List Builder ( original . manager , Ġoriginal . language ), ĊĠĠĠ ĠLight Modifier List ( original . manager ) Ċ ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . containing Class Ġ= Ġcontaining Class ĊĠĠĠĠĠĠĠ Ġif Ġ( original . safe As < Kt Named Function >() ?. is TopLevel Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Modifier ( Psi Modifier . STATIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġbase Resolve Provider Service : ĠBase Kotlin U ast Resolve Provider Service Ġby Ġl z Ġ{ ĊĠĠĠĠĠĠĠ ĠService Manager . getService ( Base Kotlin U ast Resolve Provider Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror ("${ Base Kotlin U ast Resolve Provider Service :: class . java . name } Ġis Ġnot Ġavailable Ġfor Ġ${ this :: class . simple Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ReturnType (): ĠPsi Type ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Resolve Provider Service . getType ( original , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetParent (): ĠPsi Element ? Ġ= Ġcontaining Class ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠU ast Fake Light Method Base < *> ĊĊĠĠĠĠĠĠĠ Ġif Ġ( original Ġ!= Ġother . original ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġoriginal . hashCode () Ċ } Ċ