/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . ide . annot ator Ċ Ċ import Ġcom . intellij . code Highlighting . Pass Ċ import Ġcom . intellij . code Insight . daemon . Line Marker Info Ċ import Ġcom . intellij . code Insight . daemon . Line Marker Provider Ċ import Ġcom . intellij . openapi . editor . markup . G utter Icon Renderer Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . util . Function Util Ċ import Ġorg . rust . ide . icons . Rs Icons Ċ import Ġorg . rust . lang . core . psi .* Ċ import Ġorg . rust . lang . core . psi . ext . parent OfType Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠLine Ġmarker Ġprovider Ġthat Ġannot ates Ġrecursive Ġfunc iton Ġand Ġmethod Ġcalls Ġwith Ċ Ġ* Ġan Ġicon Ġon Ġthe Ġg utter . Ċ Ġ*/ Ċ class ĠRs Recursive Call Line Marker Provider Ġ: ĠLine Marker Provider Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Line Marker Info ( element : ĠPsi Element ) Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġcollect Slow Line Markers ( elements : ĠList < Psi Element >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult : ĠMutable Collection < Line Marker Info < Psi Element >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlines Ġ= ĠHashSet < Int >() Ġ Ġ// ĠTo Ġprevent Ġseveral Ġmarkers Ġon Ġone Ġline ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( el Ġin Ġelements . filter Ġ{ Ġit . is Recursive Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠPsi Document Manager . getInstance ( el . project ). getDocument ( el . containing File ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdoc . get LineNumber ( el . text Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Number Ġ! in Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( line Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Line Marker Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel . text Range , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRs Icons . REC UR SIVE _ CALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPass . LINE _ MARK ERS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Util . constant (" Recursive Ġcall "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG utter Icon Renderer . Alignment . RIGHT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠRs Call Expr . path Expr : ĠRs Path Expr ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġexpr Ġas ? ĠRs Path Expr ĊĊĠĠĠ Ġprivate Ġval ĠPsi Element . is Recursive : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdef Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Call Expr Ġ-> Ġpath Expr ?. path ?. reference ?. resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs MethodCall Ġ-> Ġreference . resolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparent OfType < Rs Function >() Ġ== Ġdef ĊĠĠĠ Ġ} Ċ } Ċ