Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . dsl . Dependency Handler Ċ Ċ /** Ċ Ġ* ĠA Ġmodule Ġset Ġlists Ġall Ġmodules Ġthat , Ġby Ġdefault , Ġbelong Ġtogether Ġ( typ ically Ġlists Ġall Ġmodules Ġof Ġa Ġgroup ) Ċ Ġ*/ Ċ private Ġdata Ġclass ĠModule Set ( val Ġgroup : ĠString , Ġval Ġmodules : ĠList < String >, Ġval Ġreason : ĠString ) Ċ Ċ /** Ċ Ġ* ĠIf Ġalignment Ġneeds Ġto Ġbe Ġtweak ed , Ġe . g . Ġif Ġone Ġof Ġthe Ġmodules Ġcontains Ġa Ġbug , Ġalignment Ġcustom izations Ġcan Ġbe Ġused . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠAlignment Custom ization ( val Ġexclude s : ĠList < String > Ġ= Ġempty List ()) Ċ Ċ open Ġclass ĠAlign Plugin : ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġalign family Module Set Ġ= ĠModule Set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" alignment rule ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ= ĠlistOf (" align 0 ", Ġ" align 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" All Ġalign family Ġmodules Ġprovide Ġthe Ġ' align family ' Ġfunctionality Ġand Ġare Ġversion ed Ġtogether ." ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdirect align Module Set Ġ= ĠModule Set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" alignment rule ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ= ĠlistOf (" direct - align 0 ", Ġ" direct - align 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" All Ġdirect - align Ġmodules Ġprovide Ġthe Ġ' direct - align ' Ġfunctionality Ġand Ġare Ġversion ed Ġtogether ." ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġexclude align Module Set Ġ= ĠModule Set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" alignment rule ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ= ĠlistOf (" exclude - align 0 ", Ġ" exclude - align 1 ", Ġ" exclude - align 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" All Ġexclude - align Ġmodules Ġprovide Ġthe Ġ' exclude - align ' Ġfunctionality Ġand Ġare Ġversion ed Ġtogether ." ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġalign force Module Set Ġ= ĠModule Set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" alignment rule ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ= ĠlistOf (" align force 0 ", Ġ" align force 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" All Ġalign force Ġmodules Ġprovide Ġthe Ġ' align force ' Ġfunctionality Ġand Ġare Ġversion ed Ġtogether ." ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġreplaces : Ġalign - align family . json ĊĠĠĠĠĠĠĠ Ġproject . dependencies . align ( align family Module Set ) ĊĠĠĠĠĠĠĠ Ġ// Ġreplaces : Ġalign - direct align . json ĊĠĠĠĠĠĠĠ Ġproject . dependencies . align ( direct align Module Set ) ĊĠĠĠĠĠĠĠ Ġ// Ġreplaces : Ġalign - exclude align s . json ĊĠĠĠĠĠĠĠ Ġproject . dependencies . align ( exclude align Module Set , ĠAlignment Custom ization ( exclude s Ġ= ĠlistOf (" exclude - align 2 "))) ĊĠĠĠĠĠĠĠ Ġ// Ġreplaces : Ġalign - align force . json ĊĠĠĠĠĠĠĠ Ġproject . dependencies . align ( align force Module Set ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġalignment Ġpattern : Ċ Ġ* ĠEach Ġknown Ġversion Ġof Ġa Ġmodule Ġin Ġa Ġmodules Ġset Ġdefines Ġa Ġconstraint Ġto Ċ Ġ* Ġall Ġother Ġmodules Ġof Ġthe Ġset Ġwith Ġthe Ġsame Ġversion . Ċ Ġ*/ Ċ private Ġfun ĠDependency Handler . align ( module Set : ĠModule Set , Ġcustomization : ĠAlignment Custom ization Ġ= ĠAlignment Custom ization ()) Ġ{ ĊĠĠĠ Ġmodule Set . modules . filter Ġ{ Ġ! custom ization . exclude s . contains ( it ) Ġ}. forEach Ġ{ ĠmoduleName Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . components . with Module ("${ module Set . group }: $ moduleName ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġid . version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Variants Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Dependency Constraints Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Set . modules . filter Ġ{ ĠmoduleName Ġ!= Ġit Ġ&& Ġ! custom ization . exclude s . contains ( it ) Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ("${ module Set . group }: $ it :$ version ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbecause ( module Set . reason ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ