package Ġcom . just ai . ja ic f . plugin . utils Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . just ai . ja ic f . plugin . utils . State Path Expression . Joined Ċ import Ġcom . just ai . ja ic f . plugin . utils . State Path Expression . Separ ated Ċ import Ġorg . jetbrains . kotlin . idea . debugger . sequence . psi . receiver Value Ċ import Ġorg . jetbrains . kotlin . psi . Kt Annotated Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Binary Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Callable Declaration Ċ import Ġorg . jetbrains . kotlin . psi . Kt Dot Qualified Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Name Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Operation Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Value Argument Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getChild OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Inside Of Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . isNull Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . re ceiv ers . Expression Receiver Ċ Ċ val ĠK t Call Expression . inner Path Expressions : ĠList < State Path Expression > ĊĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( Version Service . getInstance ( project ). is Supported Ja ic f Include ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpressions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargument Expressions OrDefault Values By Annotation ( PATH _ ARGUMENT _ AN NOT ATION _ NAME ). to Mutable List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Receiver Annotated By ( PATH _ ARGUMENT _ AN NOT ATION _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . receiver Value () Ġas ? ĠExpression Receiver )?. expression ?. let Ġ{ Ġexpressions Ġ+= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpressions Ġ+= Ġget Annotated Expressions In Declaration ( PATH _ ARGUMENT _ AN NOT ATION _ NAME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpressions . filter Not Ġ{ Ġit . isNull () Ġ}. map Ġ{ ĠState Path Expression . create ( this , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ val ĠK t Binary Expression . inner Path Expressions : ĠList < State Path Expression > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Version Service . getInstance ( project ). is Supported Ja ic f Include ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġoperation Reference . resolve To Source Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpressions Ġ= Ġmutable ListOf < Kt Expression >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . has Receiver Annotated By ( PATH _ ARGUMENT _ AN NOT ATION _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft ?. let Ġ{ Ġexpressions Ġ+= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . value Parameters [ 0 ]. annotation Names . contains ( PATH _ ARGUMENT _ AN NOT ATION _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright ?. let Ġ{ Ġexpressions Ġ+= Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpressions . map Ġ{ ĠState Path Expression . create ( this , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ private Ġfun ĠK t Call Expression . has Receiver Annotated By ( annotation Name : ĠString ) Ġ= ĊĠĠĠ Ġdeclaration ?. has Receiver Annotated By ( annotation Name ) Ġ?: Ġfalse Ċ Ċ private Ġfun ĠK t Callable Declaration . has Receiver Annotated By ( annotation Name : ĠString ) Ġ= ĊĠĠĠ Ġreceiver Type Reference ?. annotation Entries ĊĠĠĠĠĠĠĠ Ġ? . any Ġ{ Ġit . short Name ?. identifier Ġ== Ġannotation Name Ġ} Ġ== Ġtrue ĊĊ Ċ /** Ċ Ġ* Ġ@ returns Ġ[ Kt Expression ] Ġif Ġthis ĠPsi Element Ġcontains Ġpath Ġexpression Ġ( reactions . go , Ġre actions . buttons ( var arg Ġbuttons To State ), Ġetc ) Ċ Ġ* Ġ Ġor Ġnull Ġif Ġno Ġpath Ġexpression Ġfound . Ċ Ġ* Ġ*/ Ċ val ĠPsi Element . bounded Path Expression : ĠState Path Expression ? ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounded Element Ġ= Ġget First Bounded Element ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Dot Qualified Expression :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Binary Expression :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK t Value Argument :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( bounded Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Dot Qualified Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Expression Ġ= Ġbounded Element . getChild OfType < Kt Call Expression >() Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! call Expression . has Receiver Annotated By ( PATH _ ARGUMENT _ AN NOT ATION _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( call Expression . receiver Value () Ġas ? ĠExpression Receiver )?. expression ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Path Expression . create ( bounded Element , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Binary Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbounded Element . inner Path Expressions . first OrNull Ġ{ Ġthis . is Inside Of ( listOf ( it . declaration )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġbounded Element . bounded Path Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Value Argument Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bounded Element . parameter ()?. annotation Names ?. contains ( PATH _ ARGUMENT _ AN NOT ATION _ NAME ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbound Ġ= Ġbounded Element . bounded Call Expression OrNull Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargument Expression Ġ= Ġbounded Element . get Argument Expression () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠState Path Expression . create ( bound , Ġargument Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ val ĠPsi Element . path Expressions Of Bounded Block : ĠList < State Path Expression > ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounded Element Ġ= Ġget First Bounded Element ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Types Ġ= ĠlistOf ( Kt Binary Expression :: class . java , ĠK t Call Expression :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallowed Types Ġ= ĠlistOf ( Kt Name Reference Expression :: class . java , ĠK t Operation Reference Expression :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( bounded Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Binary Expression Ġ-> Ġbounded Element . inner Path Expressions ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Call Expression Ġ-> Ġbounded Element . inner Path Expressions ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ sealed Ġclass ĠState Path Expression ( val Ġuse Point : ĠK t Expression , Ġval Ġdeclaration : ĠK t Expression ) Ġ{ ĊĊĠĠĠ Ġclass ĠJo ined ( use Point : ĠK t Expression , Ġdeclaration : ĠK t Expression ) Ġ: ĊĠĠĠĠĠĠĠ ĠState Path Expression ( use Point , Ġdeclaration ) ĊĊĠĠĠ Ġclass ĠSepar ated ( use Point : ĠK t Expression , Ġdeclaration : ĠK t Expression ) Ġ: ĊĠĠĠĠĠĠĠ ĠState Path Expression ( use Point , Ġdeclaration ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( use Point : ĠK t Expression , Ġdeclaration : ĠK t Expression ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration . is Inside Of ( listOf ( use Point )) Ġ-> ĠJo ined ( use Point , Ġdeclaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSepar ated ( use Point , Ġdeclaration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠState Path Expression . holder Expression : ĠK t Expression ĊĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠJo ined Ġ-> Ġdeclaration ĊĠĠĠĠĠĠĠ Ġis ĠSepar ated Ġ-> Ġ( use Point Ġas ? ĠK t Call Expression )?. name Reference Expression () Ġ?: Ġuse Point ĊĠĠĠ Ġ} Ċ Ċ private Ġfun ĠK t Call Expression . get Annotated Expressions In Declaration ( name : ĠString ): ĠList < Kt Expression > Ġ{ ĊĠĠĠ Ġval Ġbody Expression Ġ= Ġthis . declaration ?. body Expression Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠ Ġval Ġannotated Expressions Ġ= Ġbody Expression . find Children OfType < Kt Annotated Expression >(). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . annotation Entries . any Ġ{ Ġentry Ġ-> Ġentry . short Name ?. asString () Ġ== Ġname Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġannotated Expressions . map NotNull Ġ{ Ġit . base Expression Ġ} Ċ } Ċ