/* Ċ Ġ* ĠCopyright ĠCare em , Ġan ĠU ber ĠTechnologies ĠInc . Ġcompany Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . care em . mock ing bird Ċ Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Dependency Ċ import Ġorg . gradle . api . logging . Logger Ċ import Ġorg . gradle . api . logging . Logging Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Multi platform Extension Ċ Ċ /** Ċ Ġ* ĠProject Ġexplorer , Ġthis Ġclass Ġwill Ġperform Ġall Ġthe Ġexploration Ġlogic Ġto Ġdetermine Ġthe Ġproject Ġstructure Ġand Ġits Ġdependencies Ċ Ġ* ĠNOTE : Ġfor Ġproject Ġhere Ġwe Ġmean Ġthe Ġtarget Ġproject Ġof Ġthe Ġplugin Ġnot Ġthe Ġroot Ġone , Ġwe Ġrefer Ġto Ġthe Ġroot Ġone Ġwith Ġthe Ġname Ġroot Project Ċ Ġ*/ Ċ class ĠProject Explorer Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġsource Set Resolver : ĠSource Set Resolver Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmodule Map : ĠMutable Map < String , ĠProject > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġval Ġis Explo red : ĠHashSet < String > Ġ= Ġhash Set Of () ĊĠĠĠ Ġprivate Ġval Ġdependency Set Ġ= Ġmutable Set Of < Dependency >() ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLogging . getLogger ( this :: class . java ) ĊĊĠĠĠ Ġfun Ġvisit Root Project ( root Project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Project . traverse Project Tree () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexplore ( project : ĠProject ): ĠSet < Dependency > Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . traverse Dependency Tree ( dependency Set ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdependency Set ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . traverse Dependency Tree ( dependency Set : ĠMutable Set < Dependency >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Explo red . contains ( this . full Qualifier ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk mp Extension Ġ= Ġthis . extensions . findBy Type ( Kotlin Multi platform Extension :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k mp Extension Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Set Ġ= Ġsource Set Resolver . getSource Set From K mp Extension ( k mp Extension , Ġ" common Main ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Name Ġ= Ġsource Set . implementation Configuration Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġthis . configurations . get ByName ( configuration Name ). all Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency Set . addAll ( dependencies ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Map [ it . name ]?. traverse Dependency Tree ( dependency Set ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContainer Ġmodule Ġtraverse Ġall Ġsub projects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sub projects . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . traverse Dependency Tree ( dependency Set ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Explo red . add ( this . full Qualifier ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . traverse Project Tree () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . sub projects . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Map [ it . name ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . traverse Project Tree () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( udo : Ġorg . gradle . api . Unknown Domain Object Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Project Explorer . logger . warn ("${ it . name } Ġ-> ĠSKIP PED ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }