/* Ċ Ġ* Ġ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 . build . gradle . internal . dependency Ċ Ċ import Ġcom . android . build . gradle . internal . dependency . Android X Dependency Substitution . COM _ ANDROID _ DAT AB IND ING _ BASE LIBRARY Ċ import Ġcom . android . build . gradle . internal . utils . getModule Components Ċ import Ġcom . android . build . gradle . internal . utils . getPath From Root Ċ import Ġcom . android . build . gradle . options . Boolean Option Ċ import Ġcom . android . build . gradle . options . Version Ċ import Ġcom . android . builder . errors . Issue Reporter Ċ import Ġcom . android . builder . errors . Issue Reporter . Type . ANDROID _ X _ PROPERTY _ NOT _ ENABLED Ċ import Ġorg . gradle . api . Action Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Res olvable Dependencies Ċ Ċ /** Ċ Ġ* ĠChecks Ġwhether Ġa Ġconfiguration Ġcontains ĠAndroid X Ġor Ġlegacy Ġsupport Ġlibrary Ġdependencies , Ġand Ċ Ġ* Ġissues Ġan Ġerror / warning Ġwhere Ġappropriate Ġbased Ġon Ġthe Ġcurrent Ġsettings Ġof Ġthe Ċ Ġ* Ġ` android . use Android X ` Ġand Ġ` android . enable Jet ifier ` Ġproperties . Ċ Ġ*/ Ċ object ĠAndroid X Dependency Check Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġto Ġrun Ġwhen Ġ` android . use Android X = false ` Ġand Ġ` android . enabled Jet ifier = false `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠThe Ġcaller Ġmust Ġinvoke Ġthis Ġcheck Ġonly Ġunder Ġthe Ġabove Ġcondition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠAndroid X Disabled Jet ifier Disabled ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfiguration Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġissue Reporter : ĠIssue Reporter ĊĠĠĠ Ġ) Ġ: ĠAction < Res olvable Dependencies > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġissue Reported Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Android X Disabled Jet ifier Disabled :: class . java . name }_ issue _ reported " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( res olvable Dependencies : ĠRes olvable Dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReport Ġonly Ġonce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project . extensions . extra Properties . has ( issue Reported )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid X Dependencies Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresol vable Dependencies . resolution Result . getModule Components Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid X Dependency Substitution . is Android X Dependency ("${ it . group }:${ it . module }:${ it . version }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaths To Android X Dependencies Ġ= Ġandroid X Dependencies . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getPath From Root (). getPath String ( configuration Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġdatab ind ing - compiler Ġ( see Ġbug Ġ 1 7 9 3 7 7 6 8 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . contains (" android x . databinding : databinding - compiler :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( paths To Android X Dependencies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . extensions . extra Properties . set ( issue Reported , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Configuration Ġ`$ configuration Name ` Ġcontains ĠAndroid X Ġdependencies , Ġbut Ġthe Ġ`${ Boolean Option . USE _ ANDROID _ X . propertyName }` Ġproperty Ġis Ġnot Ġenabled , Ġwhich Ġmay Ġcause Ġruntime Ġissues .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Set Ġ`${ Boolean Option . USE _ ANDROID _ X . propertyName }= true ` Ġin Ġthe Ġ` gradle . properties ` Ġfile Ġand Ġretry .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġfollowing ĠAndroid X Ġdependencies Ġare Ġdetected :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaths To Android X Dependencies . join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Reporter . report Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND ROID _ X _ PROPERTY _ NOT _ ENABLED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaths To Android X Dependencies . join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġto Ġrun Ġwhen Ġ` android . use Android X = true ` Ġand Ġ` android . enabled Jet ifier = false `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNOTE : ĠThe Ġcaller Ġmust Ġinvoke Ġthis Ġcheck Ġonly Ġunder Ġthe Ġabove Ġcondition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠAndroid X Enabled Jet ifier Disabled ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġconfiguration Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġissue Reporter : ĠIssue Reporter ĊĠĠĠ Ġ) Ġ: ĠAction < Res olvable Dependencies > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġissue Reported Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Android X Enabled Jet ifier Disabled :: class . java . name }_ issue _ reported " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( res olvable Dependencies : ĠRes olvable Dependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReport Ġonly Ġonce ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project . extensions . extra Properties . has ( issue Reported )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupport Lib Dependencies Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresol vable Dependencies . resolution Result . getModule Components Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Id Ġ= Ġ"${ it . group }:${ it . module }:${ it . version }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid X Dependency Substitution . is Legacy Support Lib Dependency ( component Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcom . android . databinding : base Library Ġis Ġan Ġexception Ġ( see Ġbug Ġ 1 8 7 4 4 8 8 2 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! component Id . startsWith ( COM _ ANDROID _ DAT AB IND ING _ BASE LIBRARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support Lib Dependencies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . extensions . extra Properties . set ( issue Reported , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaths To Support Lib Dependencies Ġ= Ġsupport Lib Dependencies . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getPath From Root (). getPath String ( configuration Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Your Ġproject Ġhas Ġset Ġ`${ Boolean Option . USE _ ANDROID _ X . propertyName }= true `, Ġbut Ġconfiguration Ġ`$ configuration Name ` Ġstill Ġcontains Ġlegacy Ġsupport Ġlibraries , Ġwhich Ġmay Ġcause Ġruntime Ġissues .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġbehavior Ġwill Ġnot Ġbe Ġallowed Ġin ĠAndroid ĠGradle Ġplugin Ġ${ Version . VERSION _ 8 _ 0 . version String }. \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Please Ġuse Ġonly ĠAndroid X Ġdependencies Ġor Ġset Ġ`${ Boolean Option . ENABLE _ J ET IFIER . propertyName }= true ` Ġin Ġthe Ġ` gradle . properties ` Ġfile Ġto Ġmigrate Ġyour Ġproject Ġto ĠAndroid X Ġ( see Ġhttps :// developer . android . com / jet pack / android x / migrate Ġfor Ġmore Ġinfo ).\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġfollowing Ġlegacy Ġsupport Ġlibraries Ġare Ġdetected :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaths To Support Lib Dependencies . join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Reporter . report Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND ROID _ X _ PROPERTY _ NOT _ ENABLED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaths To Support Lib Dependencies . join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ