/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ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 . Ċ Ġ*/ Ċ package Ġcom . android . tools . idea . gradle . project . sync . idea . sv s Ċ Ċ import Ġcom . android . builder . model . Android Project Ċ import Ġcom . android . builder . model . Model Builder Parameter Ċ import Ġcom . android . builder . model . Native Android Project Ċ import Ġcom . android . builder . model . Project Sync Issues Ċ import Ġcom . android . builder . model . level 2 . Global Library Map Ċ import Ġcom . android . ide . gradle . model . Gradle Plugin Model Ċ import Ġcom . android . tools . idea . gradle . project . sync . Sync Action Options Ċ import Ġcom . android . tools . idea . gradle . project . sync . idea . Used In Build Action Ċ import Ġcom . android . tools . idea . gradle . project . sync . idea . getAdditional Classifier Artifacts Model Ċ import Ġorg . gradle . tool ing . Build Controller Ċ import Ġorg . gradle . tool ing . Unsupported Version Exception Ċ import Ġorg . gradle . tool ing . model . Model Ċ import Ġorg . gradle . tool ing . model . gradle . Basic Gradle Project Ċ import Ġorg . gradle . tool ing . model . gradle . Gradle Build Ċ import Ġorg . jetbrains . kotlin . k apt . idea . K apt Gradle Model Ċ import Ġorg . jetbrains . plugins . gradle . model . Project Import Model Provider Ċ Ċ @ Used In Build Action Ċ class ĠAndroid Extra Model Provider ( private Ġval Ġsync Action Options : ĠSync Action Options ) Ġ: ĠProject Import Model Provider Ġ{ ĊĠ Ġoverride Ġfun Ġpopulate Build Models ( ĊĠĠĠ Ġcontroller : ĠBuild Controller , ĊĠĠĠ Ġbuild Model : ĠGradle Build , ĊĠĠĠ Ġconsumer : ĠProject Import Model Provider . Build Model Consumer ) Ġ{ ĊĠĠĠ Ġpopulate Android Models ( controller , Ġbuild Model , Ġconsumer ) ĊĠĠĠ Ġ// ĠRequest ing ĠProject Sync Issues Ġmust Ġbe Ġperformed Ġlast Ġsince Ġall Ġother Ġmodel Ġrequests Ġmay Ġproduces Ġaddition Ġissues . ĊĠĠĠ Ġpopulate Project Sync Issues ( controller , Ġbuild Model , Ġconsumer ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpopulate Project Models ( controller : ĠBuild Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Model : ĠModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Consumer : ĠProject Import Model Provider . Project Model Consumer ) Ġ{ ĊĠĠĠ Ġcontroller . find Model ( project Model , ĠGradle Plugin Model :: class . java ) ĊĠĠĠĠĠ Ġ? . also Ġ{ Ġplugin Model Ġ-> Ġmodel Consumer . consume ( plugin Model , ĠGradle Plugin Model :: class . java ) Ġ} ĊĠĠĠ Ġcontroller . find Model ( project Model , ĠK apt Gradle Model :: class . java ) ĊĠĠĠĠĠ Ġ? . also Ġ{ Ġmodel Ġ-> Ġmodel Consumer . consume ( model , ĠK apt Gradle Model :: class . java ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRequests ĠAndroid Ġproject Ġmodels Ġfor Ġthe Ġgiven Ġ[ build Model ] Ġand Ġregisters Ġthem Ġwith Ġthe Ġ[ consumer ] ĊĠĠ Ġ* ĊĠĠ Ġ* ĠWe Ġdo Ġthis Ġby Ġgoing Ġthrough Ġeach Ġmodule Ġand Ġquery ĠGradle Ġfor Ġthe Ġfollowing Ġmodels : ĊĠĠ Ġ* ĠĠĠ 1 . ĠQuery Ġfor Ġthe ĠAndroid Project Ġfor Ġthe Ġmodule ĊĠĠ Ġ* ĠĠĠ 2 . ĠQuery Ġfor Ġthe ĠNative Android Project Ġ( only Ġif Ġwe Ġalso Ġobtain Ġan ĠAndroid Ġproject ) ĊĠĠ Ġ* ĠĠĠ 3 . ĠQuery Ġfor Ġthe ĠGlobal Library Map Ġfor Ġthe Ġmodule Ġ( we ĠAL WAYS Ġdo Ġthis Ġregardless Ġof Ġthe Ġother Ġtwo Ġmodels ) ĊĠĠ Ġ* ĠĠĠ 4 . Ġ( Single ĠVariant ĠSync Ġonly ) ĠWork Ġout Ġwhich Ġvariant Ġfor Ġwhich Ġmodels Ġwe Ġneed Ġto Ġrequest , Ġand Ġrequest Ġthem . ĊĠĠ Ġ* ĠĠĠĠĠ ĠSee ĠIde a Selected Variant Chooser Ġfor Ġmore Ġdetails . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIf Ġsingle Ġvariant Ġsync Ġis Ġenabled Ġthen Ġ[ find Parameterized Android Model ] Ġwill Ġuse ĠGradle Ġparameter ized Ġmodel Ġbuilder ĠAPI ĊĠĠ Ġ* Ġin Ġorder Ġto Ġstop ĠGradle Ġfrom Ġbuilding Ġthe Ġvariant . ĊĠĠ Ġ* ĠAll Ġof Ġthe Ġrequested Ġmodels Ġare Ġregistered Ġback Ġto Ġthe Ġexternal Ġproject Ġsystem Ġvia Ġthe ĊĠĠ Ġ* Ġ[ Project Import Model Provider . Build Model Consumer ] Ġcallback . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġpopulate Android Models ( ĊĠĠĠ Ġcontroller : ĠBuild Controller , ĊĠĠĠ Ġbuild Model : ĠGradle Build , ĊĠĠĠ Ġconsumer : ĠProject Import Model Provider . Build Model Consumer ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġandroid Modules : ĠMutable List < Android Module > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġbuild Model . projects . forEach Ġ{ Ġgradle Project Ġ-> ĊĠĠĠĠĠ Ġfind Parameterized Android Model ( controller , Ġgradle Project , ĠAndroid Project :: class . java )?. also Ġ{ Ġandroid Project Ġ-> ĊĠĠĠĠĠĠĠ Ġconsumer . consume Project Model ( gradle Project , Ġandroid Project , ĠAndroid Project :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnative Android Project Ġ= Ġfind Parameterized Android Model ( controller , Ġgradle Project , ĠNative Android Project :: class . java )?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconsumer . consume Project Model ( gradle Project , Ġit , ĠNative Android Project :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġandroid Modules . add ( Android Module ( gradle Project , Ġandroid Project , Ġnative Android Project )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( sync Action Options . is Single Variant Sync Enabled ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠThis Ġsection Ġis Ġfor ĠSingle ĠVariant ĠSync Ġspecific Ġmodels Ġif Ġwe Ġhave Ġreached Ġhere Ġwe Ġshould Ġhave Ġalready Ġrequested ĠAndroid Projects ĊĠĠĠĠĠ Ġ// Ġwithout Ġany ĠVariant Ġinformation . ĠNow Ġwe Ġneed Ġto Ġrequest Ġthat ĠVariant Ġinformation Ġfor Ġthe Ġvariants Ġthat Ġwe Ġare Ġinterested Ġin . ĊĠĠĠĠĠ Ġ// Ġe . g Ġthe Ġones Ġthat Ġshould Ġbe Ġselected Ġby Ġthe ĠIDE . ĊĠĠĠĠĠ Ġchoose Selected Variants ( controller , Ġandroid Modules , Ġsync Action Options ) ĊĠĠĠĠĠ Ġandroid Modules . forEach Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠ Ġ// ĠVari ants Ġcan Ġbe Ġempty Ġif Ġsingle - variant Ġsync Ġis Ġenabled Ġbut Ġnot Ġsupported Ġfor Ġcurrent Ġmodule . ĊĠĠĠĠĠĠĠ Ġif Ġ( module . variant Group . variants . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconsumer . consume Project Model ( module . gradle Project , Ġmodule . variant Group , ĠVariant Group :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGlobal Library Map Ġmust Ġbe Ġrequested Ġafter ĠVariant Ġmodels Ġsince Ġit Ġis Ġbuilt Ġduring Ġdependency Ġresolution . ĊĠĠĠ Ġif Ġ( android Modules . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġproject Ġ= Ġandroid Modules [ 0 ]. gradle Project ĊĠĠĠĠĠ Ġcontroller . find Model ( project , ĠGlobal Library Map :: class . java )?. also Ġ{ Ġglobal Library Map Ġ-> ĊĠĠĠĠĠĠĠ Ġconsumer . consume Project Model ( project , Ġglobal Library Map , ĠGlobal Library Map :: class . java ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAdditional Class ifer Artifacts Model Ġmust Ġbe Ġrequested Ġafter ĠAndroid Project Ġand ĠVariant Ġmodel Ġsince Ġit Ġrequires Ġthe Ġlibrary Ġlist Ġin Ġdependency Ġmodel . ĊĠĠĠ Ġget Additional Classifier Artifacts Model ( ĊĠĠĠĠĠ Ġcontroller , ĊĠĠĠĠĠ Ġandroid Modules , ĊĠĠĠĠĠ Ġsync Action Options . cached Libraries , ĊĠĠĠĠĠ Ġconsumer , ĊĠĠĠĠĠ Ġsync Action Options . download Android x UIS ample s Sources ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpopulate Project Sync Issues ( ĊĠĠĠ Ġcontroller : ĠBuild Controller , ĊĠĠĠ Ġbuild Model : ĠGradle Build , ĊĠĠĠ Ġconsumer : ĠProject Import Model Provider . Build Model Consumer ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġbuild Model . projects . forEach Ġ{ Ġgradle Project Ġ-> ĊĠĠĠĠĠ Ġcontroller . find Model ( gradle Project , ĠProject Sync Issues :: class . java )?. also Ġ{ Ġproject Sync Issues Ġ-> ĊĠĠĠĠĠĠĠ Ġconsumer . consume Project Model ( gradle Project , Ġproject Sync Issues , ĠProject Sync Issues :: class . java ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGets Ġthe Ġ[ Android Project ] Ġor Ġ[ Native Android Project ] Ġ( based Ġon Ġ[ model Type ]) Ġfor Ġthe Ġgiven Ġ[ Basic Gradle Project ]. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġ< T > Ġfind Parameterized Android Model ( controller : ĠBuild Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠBasic Gradle Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Type : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠ Ġif Ġ( sync Action Options . is Single Variant Sync Enabled ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġcontroller . getModel ( project , Ġmodel Type , ĠModel Builder Parameter :: class . java ) Ġ{ Ġparameter Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġparameter . should Build Variant Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( model Ġ!= Ġnull ) Ġreturn Ġmodel ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠUnsupported Version Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUsing Ġold Ġversion Ġof ĠGradle . ĠFall Ġback Ġto Ġfull Ġvariants Ġsync Ġfor Ġthis Ġmodule . ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcontroller . find Model ( project , Ġmodel Type ) ĊĠ Ġ} Ċ }