package Ġcom . av ito . module . internal . dependencies Ċ Ċ import Ġcom . av ito . module . configurations . Configuration Type Ċ import Ġcom . av ito . module . internal . dependencies . Find Android App Task Action . Ver dict . Multiple Suit able Apps Ċ import Ġcom . av ito . module . internal . dependencies . Find Android App Task Action . Ver dict . No Suit able Apps Ċ import Ġcom . av ito . module . internal . dependencies . Find Android App Task Action . Ver dict . One Suit able App Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . util . Path Ċ Ċ internal Ġclass ĠFind Android App Task Action ( ĊĠĠĠ Ġprivate Ġval Ġgraph Builder : ĠAndroid Apps Graph Builder Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġfind App For ( modules : ĠSet < Path >, Ġconfigurations : ĠSet < Configuration Type >): ĠVer dict Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapps Ġ= Ġconfigurations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraph Builder . build Dependencies Graph ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġroot Node Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject With Deps ( root Node . project , Ġroot Node . all Dependencies ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . project Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġit . value . flatMap Ġ{ Ġit . dependencies Ġ}. toSet () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( project , Ġdeps ) Ġ-> ĠProject With Deps ( project , Ġdeps ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠĠĠ Ġval Ġsuitable Apps Ġ= Ġapps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ(_, Ġdependency Projects ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency Projects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPath . path ( it . path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( modules ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuitable Apps . isEmpty () Ġ-> Ġno Suit able Apps ( modules , Ġapps ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuitable Apps . size Ġ== Ġ 1 Ġ-> ĠOne Suit able App ( suit able Apps . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMultiple Suit able Apps ( suit able Apps . toSet ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġno Suit able Apps ( ĊĠĠĠĠĠĠĠ Ġmodules : ĠSet < Path >, ĊĠĠĠĠĠĠĠ Ġprojects : ĠSet < Project With Deps > ĊĠĠĠ Ġ): ĠNo Suit able Apps Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġprojects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( project , Ġdependencies ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġto Ġdependencies . map Ġ{ ĠPath . path ( it . path ) Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( project , Ġdependencies ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresented Ġ= Ġdependencies . intersect ( modules ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġdependencies , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġpresented , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġmodules Ġ- Ġpresented ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠ Ġreturn ĠNo Suit able Apps ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠVer dict Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠOne Suit able App ( val Ġproject With Deps : ĠProject With Deps ) Ġ: ĠVer dict () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMultiple Suit able Apps ( val Ġprojects With Deps : ĠSet < Project With Deps >) Ġ: ĠVer dict () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( projects With Deps . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Multiple Suit able Apps Ġmust Ġcontain Ġmore Ġthen Ġone Ġapp " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠNo Suit able Apps ( val Ġresult : ĠSet < Result >) Ġ: ĠVer dict () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependencies : ĠSet < Path >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresented Modules : ĠSet < Path >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissed Modules : ĠSet < Path > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( missed Modules . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" When Ġver dict Ġis Ġno Ġsuitable Ġapp Ġthan ĠResult Ġmust Ġcontain Ġmissed Ġmodules " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ