/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ @ file : Jvm Name (" Artifact Dependency Util ") Ċ package Ġcom . android . project model Ċ Ċ import Ġcom . android . ide . common . repository . Gradle Coordinate Ċ import Ġjava . util . Identity HashMap Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġnode Ġin Ġthe Ġdependency Ġgraph . Ċ Ġ* Ċ Ġ* ĠNew Ġproperties Ġmay Ġbe Ġadded Ġin Ġthe Ġfuture ; Ġclients Ġthat Ġinvoke Ġthe Ġconstructor Ġare Ġencour aged Ġto Ċ Ġ* Ġuse ĠKotlin Ġnamed Ġarguments Ġto Ġstay Ġsource Ġcompatible . Ċ Ġ*/ Ċ data Ġclass ĠArtifact Dependency Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdependency Ġitself . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġlibrary : ĠLibrary , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġof Ġother Ġdependencies Ġthat Ġare Ġneeded Ġto Ġsupport Ġthis Ġdependency . ĠNote Ġthat Ġthis ĊĠĠĠĠĠĠĠĠ Ġ* Ġproperty Ġforms Ġa ĠDAG Ġbetween Ġother Ġdependencies . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdependencies : ĠList < Artifact Dependency > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRequest ed ĠMaven Ġcoordinate Ġfor Ġthis Ġdependency , Ġif Ġone Ġexisted Ġin Ġthe Ġbuild Ġfile . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġrequested Maven Coordinate : ĠGradle Coordinate ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠResolved ĠMaven Ġcoordinate Ġfor Ġthis Ġdependency , Ġif Ġone Ġexisted Ġand Ġis Ġknown Ġto Ġthe Ġbuild Ġsystem . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Maven Coordinate : ĠGradle Coordinate ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprops Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġprops . add (" library =$ library ") ĊĠĠĠĠĠĠĠ Ġif Ġ( dependencies . isNotEmpty ()) Ġprops . add (" dependencies . size =${ dependencies . size }") ĊĠĠĠĠĠĠĠ Ġif Ġ( requested Maven Coordinate Ġ!= Ġnull ) Ġprops . add (" requested Maven Coordinate =$ requested Maven Coordinate ") ĊĠĠĠĠĠĠĠ Ġif Ġ( resolved Maven Coordinate Ġ!= Ġnull ) Ġprops . add (" resolved Maven Coordinate =$ resolved Maven Coordinate ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Artifact Dependency (${ props . join ToString (",") })" ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠUses Ġa Ġdepth - first Ġsearch Ġto Ġvisit Ġeach Ġdependency Ġexactly Ġonce . ĠThe Ġresult Ġmay Ġcontain Ġmultiple Ċ Ġ* Ġequal Ġ[ Artifact Dependency ] Ġinstances , Ġbut Ġit Ġwill Ġnever Ġcontain Ġthe Ġsame Ġinstance Ġtwice . Ċ Ġ*/ Ċ fun ĠIterable < Artifact Dependency >. visit Each (): ĠSequence < Artifact Dependency > Ġ= ĊĠĠĠ Ġvisit Each Impl ( Identity HashMap < Artifact Dependency , ĠBoolean ?> (), Ġas Sequence ()) Ċ Ċ /** Ċ Ġ* ĠUses Ġa Ġdepth - first Ġsearch Ġto Ġvisit Ġeach Ġdependency Ġexactly Ġonce . ĠThe Ġresult Ġmay Ġcontain Ġmultiple Ċ Ġ* Ġequal Ġ[ Artifact Dependency ] Ġinstances , Ġbut Ġit Ġwill Ġnever Ġcontain Ġthe Ġsame Ġinstance Ġtwice . Ċ Ġ*/ Ċ fun ĠSequence < Artifact Dependency >. visit Each (): ĠSequence < Artifact Dependency > Ġ= ĊĠĠĠ Ġvisit Each Impl ( Identity HashMap < Artifact Dependency , ĠBoolean ?> (), Ġthis ) Ċ Ċ internal Ġfun Ġvisit Each Impl ( ĊĠĠĠ Ġvisited : ĠIdentity HashMap < Artifact Dependency , ĠBoolean ? >, ĊĠĠĠ Ġsequence : ĠSequence < Artifact Dependency > Ċ ): ĠSequence < Artifact Dependency > Ġ= ĊĠĠĠ Ġsequence . flatMap Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe 've Ġseen Ġthis Ġinstance Ġbefore , Ġskip Ġit . ĠIf Ġnot , Ġvisit Ġit . ĊĠĠĠĠĠĠĠ Ġif Ġ( visited . put ( it , Ġtrue ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Each Impl ( visited , Ġit . dependencies . as Sequence ()) Ġ+ Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġempty Sequence () ĊĠĠĠ Ġ} Ċ