/* Ċ Ġ* Ġ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 . ty Ċ Ċ import Ġcom . intellij . psi . stubs . Stub InputStream Ċ import Ġcom . intellij . psi . stubs . Stub OutputStream Ċ import Ġcom . tang . intellij . lua . search . Search Context Ċ import Ġjava . util . concurrent . Concurrent HashMap ĊĊ Ċ class ĠTy Primitive Literal Ġprivate Ġconstructor ( val Ġprimitive Kind : ĠTy Primitive Kind , Ġval Ġvalue : ĠString ) Ġ: ĠTy ( Ty Kind . Primitive Literal ) Ġ{ ĊĠĠĠ Ġoverride Ġval ĠdisplayName : ĠString Ġby Ġlazy Ġ{ Ġif Ġ( primitive Kind Ġ== ĠTy Primitive Kind . String ) Ġ"\" ${ value . replace (" \"", Ġ"\\ \" ") }\ "" Ġelse Ġvalue Ġ} ĊĊĠĠĠ Ġ// ĠTy . TRUE / Ty . FALSE Ġare ĠTy Primitive Literal , Ġto Ġavoid Ġcircular Ġreferences Ġ( a Ġnull Ġboolean Type ) Ġwe Ġmake Ġthis Ġlazy . ĊĠĠĠ Ġoverride Ġval Ġboolean Type Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( primitive Kind Ġ!= ĠTy Primitive Kind . Boolean Ġ|| Ġvalue Ġ== Ġ" true ") ĠTy . TRUE Ġelse ĠTy . FALSE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġprimitive Type Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( primitive Kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Primitive Kind . Boolean Ġ-> ĠTy . BOOLEAN ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Primitive Kind . Function Ġ-> ĠTy . FUNCTION ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Primitive Kind . Number Ġ-> ĠTy . NUMBER ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Primitive Kind . String Ġ-> ĠTy . STRING ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTy Primitive Kind . Table Ġ-> ĠTy . TABLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Super Class ( context : ĠSearch Context ): ĠI Ty ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimitive Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontr av ari ant Of ( other : ĠI Ty , Ġcontext : ĠSearch Context , Ġflags : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEven Ġwhen Ġ! Lua Settings . instance . is Nil Strict , Ġnil Ġis Ġnever Ġassignable Ġto Ġa Ġprimitive Ġliteral . ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ== Ġother Ġ|| Ġ( other Ġis ĠTy Unknown Ġ&& Ġflags Ġand ĠTy Variance Flags . STRICT _ UNKNOWN Ġ== Ġ 0 ) Ġ|| Ġsuper . contr av ari ant Of ( other , Ġcontext , Ġflags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠTy Primitive Literal Ġ&& Ġprimitive Kind Ġ== Ġother . primitive Kind Ġ&& Ġvalue . equals ( other . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠI Ty , Ġcontext : ĠSearch Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresolved Other Ġ= ĠTy . resolve ( other , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresolved Other Ġis ĠTy Primitive Literal Ġ&& Ġprimitive Kind Ġ== Ġresolved Other . primitive Kind Ġ&& Ġvalue . equals ( resolved Other . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimitive Kind . hashCode () Ġ* Ġ 3 1 Ġ* Ġvalue . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġguess Member Type ( name : ĠString , Ġsearch Context : ĠSearch Context ): ĠI Ty ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimitive Type . guess Member Type ( name , Ġsearch Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġguess Indexer Type ( index Ty : ĠI Ty , Ġsearch Context : ĠSearch Context , Ġexact : ĠBoolean ): ĠI Ty ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimitive Type . guess Indexer Type ( index Ty , Ġsearch Context , Ġexact ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprimitive L iterals Ġ= ĠConcurrent HashMap < String , ĠTy Primitive Literal >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Ty ( primitive Kind : ĠTy Primitive Kind , Ġvalue : ĠString ): ĠTy Primitive Literal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ"$ primitive Kind :$ value " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprimitive L iterals . get Or Put ( id , Ġ{ ĠTy Primitive Literal ( primitive Kind , Ġvalue ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠTy Primitive Literal Serializer Ġ: ĠTy Serializer < Ty Primitive Literal >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdeserialize Ty ( flags : ĠInt , Ġstream : ĠStub InputStream ): ĠTy Primitive Literal Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprimitive Kind Ġ= Ġstream . read Byte (). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠTy Primitive Literal . get Ty ( Ty Primitive Kind . values ()[ primitive Kind ], Ġstream . read UTF ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize Ty ( ty : ĠTy Primitive Literal , Ġstream : ĠStub OutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstream . write Byte ( ty . primitive Kind . ordinal ) ĊĠĠĠĠĠĠĠ Ġstream . write UTF ( ty . value ) ĊĠĠĠ Ġ} Ċ } Ċ