package Ġcom . intellij . workspace Ċ Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . workspace . api . Virtual File Url Ċ import Ġcom . intellij . workspace . api . Virtual File Url Manager Ċ import Ġkotlin . concurrent . get Or Set Ċ Ċ private Ġval Ġbracket Indent Ġ= ĠThread Local < Int >() Ċ Ċ internal Ġfun Ġ< R > ĠLogger . bracket ( message : ĠString , Ġblock : Ġ() Ġ-> ĠR ): ĠR Ġ{ ĊĠ Ġval Ġindent Level Ġ= Ġbracket Indent . get Or Set Ġ{ Ġ 0 Ġ} ĊĠ Ġval Ġindent Ġ= Ġ" Ġ Ġ". repeat ( indent Level ) ĊĊĠ Ġinfo (" START : Ġ$ indent $ message ") ĊĠ Ġbracket Indent . set ( indent Level Ġ+ Ġ 1 ) ĊĠ Ġtry Ġ{ ĊĠĠĠ Ġreturn Ġblock () ĊĠ Ġ} ĊĠ Ġfinally Ġ{ ĊĠĠĠ Ġbracket Indent . set ( indent Level ) ĊĠĠĠ Ġinfo (" END Ġ Ġ: Ġ$ indent $ message ") ĊĠ Ġ} Ċ } Ċ Ċ // ĠTODO ĠDrop ? ĠUse Ġstandard Ġfunction ? ĠReview Ġusage s . Ċ internal Ġfun Ġexecute Or Queue On Dispatch Thread ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠ Ġval Ġapplication Ġ= ĠApplication Manager . getApplication () ĊĠ Ġif Ġ( application . is Dispatch Thread ) Ġ{ ĊĠĠĠ Ġblock () ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġapplication . invoke Later ( block ) ĊĠ Ġ} Ċ } Ċ Ċ // ĠTODO ĠIn Ġthe Ġfuture Ġit Ġmay Ġbe Ġoptim ised Ġby Ġcaching Ġvirtual File Ġin Ġevery Ġtrie Ġnode Ċ val ĠVirtual File Url . virtual File ĊĠ Ġget () Ġ= ĠVirtual FileManager . getInstance (). find File By Url ( url ) Ċ Ċ // ĠTODO : Ġuse Ġsegment Ġnames Ġfrom Ġvirtual Files ? Ċ fun ĠVirtual File . to Virtual File Url ( virtual FileManager : ĠVirtual File Url Manager ) Ġ= Ġvirtual FileManager . from Url ( this . url ) Ċ