/* Ċ Ġ* ĠCopyright Ġ 2 0 0 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 . u ast Ċ Ċ import Ġorg . jetbrains . u ast . kind s . U ast Variable Initial ier Kind Ċ import Ġorg . jetbrains . u ast . visitor . U ast Visitor Ċ Ċ interface ĠU Variable Ġ: ĠU Declaration , ĠU Modifier Owner , ĠU Visibility Owner , ĠU Annotated Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġvariable Ġinitializer Ġ( or Ġthe Ġdefault Ġvalue Ġfor Ġvalue Ġparameter ), Ġor Ġnull Ġif Ġthe Ġvariable Ġis Ġnot Ġinitialized . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinitializer : ĠU Expression ? ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġvariable Ġinitializer Ġkind Ġ( simple Ġinitializer , Ġproperty Ġdeleg ation , Ġetc .). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġinitializer Kind : ĠU ast Variable Initial ier Kind ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġvariable Ġkind . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġkind : ĠU ast Variable Kind ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġvariable Ġtype . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtype : ĠU Type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġlist Ġof Ġaccessors Ġif Ġthe Ġvariable Ġis Ġa Ġproperty , Ġor Ġnull Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġaccessors : ĠList < U Function >? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( visitor : ĠU ast Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( visitor . visit Variable ( this )) Ġreturn ĊĠĠĠĠĠĠĠ Ġname Element ?. accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġinitializer ?. accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġannotations . accept List ( visitor ) ĊĠĠĠĠĠĠĠ Ġtype . accept ( visitor ) ĊĠĠĠĠĠĠĠ Ġvisitor . after Visit Variable ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender String (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( kind Ġ!= ĠU ast Variable Kind . VALUE _ PARAMETER ) Ġappend With Space ( visibility . name ) ĊĠĠĠĠĠĠĠ Ġappend With Space ( render Modifiers ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( kind Ġ!= ĠU ast Variable Kind . VALUE _ PARAMETER ) Ġappend (" var Ġ") ĊĠĠĠĠĠĠĠ Ġappend ( name ) ĊĠĠĠĠĠĠĠ Ġappend (": Ġ") ĊĠĠĠĠĠĠĠ Ġappend ( type . name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( initializer Ġ!= Ġnull Ġ&& Ġinitializer Ġ! is ĠEmpty U Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( initializer !!. render String ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġaccessors ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Indexed Ġ{ Ġi , Ġaccessor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ build String . append ( accessor . render String (). with Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( i Ġ+ Ġ 1 ) Ġ< Ġit . size ) Ġappend ln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog String () Ġ= Ġ" U Variable Ġ($ name , Ġkind Ġ= Ġ${ kind . name })\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( initializer ?. let Ġ{ Ġit . log String (). with Margin Ġ} Ġ?: Ġ"< no Ġinitializer >") Ċ } Ċ Ċ object ĠU Variable Not Resolved Ġ: ĠU Variable Ġ{ ĊĠĠĠ Ġoverride Ġval Ġinitializer Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġinitializer Kind Ġ= ĠU ast Variable Initial ier Kind . NO _ INITIAL IZER ĊĠĠĠ Ġoverride Ġval Ġkind Ġ= ĠU ast Variable Kind ( ERROR _ NAME ) ĊĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠU ast ErrorType ĊĠĠĠ Ġoverride Ġval Ġname Element Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġparent Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġname Ġ= ĠERROR _ NAME ĊĠĠĠ Ġoverride Ġval Ġvisibility Ġ= ĠU ast Visibility . LOCAL ĊĊĠĠĠ Ġoverride Ġfun Ġhas Modifier ( modifier : ĠU ast Modifier ) Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġannotations Ġ= Ġempty List < U Annotation >() Ċ }