package Ġcom . vk . k php storm . ex ph ptype Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . jetbrains . php . lang . psi . elements . Php Psi Element Ċ import Ġcom . jetbrains . php . lang . psi . resolve . types . Php Type Ċ import Ġcom . vk . k php storm . type Providers . Tuple Shape Type Provider Ċ Ċ /** Ċ Ġ* ĠPurpose : Ċ Ġ* ĠWe Ġwant Ġto Ġparse Ġcomplex Ġtypes Ġlike Ġlike Ġ' tuple < int , ĠA | null >' Ġin Ġ@ param /@ return /@ var Ċ Ġ* Ġand Ġhandle Ġthem Ġon Ġtype Ġinf erring Ċ Ġ* Ġ( e . g ., Ġget ()[ 1 ]-> Ġis Ġinstance Ġof ĠA , Ġshould Ġsuggest Ġits Ġmethods , Ġfind Ġusage s Ġshould Ġwork ). Ċ Ġ* Ċ Ġ* ĠThe Ġconcept Ġof Ġreal ization Ġis : Ċ Ġ* Ġ 1 ) Ċ Ġ* Ġparsing Ġof Ġ@ return Ġetc Ġis Ġoverridden : Ġ[ com . vk . k php storm . K php Storm Parser Definition ] Ċ Ġ* Ġpsi Ġtree Ġof Ġa Ġtype Ġwill Ġbe Ġa Ġtree Ġof Ġcustom Ġpsi Ġelements Ġ[ com . vk . k php storm . ex ph ptype . psi ] Ċ Ġ* Ġe . g ., Ġ' tuple < int , ĠA | null >' Ġis Ġ( Ġtuple Ġ( Ġprimitive ( int ), Ġpipe Ġ( Ġprimitive ( A ), Ġprimitive ( null ) Ġ) Ġ) Ċ Ġ* Ġ@ see Ġcom . vk . k php storm . ex ph ptype . psi . Ex Php Type Tuple Psi Impl Ġand Ġothers Ġin Ġthat Ġpackage Ċ Ġ* Ġ 2 ) Ċ Ġ* Ġeach Ġpsi Ġelement Ġimplements Ġ[ com . jetbrains . php . lang . documentation . php doc . psi . Php Doc Type ] Ċ Ġ* ĠgetType () Ġmethod Ġis Ġoverridden , Ġit Ġreturns Ġ[ Php Type ] Ġas Ġstrings Ċ Ġ* Ġthus , ĠgetType () Ġis Ġcalled Ġn atively Ġof Ġthe Ġupper - most Ġpsi Ġchild Ġinside Ġ@ return Ġetc Ċ Ġ* Ġand Ġsaved Ġinto Ġstub s Ġ/ Ġused Ġin Ġnative Ġtype Ġinf erring Ċ Ġ* Ġe . g ., Ġ' tuple < int , ĠA | null >' Ġin ĠPhp Type Ġwill Ġbe Ġ[" tuple ( int , A / null ) "] Ċ Ġ* Ġ@ see Ġcom . vk . k php storm . ex ph ptype . psi . Ex Php Type Tuple Psi Impl . getType Ġand Ġothers ĠgetType () Ċ Ġ* Ġ 3 ) Ċ Ġ* Ġcustom Ġtype Ġproviders Ċ Ġ* Ġfor Ġexample , Ġget ()[ 1 ]-> ... ĠâĢĶ Ġret re ive Ġtype Ġof Ġget (); Ġret re iving Ġsees Ġ'@ return Ġ... ', Ċ Ġ* Ġcalls ĠgetType () Ġfrom Ġ'@ return ' Ġ[ com . jetbrains . php . lang . documentation . php doc . psi . impl . tags . Php Doc Tag Impl . getType ], Ċ Ġ* Ġwhich Ġcalls Ġour Ġcustom Ġpsi ĠgetType () Ġor Ġtakes Ġfrom Ġstub s Ġ( then Ġit Ġwas Ġpreviously Ġsaved Ġthere ) Ċ Ġ* Ġe . g ., Ġfor Ġget () Ġwe Ġhave Ġ[" tuple ( int , A / null ) "] Ġ( or Ġincomplete ) ĠâĢĶ Ġremember Ġit Ġand Ġremember Ġ' 1 ' Ċ Ġ* Ġ@ see ĠTuple Shape Type Provider Ċ Ġ* Ġ 4 ) Ċ Ġ* Ġwe Ġknow Ġthe Ġtype Ġof Ġget () ĠâĢĶ Ġin Ġcustom Ġstring Ġformat , Ġsaved Ġinto ĠPhp Type Ċ Ġ* Ġthis Ġstring Ġformat Ġcan Ġbe Ġparsed Ġby Ġ[ Php Type To Ex Php Type Parsing . parse ] Ċ Ġ* Ġe . g ., Ġfor Ġget () Ġwe Ġhave Ġ[ Ex Php Type Tuple ] Ġ([ Ex Php Type Primitive ] Ġint , Ġ[ Ex Php Type Pipe ] ĠA | null ) Ċ Ġ* Ġknowing Ġ' 1 ', Ġwe Ġcall Ġ[ Ex Php Type . getSub key ByIndex ] Ġ(' 1 ') Ċ Ġ* Ġe . g ., Ġfor Ġget ()[ 1 ] Ġwe Ġget Ġ[ Ex Php Type Pipe ]: ĠA | null Ċ Ġ* Ġ@ see ĠTuple Shape Type Provider . complete Ċ Ġ* ĠFinally , Ġcalling Ġ[ to Php Type ] Ġwe Ġinfer Ġtype Ġof Ġ' get ()[ 1 ]' Ġpsi Ġnode Ġas ĠPhp Type Ġ[" \ A ", Ġ" null "]. Ċ Ġ* ĠSuggest ions Ġof Ġprops / methods Ġof Ġclass ĠA Ġand Ġfind Ġusage s Ġwork . Ċ Ġ* Ċ Ġ* ĠUn like Ġ[ com . vk . k php storm . k ph pt ags . psi . K php Doc Element Types ], Ċ Ġ* Ġno Ġneed Ġto Ġuse Ġ< stub ElementType Holder >, Ġas Ġcustom Ġpsi Ġelement Types Ġare Ġnot Ġstub bed . Ċ Ġ*/ Ċ interface ĠEx Php Type Ġ{ ĊĠĠĠ Ġfun Ġto Php Type (): ĠPhp Type ĊĠĠĠ Ġfun Ġto Human Readable ( expr : ĠPhp Psi Element ): ĠString ĊĠĠĠ Ġfun Ġget Sub key ByIndex ( index Key : ĠString ): ĠEx Php Type ? ĊĠĠĠ Ġfun Ġinstantiate Template ( name Map : ĠMap < String , ĠEx Php Type >): ĠEx Php Type ĊĠĠĠ Ġfun Ġis AssignableFrom ( rhs : ĠEx Php Type , Ġproject : ĠProject ): ĠBoolean ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠINT Ġ= ĠEx Php Type Primitive ( K php Primitive Types . INT ) ĊĠĠĠĠĠĠĠ Ġval ĠFLOAT Ġ= ĠEx Php Type Primitive ( K php Primitive Types . FLOAT ) ĊĠĠĠĠĠĠĠ Ġval ĠSTRING Ġ= ĠEx Php Type Primitive ( K php Primitive Types . STRING ) ĊĠĠĠĠĠĠĠ Ġval ĠBOOL Ġ= ĠEx Php Type Primitive ( K php Primitive Types . BOOL ) ĊĠĠĠĠĠĠĠ Ġval ĠFALSE Ġ= ĠEx Php Type Primitive ( K php Primitive Types . FALSE ) ĊĠĠĠĠĠĠĠ Ġval ĠNULL Ġ= ĠEx Php Type Primitive ( K php Primitive Types . NULL ) ĊĠĠĠĠĠĠĠ Ġval ĠOBJECT Ġ= ĠEx Php Type Primitive ( K php Primitive Types . OBJECT ) ĊĠĠĠĠĠĠĠ Ġval ĠCALL ABLE Ġ= ĠEx Php Type Primitive ( K php Primitive Types . CALL ABLE ) ĊĠĠĠĠĠĠĠ Ġval ĠVOID Ġ= ĠEx Php Type Primitive ( K php Primitive Types . VOID ) ĊĠĠĠĠĠĠĠ Ġval ĠK MIX ED Ġ= ĠEx Php Type Primitive ( K php Primitive Types . K MIX ED ) ĊĊĠĠĠĠĠĠĠ Ġval ĠANY Ġ= ĠEx Php Type Any () ĊĠĠĠĠĠĠĠ Ġval ĠARRAY _ OF _ ANY Ġ= ĠEx Php Type Array ( ANY ) ĊĠĠĠ Ġ} Ċ } ĊĊ