@ file : Suppress (" Un stable Api Usage ") Ċ package Ġnet . a quad c . mike . plugin . interfaces Ċ Ċ import Ġcom . intellij . code Insight . hints . ChangeListener Ċ import Ġcom . intellij . code Insight . hints . Factory In lay Hints Collector Ċ import Ġcom . intellij . code Insight . hints . Immediate Configurable Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Collector Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Provider Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Provider Factory Ċ import Ġcom . intellij . code Insight . hints . In lay Hints Sink Ċ import Ġcom . intellij . code Insight . hints . Provider Info Ċ import Ġcom . intellij . code Insight . hints . Settings Key Ċ import Ġcom . intellij . code Insight . hints . presentation . In lay Presentation Ċ import Ġcom . intellij . java . Java Bundle Ċ import Ġcom . intellij . lang . java . Java Language Ċ import Ġcom . intellij . lang . jvm . types . Jvm Reference Type Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . D umb Service Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . search . Global Search Scope . all Scope Ċ import Ġcom . intellij . ui . layout . panel Ċ import Ġnet . a quad c . mike . plugin . max By If Ċ import Ġnet . a quad c . mike . plugin . referenced Name Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Language Ċ import Ġorg . jetbrains . kotlin . idea . references . main Reference Ċ import Ġorg . jetbrains . kotlin . j 2 k . get Containing Class Ċ import Ġorg . jetbrains . kotlin . j 2 k . get Containing Method Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . reference Expression Ċ import Ġorg . jetbrains . u ast . U Expression Ċ import Ġorg . jetbrains . u ast . U Method Ċ import Ġorg . jetbrains . u ast . U Parameter Ċ import Ġorg . jetbrains . u ast . to U Element OfType Ċ import Ġjavax . swing . J Component Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ Ċ /** Ċ Ġ* Ġ@ author ĠM ike ĠG or Ã¼n Ã³ v Ċ Ġ*/ Ċ class ĠInterface Hints PF Ġ: ĠIn lay Hints Provider Factory Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Providers Info ( project : ĠProject ): ĠList < Provider Info < out ĠAny >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠProvider Info ( Java Language . INSTANCE , ĠInterface Hints P ( j Settings Key )), ĊĠĠĠĠĠĠĠ ĠProvider Info ( Kotlin Language . INSTANCE , ĠInterface Hints P ( k Settings Key )), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġj Settings Key Ġ= ĠSettings Key < Hints Settings >(" net . a quad c . mike . plugin . interfaces . hints . java ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġk Settings Key Ġ= ĠSettings Key < Hints Settings >(" net . a quad c . mike . plugin . interfaces . hints . kotlin ") ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠInterface Hints P ( ĊĠĠĠ Ġoverride Ġval Ġkey : ĠSettings Key < Hints Settings >, Ċ ) Ġ: ĠIn lay Hints Provider < Hints Settings > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Collector For ( ĊĠĠĠĠĠĠĠ Ġfile : ĠPsi File , Ġeditor : ĠEditor , Ġsettings : ĠH ints Settings , Ġsink : ĠIn lay Hints Sink ĊĠĠĠ Ġ): ĠIn lay Hints Collector Ġ= ĊĠĠĠĠĠĠĠ ĠInterface Hints Collector ( editor , Ġfile , Ġsettings ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Settings (): ĠH ints Settings Ġ= ĠH ints Settings () ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġget () Ġ= Ġ" Interface Ġhints " ĊĠĠĠ Ġoverride Ġval Ġpreview Text : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Configurable ( settings : ĠH ints Settings ): ĠIm mediate Configurable Ġ= Ġobject Ġ: ĠIm mediate Configurable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Component ( listener : ĠChange Listener ): ĠJ Component Ġ= Ġpanel Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmain Checkbox Text : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠJava Bundle . message (" settings . in lay . java . show . hints . for ") Ġ// ĠâĢľ Show Ġhints Ġfor : âĢĿ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcases : ĠList < Immediate Configurable . Case > Ġget () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCase (" Up cast Ġto Ġinterface ", Ġsettings :: up cast ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCase (" Interface Ġmethod Ġoverride ", Ġsettings :: over r ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠCase ( name : ĠString , Ġproperty : ĠK Mutable Property 0 < Boolean >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIm mediate Configurable . Case ( name , Ġproperty . name , Ġproperty ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠInterface Hints Collector ( ĊĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠ Ġprivate Ġval Ġfile : ĠPsi File , ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠH ints Settings Ċ ) Ġ: ĠFactory In lay Hints Collector ( editor ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcollect ( element : ĠPsi Element , Ġeditor : ĠEditor , Ġsink : ĠIn lay Hints Sink ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( file . project . let Ġ{ ĠD umb Service . is D umb ( it ) Ġ|| Ġit . is Default Ġ}) Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġtrue . also Ġ{ Ġdo Collect ( element , Ġsink ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Collect ( element : ĠPsi Element , Ġsink : ĠIn lay Hints Sink ): ĠUnit Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings . up cast Ġ&& Ġelement Ġis ĠPsi MethodCall Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . argument List . expressions . take If ( Array <* >:: isNotEmpty )?. let Ġ{ Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . method Expression . reference ?. resolve ()?. function Params ?. let Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . forEach Indexed Ġ{ Ġidx , Ġarg : ĠPsi Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . get OrNull ( idx )?. second ?. let Ġ{ Ġparameter Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . method Expression . reference Name ?. let Ġ{ ĠmethodName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg . type ?. let Ġ{ Ġarg Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Parameter ( methodName , Ġparameter Type , Ġarg Type , Ġarg . text Range . end Offset , Ġsink ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . up cast Ġ&& Ġelement Ġis ĠK t Call Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . value Arguments . take If ( List <* >:: isNotEmpty )?. let Ġ{ Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . callee Expression ?. main Reference ?. resolve ()?. function Params ?. let Ġ{ Ġparams Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . forEach Indexed Ġ{ Ġidx , Ġarg : ĠK t Value Argument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarg . get Argument Name ()?. as Name ?. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( name Ġ!= Ġnull ) Ġparams . first OrNull Ġ{ Ġit . first Ġ== Ġname Ġ} Ġelse Ġparams . get OrNull ( idx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . second ?. let Ġ{ Ġp Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarg . get Argument Expression ()?. to U Element OfType < U Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Expression Type ()?. let Ġ{ Ġa Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . reference Expression ()?. referenced Name ?. let Ġ{ ĠmethodName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Parameter ( methodName , Ġp Type , Ġa Type , Ġarg . text Range . end Offset , Ġsink ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . over r Ġ&& Ġelement Ġis ĠPsi Annotation Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . take If Ġ{ Ġit . name Reference Element ?. qualified Name Ġ== Ġ" java . lang . Override " Ġ} ?. let Ġ{ Ġel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . get Containing Method ()?. find Super Methods ()?. first OrNull ()?. containing Class ?. let Ġ{ Ġdeclaring T Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Override ( el , Ġdeclaring T , Ġsink , Ġelement . text Range . end Offset , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsettings . over r Ġ&& Ġelement Ġis ĠK t Named Function Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . take If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . receiver Type Reference Ġ== Ġnull Ġ&& Ġ// Ġignore Ġextensions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . modifier List ?. get Modifier ( Kt Tokens . OVERRIDE _ KEYWORD ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. name Identifier ?. let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġas Java Method Ġ= Ġelement . to U Element OfType < U Method >() ?. java Psi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( as Java Method ?. find Super Methods ()?. first OrNull ()?. containing Class )?. let Ġ{ Ġdeclaring T Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Override ( as Java Method , Ġdeclaring T , Ġsink , Ġname . text Range . start Offset , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ġ?: ĠUnit ĊĊĠĠĠ Ġprivate Ġfun Ġvisit Override ( ĊĠĠĠĠĠĠĠ Ġjava Element : ĠPsi Element , Ġdeclaring Type : ĠPsi Class , Ġsink : ĠIn lay Hints Sink , Ġoffset : ĠInt , Ġjava : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! decl aring Type . is Interface ) Ġreturn Ġ// Ġsuch Ġa Ġhint Ġis Ġuseless Ġin Ġsingle Ġclass Ġinheritance Ġmodel ĊĠĠĠĠĠĠĠ Ġval Ġcontaining Class Ġ= Ġjava Element . get Containing Class () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġcontaining Class . main Interface ?. let Ġ{ Ġmain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main Ġ== Ġdeclaring Type Ġ|| Ġmain . isIn her itor ( decl aring Type , Ġtrue )) Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġdeclaring Type . typeName Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġsink . add Inline Element ( offset , Ġfalse , Ġhint ( if Ġ( java ) Ġ" from Ġ$ className " Ġelse Ġ"$ className ."), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠPsi Element . function Params ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ? ĠPsi Method )?. parameters ?. map Ġ{ Ġnull Ġto Ġ( it . type Ġas ? ĠJ vm Reference Type )?. resolve () Ġas ? ĠPsi Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ( this Ġas ? ĠK t Callable Declaration )?. value Parameters ?. map Ġ{ Ġparam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . name Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( param . to U Element OfType < U Parameter >() ?. type Ġas ? ĠJ vm Reference Type )?. resolve () Ġas ? ĠPsi Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvisit Parameter ( ĊĠĠĠĠĠĠĠ ĠmethodName : ĠString , Ġparameter Type : ĠPsi Element , Ġargument Type : ĠPsi Type , Ġoffset : ĠInt , Ġsink : ĠIn lay Hints Sink ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parameter Type Ġis ĠPsi Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! parameter Type . is Interface ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Class Ġ= Ġwhen Ġ( argument Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Type . NULL Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi ClassType Ġ-> Ġargument Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Primitive Type Ġ-> Ġargument Type . get Boxed Type ( parameter Type . manager , Ġall Scope ( parameter Type . getProject ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. resolve () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg Class . main Interface ?. let Ġ{ Ġmain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main Ġ== Ġparameter Type Ġ|| Ġmain . isIn her itor ( parameter Type , Ġtrue )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Type . typeName ?. take If Ġ{ Ġ! methodName . contains ( it , Ġignore Case Ġ= Ġtrue ) Ġ} ?. let Ġ{ ĠtypeName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsink . add Inline Element ( offset , Ġfalse , Ġhint (" as Ġ$ typeName "), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhint ( text : ĠString ): ĠIn lay Presentation Ġ= ĊĠĠĠĠĠĠĠ Ġfactory . round With Background And Small Inset ( factory . small Text ( text )) ĊĊĠĠĠ Ġprivate Ġval ĠPsi Class . main Interface : ĠPsi Class ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Interface ByName Ġ?: Ġmain Interface By Impl Count Ġ?: Ġinterfaces . take If Ġ{ ĠsuperClass Ġ== Ġnull Ġ} ?. single OrNull () ĊĊĠĠĠ Ġprivate Ġval ĠPsi Class . main Interface ByName : ĠPsi Class ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Interface ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġname Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinterfaces . first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Name Ġ= Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġi . e . ĠArrayList 's Ġmain Ġinterface Ġis ĠList , ĠCool Handler 's Ġmain Ġis ĠId le Handler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Last Cap Ġ= Ġname . indexOf Last ( Character :: is UpperCase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Last Cap Ġ= Ġi Name ?. indexOf Last ( Character :: is UpperCase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Name Ġ!= Ġnull Ġ&& Ġc Last Cap Ġ> Ġ- 1 Ġ&& Ġi Last Cap Ġ!= Ġnull Ġ&& Ġi Last Cap Ġ> Ġ- 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . region Matches ( c Last Cap , Ġi Name , Ġi Last Cap , Ġi Name . length Ġ- Ġi Last Cap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠsuperClass ?. main Interface ByName ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠL OL , Ġvery Ġsimple , Ġignores Ġhow Ġmany Ġof Ġthem Ġwere Ġactually Ġimplemented ĊĠĠĠ Ġprivate Ġval ĠPsi Class . main Interface By Impl Count : ĠPsi Class ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinterfaces Ġ// Ġignore Ġsingle - Ġor Ġtwo - method Ġinterfaces ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By If ({ Ġit . methods . count Ġ{ Ġit . modifier List . has Modifier Property ( Psi Modifier . AB STR ACT ) Ġ} Ġ}, Ġ{ Ġit Ġ> Ġ 2 Ġ}) ĊĊĠĠĠ Ġprivate Ġval ĠPsi Class . typeName : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( qualified Name ?. startsWith (" kotlin . jvm . functions . Function ") Ġ== Ġtrue ) Ġ"( âĢ¦ ) Ġ-> ĠâĢ¦ " Ġelse Ġname Ċ } Ċ Ċ data Ġclass ĠH ints Settings ( var Ġup cast : ĠBoolean Ġ= Ġtrue , Ġvar Ġover r : ĠBoolean Ġ= Ġtrue ) Ċ