package Ġcom . github . kor ni lo va 2 0 3 . matlab Ċ Ċ import Ġcom . github . kor ni lo va 2 0 3 . matlab . psi .* Ċ import Ġcom . github . kor ni lo va 2 0 3 . matlab . psi . types . Mat lab Type Class Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Resolve State Ċ import Ġcom . intellij . psi . scope . Psi Scope Processor Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ Ċ fun ĠPsi Element . forEach Sibling Back wards ( processor : Ġ( Psi Element ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġel : ĠPsi Element ? Ġ= Ġthis . prev Sibling ĊĠĠĠ Ġwhile Ġ( el Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! processor ( el )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġel Ġ= Ġel . prev Sibling ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ fun ĠPsi Element . forEach Sibling Forward ( processor : Ġ( Psi Element ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġel : ĠPsi Element ? Ġ= Ġthis . next Sibling ĊĠĠĠ Ġwhile Ġ( el Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! processor ( el )) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġel Ġ= Ġel . next Sibling ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ fun ĠPsi Element . in Current Function ( parent : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġel : ĠPsi Element Ġ= Ġthis ĊĠĠĠ Ġwhile Ġ( el Ġ!= Ġparent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( el Ġis ĠMat lab Function Declaration ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġel Ġ= Ġel . parent ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ fun ĠPsi Element . find Declaration ( processor : ĠPsi Scope Processor , Ġstate : ĠResolve State , Ġin Current Scope : ĠBoolean , Ġdeclaration Is Before Usage : ĠBoolean Ġ= Ġtrue ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠMat lab Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( in Current Scope Ġ|| Ġthis . visible Outside Function ) Ġ&& Ġ( declaration Is Before Usage Ġ|| Ġthis . visible Before Declaration )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprocessor . execute ( this , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ } Ċ Ċ fun Ġprocess Declarations ( parent : ĠPsi Element , Ġprocessor : ĠPsi Scope Processor , Ġstate : ĠResolve State , Ġlast Parent : ĠPsi Element ?, Ġplace : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġin Current Scope Ġ= Ġplace . in Current Function ( parent ) ĊĊĠĠĠ Ġif Ġ( last Parent Ġ!= Ġnull Ġ&& Ġlast Parent Ġ! is ĠMat lab Assign Expr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! last Parent . find Declaration ( processor , Ġstate , Ġin Current Scope )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġres Ġ= Ġlast Parent ?. forEach Sibling Back wards Ġ{ Ġit . find Declaration ( processor , Ġstate , Ġin Current Scope ) Ġ} ĊĠĠĠ Ġif Ġ( res Ġ== Ġfalse ) Ġreturn Ġfalse ĊĊĠĠĠ Ġreturn Ġlast Parent ?. forEach Sibling Forward Ġ{ Ġit . find Declaration ( processor , Ġstate , Ġin Current Scope , Ġfalse ) Ġ} Ġ?: Ġtrue Ċ } Ċ Ċ fun Ġprocess Declarations In Class ( processor : ĠPsi Scope Processor , Ġstate : ĠResolve State , Ġtype : ĠMat lab Type Class ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġclass Declaration Ġ= Ġtype . decl ĊĠĠĠ Ġval Ġdeclarations Ġ= ĠPsi Tree Util . find Children Of Any Type ( class Declaration , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMat lab Property :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMat lab Function Declaration :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMat lab Enum Item :: class . java ) ĊĊĠĠĠ Ġfor Ġ( declaration Ġin Ġdeclarations ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! processor . execute ( declaration , Ġstate )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ }