/* Ċ Ġ* ĠSource ++, Ġthe Ġopen - source Ġlive Ġcoding Ġplatform . Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 2 ĠCode B rig , ĠInc . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ċ Ġ* Ġby Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ package Ġs pp . jetbrains . marker . jvm Ċ Ċ import Ġcom . intellij . code Insight . daemon . G utter Icon Navigation Handler Ċ import Ġcom . intellij . code Insight . daemon . Line Marker Info Ċ import Ġcom . intellij . openapi . editor . markup . G utter Icon Renderer Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Identifier Ċ import Ġcom . intellij . psi . Psi Java File Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . Gro ovy File Ċ import Ġorg . jetbrains . u ast . U Class Ċ import Ġorg . jetbrains . u ast . U Method Ċ import Ġorg . jetbrains . u ast . to U Element Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġs pp . jetbrains . marker . Source Marker Ċ import Ġs pp . jetbrains . marker . Source Marker . creation Service Ċ import Ġs pp . jetbrains . marker . plugin . Source Line Marker Provider Ċ import Ġs pp . jetbrains . marker . source . JV MM ark er Utils Ċ import Ġs pp . jetbrains . marker . source . SourceFile Marker . Companion . SUPPORTED _ FILE _ TYPES Ċ import Ġs pp . jetbrains . marker . source . mark . api . Source Mark Ċ import Ġs pp . jetbrains . marker . source . mark . api . key . Source Key Ċ import Ġs pp . jetbrains . marker . source . mark . gutter . Class G utter Mark Ċ import Ġs pp . jetbrains . marker . source . mark . gutter . G utter Mark Ċ import Ġs pp . jetbrains . marker . source . mark . gutter . Method G utter Mark Ċ Ċ /** Ċ Ġ* Ġtodo : Ġdescription . Ċ Ġ* Ċ Ġ* Ġ@ since Ġ 0 . 4 . 0 Ċ Ġ* Ġ@ author Ġ[ Brand on ĠF erg erson ]( mailto : b fer g erson @ apache . org ) Ċ Ġ*/ Ċ abstract Ġclass ĠJ V ML ine Marker Provider Ġ: ĠSource Line Marker Provider () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( JV ML ine Marker Provider :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Line Marker Info ( ĊĠĠĠĠĠĠĠ Ġparent : ĠPsi Element ?, ĊĠĠĠĠĠĠĠ Ġelement : ĠPsi Element ĊĠĠĠ Ġ): ĠLine Marker Info < Psi Element >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġis ĠPsi Class Ġ&& Ġelement Ġ=== Ġparent . name Identifier Ġ-> ĠgetClass G utter Mark ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Ġ== ĠJ V MM ark er Utils . getName Identifier ( parent ) Ġ-> Ġget Method G utter Mark ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetClass G utter Mark ( element : ĠPsi Identifier ): ĠLine Marker Info < Psi Element >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Marker Ġ= ĠSource Marker . get SourceFile Marker ( element . containing File ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġartifact QualifiedName Ġ= ĠJ V MM ark er Utils . getFull y QualifiedName ( element . parent . to U Element () Ġas ĠU Class ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Source Marker . configuration . create Source Mark Filter . test ( artifact QualifiedName )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// check Ġby Ġartifact Ġname Ġfirst Ġdue Ġto Ġuser Ġcan Ġerr one ously Ġname Ġsame Ġclass Ġtwice ĊĠĠĠĠĠĠĠ Ġvar Ġg utter Mark Ġ= Ġfile Marker . getSource Mark ( artifact QualifiedName , ĠSource Mark . Type . G UT TER ) Ġas ĠClass G utter Mark ? ĊĠĠĠĠĠĠĠ Ġif Ġ( gutter Mark Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg utter Mark Ġ= ĠJ V MM ark er Utils . get OrCreate Class G utter Mark ( file Marker , Ġelement ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gutter Mark . isVisible ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġnavigation Handler : ĠG utter Icon Navigation Handler < Psi Element >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( gutter Mark . configuration . activate On Mouse Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Handler Ġ= ĠG utter Icon Navigation Handler Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . getUser Data ( Source Key . G utter Mark ) !!. display Popup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLine Marker Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget First Leaf ( element ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . text Range , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg utter Mark . configuration . icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG utter Icon Renderer . Alignment . CENTER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Method G utter Mark ( element : ĠPsi Element ): ĠLine Marker Info < Psi Element >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Marker Ġ= ĠSource Marker . get SourceFile Marker ( element . containing File ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġu Method Ġ= Ġelement . parent . to U Element () Ġas ĠU Method ? ĊĠĠĠĠĠĠĠ Ġif Ġ( u Method Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Unable Ġto Ġtransform Ġto ĠU Method : Ġ{}", Ġelement . parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġartifact QualifiedName Ġ= ĠJ V MM ark er Utils . getFull y QualifiedName ( u Method ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Source Marker . configuration . create Source Mark Filter . test ( artifact QualifiedName )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// check Ġby Ġartifact Ġname Ġfirst Ġdue Ġto Ġuser Ġcan Ġerr one ously Ġname Ġsame Ġmethod Ġtwice ĊĠĠĠĠĠĠĠ Ġvar Ġg utter Mark Ġ= Ġfile Marker . getSource Mark ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact QualifiedName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSource Mark . Type . G UT TER ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠMethod G utter Mark ? ĊĠĠĠĠĠĠĠ Ġif Ġ( gutter Mark Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg utter Mark Ġ= Ġcreation Service . get OrCreate Method G utter Mark ( file Marker , Ġelement ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! gutter Mark . isVisible ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġnavigation Handler : ĠG utter Icon Navigation Handler < Psi Element >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( gutter Mark . configuration . activate On Mouse Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Handler Ġ= ĠG utter Icon Navigation Handler Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . getUser Data ( Source Key . G utter Mark ) !!. display Popup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLine Marker Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget First Leaf ( element ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . text Range , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg utter Mark . configuration . icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG utter Icon Renderer . Alignment . CENTER ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssoci ates ĠGro ovy Ġ[ G utter Mark ] s Ġto ĠP SI Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ since Ġ 0 . 1 . 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠGro ovy Descriptor Ġ: ĠJ V ML ine Marker Provider () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSUPPORT ED _ FILE _ TYPES . add ( Gro ovy File :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Gro ovy Ġsource Ġline Ġmarkers " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssoci ates ĠJava Ġ[ G utter Mark ] s Ġto ĠP SI Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ since Ġ 0 . 1 . 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠJava Descriptor Ġ: ĠJ V ML ine Marker Provider () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSUPPORT ED _ FILE _ TYPES . add ( Psi Java File :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Java Ġsource Ġline Ġmarkers " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssoci ates ĠKotlin Ġ[ G utter Mark ] s Ġto ĠP SI Ġelements . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ since Ġ 0 . 1 . 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠKotlin Descriptor Ġ: ĠJ V ML ine Marker Provider () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSUPPORT ED _ FILE _ TYPES . add ( Kt File :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetName (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Kotlin Ġsource Ġline Ġmarkers " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ