package Ġorg . gradle . plugins . lifecycle Ċ Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . dsl . Dependency Handler Ċ import Ġorg . gradle . api . model . ObjectFactory Ċ import Ġjavax . inject . Inject Ċ Ċ open Ġclass ĠLifecycle Plugin Ġ@ Inject Ġconstructor ( private Ġval Ġobject Factory : ĠObject Factory ) Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġoverride ĊĠĠĠ Ġfun Ġapply ( project : ĠProject ): ĠUnit Ġ= Ġproject . run Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure Schema () ĊĠĠĠĠĠĠĠ Ġconfigure Default Lifecycle () ĊĠĠĠĠĠĠĠ Ġconfigure Graph Validation () ĊĠĠĠĠĠĠĠ Ġconfigure Lifecycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . configure Schema () Ġ{ ĊĠĠĠĠĠĠĠ Ġdependencies . attributes Schema . attribute ( LI FE CYCLE _ ATTRIBUTE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompatibility Rules . add ( Lifecycle Compatibility Rule :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis amb ig uation Rules . add ( Lifecycle Dis amb ig uation Rules :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ( lifecycle ( AL IVE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ( lifecycle ( DEPRECATED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ( lifecycle ( BLACK LIST ED )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . configure Default Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigurations . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute ( LI FE CYCLE _ ATTRIBUTE , Ġobjects . named ( Lifecycle :: class . java , ĠA LI VE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun ĠProject . configure Graph Validation () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigurations . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Name Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincoming . after Resolve Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Result . all Components Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Lifecycle Attribute ( variant . attributes )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠBLACK LIST ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Configuration Ġ$ config Name Ġresolved Ġa Ġblack listed Ġmodule : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== ĠDE PRECATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Configuration Ġ$ config Name Ġresolved Ġa Ġdeprecated Ġmodule : Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . configure Lifecycle () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . dependencies . mark All Alive () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġcould Ġcome Ġfrom Ġan Ġexternal Ġservice ĊĠĠĠĠĠĠĠ Ġproject . dependencies . de prec ate (" com . acme : test B ", Ġ" 3 ") ĊĠĠĠĠĠĠĠ Ġproject . dependencies . blacklist (" com . acme : test B ", Ġ" 4 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDependency Handler . mark All Alive () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponents . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute ( LI FE CYCLE _ ATTRIBUTE , Ġlifecycle ( AL IVE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDependency Handler . de prec ate ( module : ĠString , Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponents . with Module ( module ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id . version Ġ== Ġversion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute ( LI FE CYCLE _ ATTRIBUTE , Ġlifecycle ( DEPRECATED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDependency Handler . blacklist ( module : ĠString , Ġversion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponents . with Module ( module ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id . version Ġ== Ġversion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute ( LI FE CYCLE _ ATTRIBUTE , Ġlifecycle ( BLACK LIST ED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġlifecycle ( name : ĠString ) Ġ= Ġobject Factory . named ( Lifecycle :: class . java , Ġname ) Ċ Ċ } Ċ