// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . kotlin . idea . parameter Info Ċ Ċ import Ġcom . intellij . code Insight . hints . In lay Info Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi WhiteSpace Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Constructor Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Package View Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Call Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . hints . In lay Info Details Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . hints . Text In lay Info Detail Ċ import Ġorg . jetbrains . kotlin . idea . core . util . is Multi Line Ċ import Ġorg . jetbrains . kotlin . idea . formatter . kotlin Custom Settings Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . Specify Type Explicit ly Int ention Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . get LineNumber Ċ import Ġorg . jetbrains . kotlin . idea . references . resolve Main Reference To Descriptors Ċ import Ġorg . jetbrains . kotlin . name . Special Names Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . end Offset Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ import Ġorg . jetbrains . kotlin . resolve . sam . Sam Constructor Descriptor Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . type Util . contains Error Ċ import Ġorg . jetbrains . kotlin . types . type Util . immediate Sup ert ypes Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Enum Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Unit Ċ Ċ fun Ġprovide PropertyType Hint ( elem : ĠPsi Element ): ĠList < In lay Info Details > Ġ{ ĊĠĠĠ Ġ( elem Ġas ? ĠK t Callable Declaration )?. let Ġ{ Ġproperty Ġ-> ĊĠĠĠĠĠĠĠ Ġproperty . name Identifier ?. let Ġ{ Ġident Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Type Hint ( property , Ġident . end Offset )?. let Ġ{ Ġreturn ĠlistOf ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġempty List () Ċ } Ċ Ċ fun Ġprovide Type Hint ( element : ĠK t Callable Declaration , Ġoffset : ĠInt ): ĠIn lay Info Details ? Ġ{ ĊĠĠĠ Ġvar Ġtype : ĠKotlin Type Ġ= ĠSpecify Type Explicit ly Int ention . getType For Declaration ( element ). unwrap () ĊĠĠĠ Ġif Ġ( type . contains Error ()) Ġreturn Ġnull ĊĠĠĠ Ġval Ġdeclaration Descriptor Ġ= Ġtype . constructor . declaration Descriptor ĊĠĠĠ Ġval Ġname Ġ= Ġdeclaration Descriptor ?. name ĊĠĠĠ Ġif Ġ( name Ġ== ĠSpecial Names . NO _ NAME _ PROVIDED ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠK t Property Ġ&& Ġelement . is Local ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġlocal Ġvariables , Ġan Ġanonymous Ġobject Ġtype Ġis Ġnot Ġcollapsed Ġto Ġits Ġsup ertype , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġshowing Ġthe Ġsup ertype Ġwill Ġbe Ġmis leading ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype . immediate Sup ert ypes (). single OrNull () Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} Ġelse Ġif Ġ( name ?. is Special Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( element Ġis ĠK t Property Ġ&& Ġelement . is Local Ġ&& Ġtype . is Unit () Ġ&& Ġelement . is Multi Line ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproperty Line Ġ= Ġelement . get LineNumber () ĊĠĠĠĠĠĠĠ Ġval Ġequals Token Line Ġ= Ġelement . equals Token ?. get LineNumber () Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġval Ġinitializer Line Ġ= Ġelement . initializer ?. get LineNumber () Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( property Line Ġ== Ġequals Token Line Ġ&& Ġproperty Line Ġ!= Ġinitializer Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindent Before Property Ġ= Ġ( element . prev Sibling Ġas ? ĠPsi WhiteSpace )?. text ?. substring After Last ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindent Before Initializer Ġ= Ġ( element . initializer ?. prev Sibling Ġas ? ĠPsi WhiteSpace )?. text ?. substring After Last ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indent Before Property Ġ== Ġindent Before Initializer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġif Ġ( is Un clear Type ( type , Ġelement )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġelement . containing Kt File . kotlin Custom Settings ĊĠĠĠĠĠĠĠ Ġval Ġrendered Type Ġ= ĠH ints Type Renderer . getIn lay Hints Type Renderer ( element . analyze (), Ġelement ). render Type ( type ) ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . SPACE _ BEFORE _ TYPE _ COL ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings . SPACE _ AFTER _ TYPE _ COL ON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġin lay Info Ġ= ĠIn lay Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ"", Ġoffset Ġ= Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Show Only If Exist ed Before Ġ= Ġfalse , Ġis Filter By Black list Ġ= Ġtrue , Ġrel ates To Pre ced ing Text Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIn lay Info Details ( in lay Info , ĠlistOf ( Text In lay Info Detail ( prefix )) Ġ+ Ġrendered Type ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġis Un clear Type ( type : ĠKotlin Type , Ġelement : ĠK t Callable Declaration ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( element Ġ! is ĠK t Property ) Ġreturn Ġtrue ĊĊĠĠĠ Ġval Ġinitializer Ġ= Ġelement . initializer Ġ?: Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( initializer Ġis ĠK t Constant Expression Ġ|| Ġinitializer Ġis ĠK t String Template Expression ) Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( initializer Ġis ĠK t Unary Expression Ġ&& Ġinitializer . base Expression Ġis ĠK t Constant Expression ) Ġreturn Ġfalse ĊĊĠĠĠ Ġif Ġ( is Constructor Call ( initializer )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( initializer Ġis ĠK t Dot Qualified Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselector Expression Ġ= Ġinitializer . selector Expression ĊĠĠĠĠĠĠĠ Ġif Ġ( type . is Enum ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnot Ġshow Ġtype Ġfor Ġenums Ġif Ġinitializer Ġhas Ġenum Ġentry Ġwith Ġexplicit Ġenum Ġname : Ġval Ġp Ġ= ĠEnum . ENTRY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenum Entry Descriptor : ĠDeclaration Descriptor ? Ġ= Ġselector Expression ?. resolve Main Reference To Descriptors ()?. single OrNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enum Entry Descriptor Ġ!= Ġnull Ġ&& ĠDescriptor Utils . is Enum Entry ( enum Entry Descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( initializer . receiver Expression . is Class Or Package Reference () Ġ&& Ġis Constructor Call ( selector Expression )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ private Ġfun Ġis Constructor Call ( initializer : ĠK t Expression ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( initializer Ġis ĠK t Call Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Call Ġ= Ġinitializer . resolve To Call ( Body Resolve Mode . FULL ) ĊĠĠĠĠĠĠĠ Ġval Ġresolved Descriptor Ġ= Ġresolved Call ?. candidate Descriptor ĊĠĠĠĠĠĠĠ Ġif Ġ( resolved Descriptor Ġis ĠSam Constructor Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( resolved Descriptor Ġis ĠConstructor Descriptor Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( resolved Descriptor . construct ed Class . declared Type Parameters . isEmpty () Ġ|| Ġinitializer . type ArgumentList Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ private Ġfun ĠK t Expression . is Class Or Package Reference (): ĠBoolean Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠK t Name Reference Expression Ġ-> Ġthis . resolve Main Reference To Descriptors (). single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit Ġis ĠClass Descriptor Ġ|| Ġit Ġis ĠPackage View Descriptor Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠK t Dot Qualified Expression Ġ-> Ġthis . selector Expression ?. is Class Or Package Reference () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} Ċ