/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 . Ġtang zx ( love . tang zx @ qq . com ) Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . tang . intellij . lua . code Insight . int ention Ċ Ċ import Ġcom . intellij . code Insight . int ention . impl . Base Int ention Action Ċ import Ġcom . intellij . code Insight . template . impl . Macro Call Node Ċ import Ġcom . intellij . code Insight . template . impl . Text Expression Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . util . Incorrect OperationException Ċ import Ġcom . tang . intellij . lua . code Insight . template . macro . Suggest Type Macro Ċ import Ġcom . tang . intellij . lua . comment . Lua Comment Util Ċ import Ġcom . tang . intellij . lua . psi . Lua Comment Owner Ċ import Ġcom . tang . intellij . lua . psi . Lua ParamName Def Ċ import Ġorg . jetbrains . annotations . N ls Ċ Ċ class ĠCreate Parameter Annotation Int ention Ġ: ĠBase Int ention Action () Ġ{ ĊĠĠĠ Ġ@ N ls ĊĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġtext ĊĊĠĠĠ Ġoverride Ġfun ĠgetText () Ġ= Ġ" Create Ġparameter Ġannotation " ĊĊĠĠĠ Ġoverride Ġfun Ġis Available ( project : ĠProject , Ġeditor : ĠEditor , Ġpsi File : ĠPsi File ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġeditor . caret Model . offset ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfind ParamName ( psi File , Ġoffset ) Ġ?: Ġfind ParamName ( psi File , Ġoffset Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġname Ġ!= Ġnull Ġ// && Ġname . func Body Owner Ġ! is ĠLua Closure Expr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind ParamName ( psi File : ĠPsi File , Ġoffset : Int ): ĠLua ParamName Def ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġelement Ġ= Ġpsi File . findElement At ( offset ) ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ= Ġelement . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠLua ParamName Def ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Owner Ġ= ĠPsi Tree Util . getParent OfType ( element , ĠLua Comment Owner :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= Ġcomment Owner ?. comment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment ?. getParam Def ( element . name ) Ġ?: Ġreturn Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Incorrect OperationException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġpsi File : ĠPsi File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġeditor . caret Model . offset ĊĠĠĠĠĠĠĠ Ġval Ġpar Def Ġ= Ġfind ParamName ( psi File , Ġoffset ) Ġ?: Ġfind ParamName ( psi File , Ġoffset Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġpar Def Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġowner Ġ= ĠPsi Tree Util . getParent OfType ( par Def , ĠLua Comment Owner :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( owner Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLua Comment Util . insert Template ( owner , Ġeditor ) Ġ{ Ġ_, Ġtemplate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . add Text Segment ( String . format (" ---@ param Ġ% s Ġ", Ġpar Def . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠMacro Call Node ( Suggest Type Macro ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . add Variable (" type ", Ġname , ĠText Expression (" table "), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate . add End Variable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }