package Ġcom . ky _ proj . sp j plugin . code insight Ċ Ċ import Ġcom . intellij . code Insight . hints .* Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . tree . Token Set Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . ky _ proj . sp j plugin . language . Sp j Language Ċ import Ġcom . ky _ proj . sp j plugin . psi . Sp j Arguments Ċ import Ġcom . ky _ proj . sp j plugin . psi . Sp j Types Ċ import Ġcom . ky _ proj . sp j plugin . util . Sp j Command Provider Ċ import Ġcom . ky _ proj . sp j plugin . util . Sp j Function Provider Ċ Ċ class ĠSp j In lay Parameter Hints Provider Ġ: ĠIn lay Parameter Hints Provider Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance () Ġ= ĠIn lay Parameter Hints Extension . for Language ( Sp j Language . INSTANCE ) Ġas ĠSp j In lay Parameter Hints Provider ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Hint Info ( element : ĠPsi Element ): ĠHint Info . MethodInfo ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Parameter Hints ( element : ĠPsi Element ): ĠList < In lay Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Token Set . create ( Sp j Types . ARGUMENT S ). contains ( element . node . elementType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Hints Of Arguments ( element ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetDefault Black List (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset Of ("") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Hints Of Arguments ( arguments : ĠPsi Element ): ĠList < In lay Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < In lay Info >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( arg Ġin Ġget Elements For Arg As Node ( arguments )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( get Hints Of Arg ( arg , Ġarguments )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Hints Of Arg ( node : ĠAST Node , Ġarguments : ĠPsi Element ): ĠList < In lay Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åĳ¼ ãģ³ åĩº ãģĹ åģ ´ ãģ® element ĊĠĠĠĠĠĠĠ Ġif Ġ( arguments . node . elementType Ġ!= ĠSp j Types . ARGUMENT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġarguments ãģĺ ãĤ ĥ ãģª ãģĭ ãģ£ãģŁ ãĤī ä½ķ ãĤĤ ãģĹãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcaller Ġ= Ġarguments . parent Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġcaller Node Ġ= Ġcaller . node Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Token Set . create ( Sp j Types . CALL ING _ PROC EDURE , ĠSp j Types . CALL ING _ FUNCTION , ĠSp j Types . CALL ING _ COMMAND ). contains ( caller Node . elementType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhints ãĤĴ åĩº ãģĻ ãģ® ãģ¯ ãĥĹãĥŃ ãĤ· ãĥ¼ãĤ¸ ãĥ£ ãĢģ éĸ¢æķ° ãĢģ ãĤ³ãĥŀãĥ³ãĥī ãģ® åĳ¼ ãģ³ åĩº ãģĹ æĻĤ ãģ® ãģ¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å®ļç¾© åħĥ ãĤĴ æİ¢ ãģĻ ãĢĤ çī¹å®ļ ãģ§ãģį ãģª ãģĳ ãĤĮãģ° çĦ¡ è¦ĸ ãĢĤ ĊĠĠĠĠĠĠĠ Ġval Ġdef Ġ= Ġget Definition ( caller ) Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġif Ġ( def Ġ=== Ġcaller ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdefined Arguments Ġ= ĠPsi Tree Util . find Child OfType ( def , ĠSp j Arguments :: class . java ) Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĳ¼ ãģ³ åĩº ãģĹ åģ ´ ãģ® å¼ķ æķ° ãģ® éłĨ çķª ĊĠĠĠĠĠĠĠ Ġval Ġcaller Index Ġ= Ġget Elements For Arg As Node ( arguments ). indexOf ( node ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å®ļç¾© åħĥ ãģ® å¼ķ æķ° ãĥªãĤ¹ãĥĪ ĊĠĠĠĠĠĠĠ Ġval Ġdefined Arguments List Ġ= Ġget Elements For Arg As Node ( defined Arguments ) ĊĠĠĠĠĠĠĠ Ġif Ġ( caller Index Ġ== Ġ- 1 Ġ|| Ġdefined Arguments List . size Ġ<= Ġcaller Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( defined Arguments List [ caller Index ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( In lay Info ( defined Arguments List [ caller Index ]. text , Ġnode . start Offset )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetToken Set For Arg (): ĠToken Set Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠToken Set . create ( Sp j Types . ARGS , ĠSp j Types . NUMBER , ĠSp j Types . CALL ING _ FUNCTION , ĠSp j Types . STRING ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Elements For Arg As Node ( arguments : ĠPsi Element ): ĠArray < AST Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < AST Node >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġarguments . node . getChildren ( getToken Set For Arg ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getToken Set For Arg (). contains ( child . elementType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Definition ( element : ĠPsi Element ): ĠPsi Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( element . node . elementType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp j Types . CALL ING _ PROC EDURE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . reference ?. resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp j Types . CALL ING _ FUNCTION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdef Ġ= Ġelement . reference ?. resolve () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( def Ġ!== Ġelement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å®ļç¾© ãģķãĤĮãģŁ ãĥĹãĥŃ ãĤ· ãĥ¼ãĤ¸ ãĥ£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çµĦ ãģ¿ è¾¼ ãģ¿ éĸ¢æķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Name Ġ= Ġelement . node . find Child ByType ( Sp j Types . FUNCTION )?. text Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp j Function Provider . get Definition ByName ( element . project , Ġelem Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp j Types . CALL ING _ COMMAND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelem Name Ġ= Ġelement . node . find Child ByType ( Sp j Types . COM _ CALL )?. text Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp j Command Provider . get Definition ByName ( element . project , Ġelem Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }