/* Ċ Ġ* Ġ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 . stubs Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . psi . stubs .* Ċ import Ġcom . intellij . util . Bit Util Ċ import Ġcom . intellij . util . io . String Ref Ċ import Ġcom . tang . intellij . lua . Constants Ċ import Ġcom . tang . intellij . lua . psi .* Ċ import Ġcom . tang . intellij . lua . psi . impl . Lua Func Def Stat Impl Ċ import Ġcom . tang . intellij . lua . search . Search Context Ċ import Ġcom . tang . intellij . lua . stubs . index . Lua Class Member Index Ċ import Ġcom . tang . intellij . lua . stubs . index . Stub Keys Ċ import Ġcom . tang . intellij . lua . ty . IF un Signature Ċ import Ġcom . tang . intellij . lua . ty . IT y Ċ import Ġcom . tang . intellij . lua . ty . Ty Generic Parameter Ċ Ċ /** ĊĊ Ġ* ĠCreated Ġby Ġtang zx Ġon Ġ 2 0 1 6 / 1 1 / 2 6 . Ċ Ġ*/ Ċ class ĠLua Func Type Ġ: ĠLua Stub ElementType < Lua Func Def Stat Stub , ĠLua Func Def Stat >(" Global ĠFunction ") Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Psi ( lua Global Func Stub : ĠLua Func Def Stat Stub ): ĠLua Func Def Stat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLua Func Def Stat Impl ( lua Global Func Stub , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Stub ( func Def Stat : ĠLua Func Def Stat , Ġstub Element : ĠStub Element < *> ): ĠLua Func Def Stat Stub Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ref Ġ= Ġfunc Def Stat . name Identifier !! ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġfunc Def Stat . containing File ĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġ( file Ġas ? ĠLua Psi File )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Context . with D umb ( func Def Stat . project , Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . get ModuleName ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConstants . WORD _ G ĊĠĠĠĠĠĠĠ Ġval Ġret Doc Ty Ġ= Ġfunc Def Stat . comment ?. tag Return ?. type ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġfunc Def Stat . params ĊĠĠĠĠĠĠĠ Ġval Ġgeneric Params Ġ= Ġfunc Def Stat . generic Params ĊĠĠĠĠĠĠĠ Ġval Ġover loads Ġ= Ġfunc Def Stat . over loads ĊĊĠĠĠĠĠĠĠ Ġvar Ġflags Ġ= ĠBit Util . set ( 0 , Ġfunc Def Stat . visibility . bit Mask , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠBit Util . set ( flags , ĠFLAG _ DEPRECATED , Ġfunc Def Stat . is Deprecated ) ĊĠĠĠĠĠĠĠ Ġflags Ġ= ĠBit Util . set ( flags , ĠFLAG _ EX PL IC IT LY _ TYPE D , Ġfunc Def Stat . is Explicit ly Typed ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLua Func Def Stat Stub Impl ( name Ref . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmoduleName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Doc Ty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc Def Stat . var arg Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover loads , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstub Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Create Stub ( node : ĠAST Node ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġnode . psi Ġas ĠLua Func Def Stat ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . func Body Ġ!= Ġnull Ġ&& Ġelement . name Identifier Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( stub : ĠLua Func Def Stat Stub , Ġstream : ĠStub OutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstream . write Name ( stub . name ) ĊĠĠĠĠĠĠĠ Ġstream . write Name ( stub . module ) ĊĠĠĠĠĠĠĠ Ġstream . write Short ( stub . flags ) ĊĠĠĠĠĠĠĠ Ġstream . write Ty Nullable ( stub . return Doc Ty ) ĊĠĠĠĠĠĠĠ Ġstream . write Ty Nullable ( stub . var arg Ty ) ĊĠĠĠĠĠĠĠ Ġstream . write Param Info Array ( stub . params ) ĊĠĠĠĠĠĠĠ Ġstream . write Generic Params Nullable ( stub . generic Params ) ĊĠĠĠĠĠĠĠ Ġstream . write Signatures ( stub . over loads ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( stream : ĠStub InputStream , Ġstub Element : ĠStub Element < *> ): ĠLua Func Def Stat Stub Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġstream . read Name () ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= Ġstream . read Name () ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġstream . read Short () ĊĠĠĠĠĠĠĠ Ġval Ġret Doc Ty Ġ= Ġstream . read Ty Nullable () ĊĠĠĠĠĠĠĠ Ġval Ġvar arg Ty Ġ= Ġstream . read Ty Nullable () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġstream . read Param Info Array () ĊĠĠĠĠĠĠĠ Ġval Ġgeneric Params Ġ= Ġstream . read Generic Params Nullable () ĊĠĠĠĠĠĠĠ Ġval Ġover loads Ġ= Ġstream . read Signatures () ĊĠĠĠĠĠĠĠ Ġreturn ĠLua Func Def Stat Stub Impl ( String Ref . toString ( name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Ref . toString ( module ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Doc Ty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġover loads , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstub Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġindex Stub ( lua Global Func Stub : ĠLua Func Def Stat Stub , Ġindex Sink : ĠIndex Sink ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġlua Global Func Stub . name ĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġlua Global Func Stub . module ĊĊĠĠĠĠĠĠĠ ĠLua Class Member Index . index Member Stub ( index Sink , ĠmoduleName , Ġname ) ĊĊĠĠĠĠĠĠĠ Ġindex Sink . occ urrence ( Stub Keys . SHORT _ NAME , Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFLAG _ DEPRECATED Ġ= Ġ 0 x 2 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFLAG _ EX PL IC IT LY _ TYPE D Ġ= Ġ 0 x 4 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠLua Func Def Stat Stub Ġ: ĠLua Func Body Owner Stub < Lua Func Def Stat >, ĠLua Class Member Stub < Lua Func Def Stat > Ġ{ ĊĠĠĠ Ġval Ġname : ĠString ĊĠĠĠ Ġval Ġmodule : ĠString ĊĠĠĠ Ġval Ġflags : ĠInt Ċ } Ċ Ċ class ĠLua Func Def Stat Stub Impl ( ĊĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġval Ġmodule : ĠString , ĊĠĠĠ Ġoverride Ġval Ġflags : ĠInt , ĊĠĠĠ Ġoverride Ġval Ġreturn Doc Ty : ĠI Ty ?, ĊĠĠĠ Ġoverride Ġval Ġvar arg Ty : ĠI Ty ?, ĊĠĠĠ Ġoverride Ġval Ġparams : ĠArray < Lua Param Info >, ĊĠĠĠ Ġoverride Ġval Ġgeneric Params : ĠArray < Ty Generic Parameter > ?, ĊĠĠĠ Ġoverride Ġval Ġover loads : ĠArray < IF un Signature >, ĊĠĠĠ Ġparent : ĠStub Element < *> Ċ ) Ġ: ĠStub Base < Lua Func Def Stat >( parent , ĠLua Types . FUNC _ DEF _ STAT Ġas ĠI Stub ElementType < *, Ġ*> ), ĠLua Func Def Stat Stub Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdoc Ty : ĠI Ty ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġis Deprecated : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠBit Util . isSet ( flags , ĠLua Func Type . FLAG _ DEPRECATED ) ĊĊĠĠĠ Ġoverride Ġval Ġis Explicit ly Typed : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠBit Util . isSet ( flags , ĠLua Func Type . FLAG _ EX PL IC IT LY _ TYPE D ) ĊĊĠĠĠ Ġoverride Ġval Ġvisibility : ĠVisibility ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠVisibility . get With Mask ( flags ) Ċ } Ċ