package Ġorg . are nd . actions Ċ Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . editor . ex . util . Editor Util Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġorg . are nd . core . definition . Function Ċ import Ġorg . are nd . core . elim tree . E lim Body Ċ import Ġorg . are nd . core . expr . Expression Ċ import Ġorg . are nd . ext . core . definition . Core Function Definition Ċ import Ġorg . are nd . ext . core . ops . Normalization Mode Ċ import Ġorg . are nd . psi . Are nd Def Function Ċ import Ġorg . are nd . psi . ext . Are nd Composite Element Ċ import Ġorg . are nd . refactor ing .* Ċ import Ġorg . are nd . settings . Are nd Project Settings Ċ import Ġorg . are nd . term . concrete . Concrete Ċ import Ġorg . are nd . type checking . sub expr . Find Binding Ċ import Ġorg . jetbrains . annotations . N ls Ċ Ċ class ĠAre nd Show Type Action Ġ: ĠAre nd Popup Action () Ġ{ ĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ N ls Ġprivate Ġconst Ġval ĠAD _ TEXT Ġ= Ġ" Type Ġof ĠExpression " ĊĠĠĠĠĠĠĠ Ġ@ N ls Ġprivate Ġconst Ġval ĠAD _ TEXT _ N Ġ= Ġ" Type Ġof ĠExpression Ġ$ NF " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Handler () Ġ= Ġobject Ġ: ĠAre nd Popup Handler ( request Focus ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġfile : ĠPsi File ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Invoke ( editor , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠSub Expr Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Error Hint ( editor , Ġ" Failed Ġto Ġobtain Ġtype Ġbecause Ġ${ t . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Sub Expr Exception :: class ) ĊĠĠĠ Ġprivate Ġfun ĠAre nd Popup Handler . do Invoke ( editor : ĠEditor , Ġfile : ĠPsi File , Ġproject : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Ġ= ĠEditor Util . getSelection In Any Mode ( editor ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġselect ( range : ĠText Range ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . selection Model . setSelection ( range . start Offset , Ġrange . end Offset ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġhint ( e : ĠExpression ?, Ġelement : ĠAre nd Composite Element ?) Ġ= Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnormalize Popup Ġ= Ġproject . service < Are nd Project Settings >(). data . normalize Popup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefinition Ren amer Ġ= Ġelement ?. let Ġ{ ĠPsi Loc ated Ren amer ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( normalize Popup ) Ġnormalize Expr ( project , Ġe , ĠNormal ization Mode . R NF , Ġdefinition Ren amer ) Ġ{ Ġexpr Str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Editor Hint ( expr Str . toString (), Ġproject , Ġeditor , ĠAD _ TEXT _ N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Editor Hint ( expr To Concrete ( project , Ġe , ĠNormal ization Mode . R NF , Ġdefinition Ren amer ). toString (), Ġproject , Ġeditor , ĠAD _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠSub Expr Exception (" failed Ġto Ġsynt hesize Ġtype Ġfrom Ġgiven Ġexpr ") ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrespon ded Sub Expr ( selected , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSub Expr Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( function , Ġtc ) Ġ= Ġe . def Ġ?: Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function Ġ! is ĠConcrete . Function Definition Ġ|| Ġtc Ġ! is ĠAre nd Def Function ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġfunction . body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġit 's Ġnot Ġan Ġexpr Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body . term Ġ!= Ġnull ) Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcore Def Ġ= Ġtc . tc Refer able ?. type checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcore Body Ġ= Ġ( core Def Ġas ? ĠFunction )?. body Ġas ? ĠE lim Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( core Def Ġas ? ĠCore Function Definition )?. actual Body Ġas ? ĠE lim Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Body Ġ= Ġtc . function Body Ġ?: Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbind Ġ= Ġbinding ( psi Body , Ġselected ) Ġ?: Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Ġ= ĠFind Binding . visit Clause s ( bind , Ġbody . clauses , Ġcore Body . clauses ) Ġ?: Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( bind . text Range ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint ( ref . type Expr , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfind Binding Ġ= Ġsub . find Binding ( selected ) ĊĠĠĠĠĠĠĠ Ġif Ġ( find Binding Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( range Of Concrete ( sub . sub Concrete )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhint ( sub . sub Core . type , Ġsub . sub Psi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ( param , Ġtype ) Ġ= Ġfind Binding ĊĠĠĠĠĠĠĠ Ġselect ( param . text Range ) ĊĠĠĠĠĠĠĠ Ġhint ( type , Ġnull ) ĊĠĠĠ Ġ} Ċ }