/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 - 2 0 2 2 ĠR ick ĠBus ar ow Ċ Ġ* Ġ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 Ġmodule check . core . rule Ċ Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġmodule check . api . finding . Finding Ċ import Ġmodule check . api . finding . Finding Factory Ċ import Ġmodule check . api . rule . Module Check Rule Ċ import Ġmodule check . api . rule . Report Only Rule Ċ import Ġmodule check . api . rule . Sort Rule Ċ import Ġmodule check . project . Mc Project Ċ Ċ class ĠSingle Rule Finding Factory < T Ġ: ĠFind ing >( ĊĠ Ġval Ġrule : ĠModule Check Rule < T > Ċ ) Ġ: ĠFind ing Factory < Finding > Ġ{ ĊĊĠ Ġoverride Ġsuspend Ġfun Ġevaluate Fix able ( projects : ĠList < Mc Project >): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( rule Ġ! is ĠSort Rule Ġ&& Ġrule Ġ! is ĠReport Only Rule ) Ġ{ ĊĠĠĠĠĠ Ġevaluate Rule ( projects ) ĊĠĠĠ Ġ} Ġelse Ġempty List () ĊĠ Ġ} ĊĊĠ Ġoverride Ġsuspend Ġfun Ġevaluate Sort s ( projects : ĠList < Mc Project >): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( rule Ġis ĠSort Rule ) Ġ{ ĊĠĠĠĠĠ Ġevaluate Rule ( projects ) ĊĠĠĠ Ġ} Ġelse Ġempty List () ĊĠ Ġ} ĊĊĠ Ġoverride Ġsuspend Ġfun Ġevaluate Reports ( projects : ĠList < Mc Project >): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( rule Ġis ĠReport Only Rule ) Ġ{ ĊĠĠĠĠĠ Ġevaluate Rule ( projects ) ĊĠĠĠ Ġ} Ġelse Ġempty List () ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġevaluate Rule ( projects : ĠList < Mc Project >): ĠList < T > Ġ{ ĊĠĠĠ Ġreturn Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠ Ġprojects ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġproject Ġ-> Ġasync Ġ{ Ġrule . check ( project ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. await All () ĊĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ