package Ġjet brains . build Server . bazel . fetch ers Ċ Ċ import Ġjet brains . build Server . bazel . B azel Constants Ċ import Ġjet brains . build Server . server Side . Data Item Ċ import Ġjet brains . build Server . server Side . Project Data Fetcher Ċ import Ġjet brains . build Server . util . browser . Browser Ċ import Ġjet brains . build Server . util . browser . Element Ċ import Ġkotlin . coroutines . experimental . build Sequence Ċ Ċ /** Ċ Ġ* ĠProvides Ġthe Ġlist Ġof Ġtargets Ġin Ġdirectory . Ċ Ġ*/ Ċ class ĠB azel Target Fetcher Ġ: ĠProject Data Fetcher Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġanalysis Depth Ġ= Ġ 3 ĊĊĠĠĠ Ġoverride Ġfun ĠgetType () Ġ= Ġ" B azel Targets " ĊĊĠĠĠ Ġoverride Ġfun Ġretrieve Data ( fs Browser : ĠBrowser , Ġworking Dir : ĠString ): ĠMutable List < Data Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġ( if Ġ( working Dir . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfs Browser . root ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfs Browser . getElement ( working Dir ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( directory Ġ== Ġnull Ġ|| Ġdirectory . is Leaf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprocess Directory ( directory , Ġnormalize Path ( working Dir )). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Item ( it , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ}. to Mutable List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Directory ( directory : ĠElement , Ġworking Dir : ĠString ): ĠSequence < String > Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Path Ġ= Ġnormalize Path ( directory . fullName . substring ( working Dir . length )) ĊĠĠĠĠĠĠĠ Ġif Ġ( target Path . split ('/ '). size Ġ> Ġanalysis Depth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ sequence ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdirectory . children ?. forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( B azel Constants . BUILD _ FILE _ NAME . matches ( element . name ) Ġ&& Ġelement . is Content Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( B azel File Parser . read Targets ( element . inputStream ). map Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": $ target " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" //$ target Path :$ target " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! element . is Leaf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( process Directory ( element , Ġworking Dir )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnormalize Path ( path : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpath . trim (). replace ('\\ ', Ġ'/ '). trim Start ('/') ĊĠĠĠ Ġ} Ċ }