/* Ċ Ġ* Ġ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 . as Java . elements Ċ Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . Psi Variable Ex Ċ import Ġorg . jetbrains . annotations . Non N ls Ċ import Ġorg . jetbrains . kotlin . as Java . builder . Light Member Origin Ċ import Ġorg . jetbrains . kotlin . as Java . builder . Light Member Origin For Declaration Ċ import Ġorg . jetbrains . kotlin . as Java . classes . Kt Light Class Ċ import Ġorg . jetbrains . kotlin . as Java . classes . Kt Light Class For Enum Entry Ċ import Ġorg . jetbrains . kotlin . as Java . classes . cannot Modify Ċ import Ġorg . jetbrains . kotlin . as Java . classes . lazy Pub Ċ import Ġorg . jetbrains . kotlin . psi . Kt Enum Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Named Declaration Ċ import Ġjava . lang . Unsupported OperationException Ċ Ċ sealed Ġclass ĠK t Light Field Impl < D Ġ: ĠPsi Field >( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġlight Member Origin : ĠLight Member Origin ?, ĊĠĠĠĠĠĠĠ Ġcompute Real Delegate : Ġ() Ġ-> ĠD , ĊĠĠĠĠĠĠĠ Ġcontaining Class : ĠK t Light Class , ĊĠĠĠĠĠĠĠ Ġdummy Delegate : ĠPsi Field ? Ċ ) Ġ: ĠK t Light Member Impl < Psi Field >( compute Real Delegate , Ġlight Member Origin , Ġcontaining Class , Ġdummy Delegate ), ĠK t Light Field Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcls Delegate : ĠD ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuper . cls Delegate Ġas ĠD ĊĊĠĠĠ Ġoverride Ġfun Ġset Initializer ( initializer : ĠPsi Expression ?) Ġ= Ġcannot Modify () ĊĊĠĠĠ Ġoverride Ġfun ĠgetType () Ġ= Ġcls Delegate . type ĊĊĠĠĠ Ġoverride Ġfun ĠgetType Element () Ġ= Ġcls Delegate . type Element ĊĊĠĠĠ Ġoverride Ġfun Ġget Initializer () Ġ= Ġcls Delegate . initializer ĊĊĠĠĠ Ġoverride Ġfun Ġhas Initializer () Ġ= Ġcls Delegate . has Initializer () ĊĊĠĠĠ Ġoverride Ġfun Ġnormalize Declaration () Ġ= Ġcannot Modify () ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Constant Value () Ġ= Ġcls Delegate . compute Constant Value () ĊĊĠĠĠ Ġoverride Ġfun ĠsetName (@ Non N ls Ġname : ĠString ): ĠPsi Element Ġ{ ĊĠĠĠĠĠĠĠ Ġ( kotlin Origin Ġas ? ĠK t Named Declaration )?. setName ( name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ=== Ġother Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( other Ġis ĠK t Light Field Impl < *> Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ== Ġother . name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . containing Class Ġ== Ġother . containing Class ) ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġ 3 1 Ġ* Ġcontaining Class . hashCode () Ġ+ Ġname . hashCode () ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Constant Value ( visited Vars : ĠMutable Set < Psi Variable >? ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( cls Delegate Ġas ĠPsi Variable Ex ). compute Constant Value ( visited Vars ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠFactory . create ( light Member Origin ?. copy (), Ġcls Delegate , Ġcontaining Class ) ĊĊĊĠĠĠ Ġclass ĠK t Light Enum Constant ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin : ĠLight Member Origin ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Delegate : Ġ() Ġ-> ĠPsi Enum Constant , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class : ĠK t Light Class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Delegate : ĠPsi Field ? ĊĠĠĠ Ġ) Ġ: ĠK t Light Field Impl < Psi Enum Constant >( origin , Ġcompute Delegate , Ġcontaining Class , Ġdummy Delegate ), ĠPsi Enum Constant Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinitializing Class Ġby Ġlazy Pub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Enum Entry Ġ= Ġ( light Member Origin Ġas ? ĠLight Member Origin For Declaration )?. original Element Ġas ? ĠK t Enum Entry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kotlin Enum Entry Ġ!= Ġnull Ġ&& Ġkotlin Enum Entry . declarations . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Light Class For Enum Entry ( kotlin Enum Entry , Ġcls Delegate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġwe Ġdon 't Ġuse Ġ" deleg ation Ġby " Ġbecause Ġthe Ġcompiler Ġwould Ġgenerate Ġmethod Ġcalls Ġto ĠALL Ġof ĠPsi Enum Constant Ġmembers , ĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġwe Ġneed Ġonly Ġmembers Ġwhose Ġimplementations Ġare Ġnot Ġpresent Ġin ĠKotlin Light Field ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ArgumentList () Ġ= Ġcls Delegate . argument List ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Initializing Class (): ĠPsi Enum Constant Initializer ? Ġ= Ġinitializing Class ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget OrCreate Initializing Class (): ĠPsi Enum Constant Initializer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinitializing Class Ġ?: Ġthrow ĠUnsupportedOperationException (" Can 't Ġcreate Ġenum Ġconstant Ġbody : Ġ${ cls Delegate . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresolve Constructor () Ġ= Ġcls Delegate . resolve Constructor () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresolve Method () Ġ= Ġcls Delegate . resolve Method () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresolve Method Gener ics () Ġ= Ġcls Delegate . resolve Method Gener ics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠK t Light Field For Declaration ( origin : ĠLight Member Origin ?, Ġcompute Delegate : Ġ() Ġ-> ĠPsi Field , Ġcontaining Class : ĠK t Light Class , Ġdummy Delegate : ĠPsi Field ?) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Light Field Impl < Psi Field >( origin , Ġcompute Delegate , Ġcontaining Class , Ġdummy Delegate ) ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( origin : ĠLight Member Origin ?, Ġdelegate : ĠPsi Field , Ġcontaining Class : ĠK t Light Class ): ĠK t Light Field Ġ= Ġwhen Ġ( delegate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Enum Constant Ġ-> ĠK t Light Enum Constant ( origin , Ġ{ Ġdelegate Ġ}, Ġcontaining Class , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠK t Light Field For Declaration ( origin , Ġ{ Ġdelegate Ġ}, Ġcontaining Class , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlazy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Delegate : ĠPsi Field , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin : ĠLight Member Origin For Declaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontaining Class : ĠK t Light Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Real Delegate : Ġ() Ġ-> ĠPsi Field ĊĠĠĠĠĠĠĠ Ġ): ĠK t Light Field Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dummy Delegate Ġis ĠPsi Enum Constant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK t Light Enum Constant ( origin , Ġcompute Real Delegate Ġas Ġ() Ġ-> ĠPsi Enum Constant , Ġcontaining Class , Ġdummy Delegate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠK t Light Field For Declaration ( origin , Ġcompute Real Delegate , Ġcontaining Class , Ġdummy Delegate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Cls Fields ( delegate Class : ĠPsi Class , Ġcontaining Class : ĠK t Light Class ) Ġ= Ġdelegate Class . fields . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Light Field Impl . create ( get Origin ( it ), Ġit , Ġcontaining Class ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Origin ( field : ĠPsi Field ) Ġ= Ġget Member Origin ( field ) ĊĠĠĠ Ġ} Ċ } Ċ