// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . diagnostic . h prof . analysis Ċ Ċ import Ġcom . intellij . ide . plugins . cl . Plugin ClassLoader Ċ import Ġcom . intellij . openapi . extensions . Plugin Id Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ Ċ class ĠAn alyze Class loader References Graph ( analysis Context : ĠAnalysis Context , Ġval Ġplugin Id : ĠString ) Ġ: ĠAn alyze Graph ( analysis Context ) Ġ{ ĊĠ Ġoverride Ġfun Ġanalyze ( progress : ĠProgress Indicator ): ĠString Ġ{ ĊĠĠĠ Ġtraverse Instance Graph ( progress ) ĊĊĠĠĠ Ġval Ġnavigator Ġ= Ġanalysis Context . navigator ĊĠĠĠ Ġfor Ġ( l Ġin Ġ 1 .. navigator . instance Count ) Ġ{ ĊĠĠĠĠĠ Ġval Ġclass Definition Ġ= Ġnavigator . getClass For ObjectId ( l ) ĊĠĠĠĠĠ Ġif Ġ( class Definition . name Ġ== ĠPlugin ClassLoader :: class . java . name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigator . goTo ( l ) ĊĠĠĠĠĠĠĠ Ġnavigator . goTo Instance Field ( Plugin ClassLoader :: class . java . name , Ġ" plugin Id ") ĊĠĠĠĠĠĠĠ Ġnavigator . goTo Instance Field ( Plugin Id :: class . java . name , Ġ" id String ") ĊĠĠĠĠĠĠĠ Ġif Ġ( navigator . getString Instance FieldValue () Ġ== Ġplugin Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġanalysis Context . parent List [ l . toInt ()] ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( objectId Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġgc Root Paths Tree Ġ= ĠG CR oot Paths Tree ( analysis Context , ĠAnalysis Config . Tree Display Options . all ( show Field Names Ġ= Ġtrue , Ġshow Size Ġ= Ġfalse ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġgc Root Paths Tree . register Object ( l . toInt ()) ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġgc Root Paths Tree . print Tree () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ"" ĊĠ Ġ} Ċ } Ċ