package Ġcom . av ito . module . dependencies Ċ Ċ 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 Ġcom . av ito . module . internal . dependencies . Find Android App Task Ad visor Ċ import Ġcom . av ito . module . internal . dependencies . Project With Deps Ċ import Ġcom . av ito . test . gradle . android App Ċ import Ġcom . av ito . test . gradle . android Lib Ċ import Ġcom . av ito . test . gradle . java Lib Ċ import Ġcom . av ito . test . gradle . root Project Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . gradle . util . Path Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ public Ġclass ĠFind Android App Task Ad visor Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġad visor Ġ= ĠFind Android App Task Ad visor () ĊĠĠĠ Ġprivate Ġval Ġroot Ġ= Ġroot Project () ĊĠĠĠ Ġprivate Ġval Ġapp Ġ= Ġandroid App (" app ", Ġroot ) ĊĠĠĠ Ġprivate Ġval Ġapp Second Ġ= Ġandroid App (" app Second ", Ġroot ) ĊĠĠĠ Ġprivate Ġval Ġdependency Ġ= Ġjava Lib (" dependency ", Ġroot ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` one Ġsuitable Ġapp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠOne Suit able App ( Project With Deps ( app , Ġset Of ( dependency ))) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" In Ġyour Ġproject Ġis Ġonly Ġone Ġsuitable Ġapp Ġ: app ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` multiple Ġsuitable Ġapps Ġwith Ġequal Ġdeps Ġ- Ġshould Ġprefer Ġboth `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠMultiple Suit able Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject With Deps ( app , Ġset Of ( dependency )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject With Deps ( app Second , Ġset Of ( dependency )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| There Ġare Ġmultiple Ġsuitable Ġapps Ġ[: app , Ġ: app Second ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| You Ġshould Ġprefer Ġ[: app , Ġ: app Second ] Ġbecause Ġthey Ġhave Ġthe Ġleast Ġdependencies Ġin Ġgraph Ġsize = 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` multiple Ġsuitable Ġapps Ġwith Ġdifferent Ġdeps Ġ- Ġshould Ġprefer Ġwith Ġleast Ġdeps `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠMultiple Suit able Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject With Deps ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġset Of ( dependency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject With Deps ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp Second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġset Of ( dependency , Ġjava Lib (" dependency Second ", Ġroot )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| There Ġare Ġmultiple Ġsuitable Ġapps Ġ[: app , Ġ: app Second ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| You Ġshould Ġprefer Ġ: app Ġbecause Ġit Ġhas Ġthe Ġleast Ġdependencies Ġin Ġgraph Ġsize = 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` no Ġsuitable Ġapps Ġhave Ġequal Ġdeps `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠNo Suit able Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp Second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĠĠĠĠĠĠĠ Ġprintln ( ad vice ) ĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| There Ġare Ġno Ġsuitable ĠAndroid Ġapps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Apps Ġare Ġsorted Ġby Ġmissing Ġmodules : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Second Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` no Ġsuitable Ġapps Ġone Ġhas Ġleast Ġdeps Ġ- Ġchoose Ġit `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠNo Suit able Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġset Of ( Path . path ( android Lib (" lib ", Ġroot ). path )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp Second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| There Ġare Ġno Ġsuitable ĠAndroid Ġapps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Apps Ġare Ġsorted Ġby Ġmissing Ġmodules : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Second Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġpublic Ġfun Ġ` no Ġsuitable Ġapps Ġone Ġapp Ġhas Ġleast Ġmissing Ġdeps Ġ- Ġchoose Ġit `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġver dict Ġ= ĠNo Suit able Apps ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path ), ĠPath . path ( android Lib (" lib ", Ġroot ). path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNo Suit able Apps . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġapp Second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresented Modules Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Modules Ġ= Ġset Of ( Path . path ( dependency . path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġadvice Ġ= Ġad visor . give Ad vice ( ver dict ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ad vice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| There Ġare Ġno Ġsuitable ĠAndroid Ġapps ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Apps Ġare Ġsorted Ġby Ġmissing Ġmodules : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Second Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| App Ġ: app Ġcontains Ġ[] Ġbut Ġmissed Ġ[: dependency , Ġ: lib ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ