package Ġorg . intellij . plugin . tracker . services Ċ Ċ import Ġcom . intellij . ext api . psi . AST Wrapper Psi Element Ċ import Ġcom . intellij . openapi . components . Service Manager Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . source . tree . Leaf Psi Element Ċ import Ġcom . intellij . psi . search . FileType Index Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġorg . intellij . markdown . fl av ours . g fm . GF M Token Types . GF M _ AUT OL INK Ċ import Ġorg . intellij . plugin . tracker . data . links . Link Info Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown ElementType Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown Element Types .* Ċ import Ġorg . intellij . plugins . markdown . lang . Markdown FileType Ċ import Ġorg . intellij . plugins . markdown . lang . psi . impl . Markdown File Ċ import Ġorg . intellij . plugins . markdown . lang . psi . impl . Markdown Link Destination Impl Ċ Ċ class ĠLink Retriever Service ( private Ġval Ġproject : ĠProject ?) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFunction Ġto Ġget Ġthe Ġlist Ġof Ġlinks Ġfrom ĠMD Ġfiles . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Links In Project Scope (): ĠList < Link Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink InfoList : ĠMutable List < Link Info > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġvirtual Files Ġ= ĠFile Type Index . get Files ( Markdown FileType . INSTANCE , ĠGlobal Search Scope . project Scope ( project !! )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( virtual File Ġin Ġvirtual Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi File : ĠMarkdown File Ġ= ĠPsi Manager . getInstance ( project ). find File ( virtual File !! ) Ġas ĠMarkdown File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink InfoList . addAll ( get Links In File Scope ( psi File )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlink InfoList ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclassify Link Element And Extract Info ( element : ĠPsi Element , Ġdocument : ĠDocument , Ġfile : ĠPsi File ): ĠLink Info ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Element G fm Auto Link ( element ) Ġ-> ĠLink Info . construct Link Info G fm Auto Link ( element , Ġdocument , Ġfile , Ġproject !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Element Markdown Link Destination ( element ) Ġ-> ĠLink Info . construct Link Info Markdown Link Destination ( element , Ġdocument , Ġfile , Ġproject !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Element Auto Link ( element ) Ġ-> ĠLink Info . construct Link Info Auto Link ( element , Ġdocument , Ġfile , Ġproject !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Link Info From Link Element ( file : ĠPsi File , Ġelement : ĠPsi Element ): ĠLink Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project !! ). getDocument ( file ) !! ĊĠĠĠĠĠĠĠ Ġreturn Ġclassify Link Element And Extract Info ( element , Ġdocument , Ġfile ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Links In File Scope ( file : ĠPsi File ): ĠList < Link Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink InfoList : ĠMutable List < Link Info > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project !! ). getDocument ( file ) !! ĊĠĠĠĠĠĠĠ Ġfile . accept ( object Ġ: ĠPsi Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Info Ġ= Ġclassify Link Element And Extract Info ( element , Ġdocument , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Info Ġ!= Ġnull ) Ġlink InfoList . add ( link Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġsuper . visit Element ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġlink InfoList ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġby ĠIDEA Ġto Ġget Ġa Ġreference Ġto Ġthe Ġsingle Ġinstance Ġof Ġthis Ġclass . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( project : ĠProject ): ĠLink Retriever Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠService Manager . getService ( project , ĠLink Retriever Service :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Element Markdown Link Destination ( element : ĠPsi Element ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . java Class Ġ== ĠMarkdown Link Destination Impl :: class . java Ġ&& Ġelement . node . elementType Ġ=== ĠLINK _ DEST INATION ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Element G fm Auto Link ( element : ĠPsi Element ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . java Class Ġ== ĠLeaf Psi Element :: class . java Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( element . node . elementType Ġ=== ĠMarkdown ElementType . platform Type ( GF M _ AUT OL INK ) Ġ&& Ġelement . parent . node . elementType Ġ!== ĠLINK _ DEST INATION ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Element Auto Link ( element : ĠPsi Element ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . java Class Ġ== ĠAST Wrapper Psi Element :: class . java Ġ&& Ġelement . node . elementType Ġ=== ĠA UT OL INK ĊĠĠĠ Ġ} Ċ } Ċ