package Ġcom . aut onomous apps . graph Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġused Ġto Ġgenerate Ġsub graphs Ġfrom Ġa Ġlarger Ġgraph , Ġ[ graph ], Ġwhich Ġare Ġreachable Ġfrom Ċ Ġ* Ġthe Ġgiven Ġsource Ġnode . Ċ Ġ*/ Ċ internal Ġclass ĠDepth First Search ( private Ġval Ġgraph : ĠDependency Graph , Ġprivate Ġval Ġsource : ĠNode ) Ġ{ ĊĊĠ Ġconstructor ( graph : ĠDependency Graph , Ġsource : ĠString ) Ġ: Ġthis ( graph , ĠB are Node ( source )) ĊĊĠ Ġprivate Ġval Ġmarked Ġ= Ġlinked Map Of < String , ĠBoolean >() ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġdfs ( source ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdfs ( source : ĠNode ) Ġ{ ĊĠĠĠ Ġmarked [ source . identifier ] Ġ= Ġtrue ĊĠĠĠ Ġgraph . adj ( source ). forEach Ġ{ Ġ(_, Ġto ) Ġ-> ĊĠĠĠĠĠ Ġif Ġ(! is Marked ( to )) Ġ{ ĊĠĠĠĠĠĠĠ Ġdfs ( to ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġsub graph : ĠDependency Graph Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġsub Ġ= ĠDependency Graph () ĊĠĠĠ Ġgraph . edges (). forEach Ġ{ ĊĠĠĠĠĠ Ġ// Ġif Ġboth Ġnodes Ġon Ġthe Ġedge Ġare Ġmarked , Ġadd Ġthis Ġedge Ġto Ġthe Ġsub graph ĊĠĠĠĠĠ Ġif Ġ( is Marked ( it . from ) Ġ&& Ġis Marked ( it . to )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsub . add Edge ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġsub . add Node ( source ) ĊĠĠĠ Ġsub ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis Marked ( node : ĠNode ): ĠBoolean Ġ= Ġis Marked ( node . identifier ) ĊĠ Ġprivate Ġfun Ġis Marked ( identifier : ĠString ): ĠBoolean Ġ= Ġmarked . get OrDefault ( identifier , Ġfalse ) Ċ }